【问题标题】:Why aren’t my Safari App Extension NSLog messages showing up in the console in Xcode?为什么我的 Safari App Extension NSLog 消息没有显示在 Xcode 的控制台中?
【发布时间】:2016-12-08 16:17:05
【问题描述】:

我正在关注Apple’s guide for creating a Safari App Extension。简而言之,我已经:

  • 使用 Cocoa 应用程序模板创建了一个新的 Xcode 项目(在 Xcode 8.1 中,在 macOS 10.12 Sierra 上)
  • 使用 Safari 扩展模板在应用程序中创建了一个新目标
  • 运行应用程序一次,以确保构建 Safari 应用程序扩展
  • 在 Safari 的“开发”菜单中选择了“允许未签名的扩展”选项
  • 在 Safari 的“扩展”偏好设置面板中启用了扩展

扩展的工具栏按钮出现在 Safari 中。 Apple 的指南说,当我单击工具栏按钮时,我应该在控制台中看到 NSLog 消息,但我什么也没看到。

我已经编辑了 SafariExtensionHandler.swift 以向扩展注入的脚本发送消息:

override func toolbarItemClicked(in window: SFSafariWindow) {
    // This method will be called when your toolbar item is clicked.
    NSLog("The extension's toolbar item was clicked")

    window.getActiveTab(completionHandler: { (activeTab) in
        activeTab?.getActivePage(completionHandler:  { (activePage) in
            activePage?.dispatchMessageToScript(withName: "toolbarItemClicked", userInfo: nil)

        })
    })
}

我已经编辑了注入的脚本 (script.js) 以提醒该消息:

safari.self.addEventListener("message", function (event) {
    alert("We got a message from the extension! - " + event.name + ": " + event.message);
});

当我单击工具栏按钮时(当我在 webkit.org 上的页面上,因为我保留了默认的 SFSafariWebsiteAccess 设置)时出现警报,因此扩展程序正在工作并注册单击。但我在 Xcode 的控制台或控制台应用程序中看不到 NSLog。

我是一个真正的 Xcode 新手,所以我确定我遗漏了一些明显的东西 — 但是为什么 NSLog 消息没有出现在控制台中?

(我不以管理员身份运行,以防万一——尽管我确实在第一次运行 Xcode 时被要求输入管理员帐户详细信息。我确实注意到在控制台应用程序中,当我选择 system.log 时,我只看到一条消息“无法读取文件”。这个might be related to not running as an administrator。)

【问题讨论】:

    标签: swift xcode nslog safari-app-extension


    【解决方案1】:

    切换到您的扩展程序的方案(方案就在运行和停止按钮的右侧),然后点击运行。

    弹出窗口会要求您选择要运行的应用程序:选择 Safari。

    应该会打开一个新的 Safari 实例,您将开始在 Xcode 控制台中看到日志输出。

    但是,如果您尚未签署您的应用程序和扩展程序,Safari 将拒绝您的扩展程序,并且控制台将显示如下消息

    2017-04-12 13:00:44.799843-0400 Safari[37188:2787364] [Extensions] 
    Computing the code signing dictionary failed for extension with 
    identifier com.your.app.extension
    2017-04-12 13:00:44.799865-0400 Safari[37188:2787364] [Extensions] 
    Disabling and blocking extension with identifier: 
    com.your.app.extension
    

    在这种情况下,您只需在 Safari 的开发人员菜单中重新选中“允许未签名的扩展程序”并在“首选项”窗格中启用该扩展程序,之后您就可以开始了。

    【讨论】:

    • 感谢我花了很长时间才看到你的答案:)
    • 有没有办法永远选择 Safari 作为应用程序运行?
    • 这是正确的方法。很遗憾,官方指南是误导,说“确保选择了你的macOS应用程序”。
    • 哦,谢谢!我在谷歌上搜索了很长时间。现在,什么时候适合选择其他架构?
    • 使用扩展方案但没有签署您的应用程序和扩展程序的问题是您每次重建时都需要“允许未签名的扩展程序”(以及其他步骤)。将应用程序方案与控制台程序(也获取 NSLogs)一起使用会更容易,并通过“Safari 扩展”过滤消息。
    【解决方案2】:

    Xcode 10.2 beta 附带了实现这一目标的新方法:SFSafariToolbarItem.showPopover()

    参考:https://developer.apple.com/documentation/safariservices/sfsafaritoolbaritem?changes=latest_minor

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 2014-01-04
      • 2019-01-14
      • 2011-09-09
      相关资源
      最近更新 更多