为什么我的Safari应用程序扩展NSLog消息在Xcode控制台中没有显示出来?

26
我正在遵循Apple创建Safari应用程序扩展的指南。简而言之,我已经:
  • 使用Cocoa应用程序模板在Xcode 8.1上创建了一个新的Xcode项目(在macOS 10.12 Sierra上)
  • 使用Safari Extension模板在应用程序中创建了一个新的目标
  • 运行了一次应用程序,以确保构建了Safari应用程序扩展
  • 在Safari的Develop菜单中选择“允许未签名扩展”选项
  • 在Safari的扩展偏好设置面板中启用了扩展

扩展的工具栏按钮出现在Safari中。苹果的指南说当我点击工具栏按钮时,我应该在控制台中看到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控制台或Console应用程序中看到NSLog。

我是一个真正的Xcode新手,所以我肯定错过了一些显而易见的东西——但为什么NSLog消息不会出现在控制台中呢?

(我不以管理员身份运行,如果这有什么区别的话——尽管我第一次运行Xcode时输入了管理员帐户详细信息。我确实注意到,在Console应用程序中,当我选择system.log时,我只看到一条消息,上面写着“无法读取文件”。这可能与不以管理员身份运行有关。)

2个回答

28

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

将弹出一个窗口,要求您选择要运行的应用程序:请选择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的开发人员菜单中重新勾选"允许未签名扩展",然后在首选项面板中启用该扩展即可。完成上述步骤后,您就可以使用该扩展了。

这是正确的方式。令人遗憾的是,官方指南在说“确保选择你的 macOS 应用程序”时是误导性的 - Franklin Yu
哦,谢谢!我已经谷歌搜索了很长时间了...现在,什么情况下选择另一个模式比较合适? - mccc
1
使用扩展方案并未对您的应用程序和扩展进行签名的麻烦是,每次重新构建时都需要“允许未签名的扩展”(以及其他步骤)。 使用带有控制台程序(还获取NSLog)的应用程序方案,并通过“Safari扩展”在那里过滤消息更容易。 - Will White
@WillWhite 我现在正在使用应用程序方案,那么我应该在哪里检查控制台中的日志?打开终端吗? - yuan
@innocentDrifter 控制台是应用程序中的一个实用工具。 - Will White
显示剩余4条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接