为什么我的 Safari App Extension NSLog 消息没有显示在 Xcode 的控制台中?
Why aren’t my Safari App Extension NSLog messages showing up in the console in Xcode?
我正在关注 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 消息没有出现在控制台中?
(我没有 运行 作为管理员,以防万一 - 尽管我确实在 运行ning [=45= 时被要求输入管理员帐户详细信息] 第一次。我确实注意到在控制台应用程序中,当我 select system.log 时,我只看到一条消息说“无法读取文件”。这个 might be related to not running as an administrator。)
切换到您的分机方案(方案就在 运行 和停止按钮的右侧),然后点击 运行。
一个弹出窗口会要求您选择一个应用到 运行:select 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 的“开发者”菜单中重新选中 "Allow Unsigned Extensions" 并在“首选项”窗格中启用扩展程序,之后您就可以开始了。
Xcode 10.2 beta 附带了实现该目标的新方法:SFSafariToolbarItem.showPopover()
参考:https://developer.apple.com/documentation/safariservices/sfsafaritoolbaritem?changes=latest_minor
我正在关注 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 消息没有出现在控制台中?
(我没有 运行 作为管理员,以防万一 - 尽管我确实在 运行ning [=45= 时被要求输入管理员帐户详细信息] 第一次。我确实注意到在控制台应用程序中,当我 select system.log 时,我只看到一条消息说“无法读取文件”。这个 might be related to not running as an administrator。)
切换到您的分机方案(方案就在 运行 和停止按钮的右侧),然后点击 运行。
一个弹出窗口会要求您选择一个应用到 运行:select 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 的“开发者”菜单中重新选中 "Allow Unsigned Extensions" 并在“首选项”窗格中启用扩展程序,之后您就可以开始了。
Xcode 10.2 beta 附带了实现该目标的新方法:SFSafariToolbarItem.showPopover()
参考:https://developer.apple.com/documentation/safariservices/sfsafaritoolbaritem?changes=latest_minor