为什么我的Safari应用程序扩展名不在Xcode中显示在控制台中的NSLOG消息



我正在遵循苹果的指南,以创建Safari应用程序扩展名。简而言之,我:

  • 使用可可应用模板创建了一个新的Xcode项目(在Macos 10.12 Sierra上,在Macos 10.12 Sierra上创建了一个新的Xcode项目
  • 使用Safari扩展模板在应用中创建一个新目标
  • 一次运行该应用程序,以确保构建Safari应用程序扩展名
  • 在Safari的开发菜单中选择了"允许未签名的扩展"选项
  • 启用了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)
        })
    })
}

我已经编辑了注入的脚本(脚本.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 newbie,所以我敢肯定我缺少一些明显的东西 - 但是为什么NSLOG消息不会出现在控制台中?

(如果我在第一次运行Xcode时,我确实在要求我的情况下输入了管理员帐户的详细信息,但我确实在Console App中,我确实输入了管理员帐户详细信息,尽管我确实在管理员帐户详细信息时,当我选择system.log时,我只是看到一条消息,上面写着"无法读取文件"。这可能与不作为管理员运行有关。)

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

弹出窗口会要求您选择一个应用程序:选择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的开发人员菜单中重新检查"允许无符号扩展",然后启用Peasterences Pane中的扩展名,然后您应该很好。

xcode 10.2 beta船,使用新方法来实现这一目标: SFSafariToolbarItem.showPopover()

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