Safari Extension Companion 始终为空
Posted
技术标签:
【中文标题】Safari Extension Companion 始终为空【英文标题】:Safari Extension Companion is always null 【发布时间】:2015-12-08 17:01:56 【问题描述】:我正在为我的本地 Mac 应用程序开发一个 Safari 扩展程序,我想使用SafariExtension Companion 在它们之间进行通信。
但是,在我的 Global.html 扩展中,每当我尝试获取 safari.extension.companion 时,它始终为空。我是否设置了错误的扩展程序?
另外,根据指南,我可以使用 safari.extension.addEventListener 来监听本地应用程序的消息,但是,当我调试扩展时,它提示我 safari.extension.addEventListener is undefined,这是为什么呢?
答案:safari.application.addEventListener 正确,Apple 写错文件。
我确实在 Extension Builder 中设置了确切的 Companion Bundle Identifier 作为我在 Xcode 中根据指南为 safari 伴侣设置的标识符。还有什么我想念的吗?请帮忙!!!
【问题讨论】:
【参考方案1】:Safari 扩展伴侣是一种 MacOS X 应用扩展。这些是作为应用程序包的一部分提供的。安装应用程序后(捆绑包被复制到应用程序),Safari 会选择扩展。
首先,您需要一个目标类型为“Cocoa 应用程序”的 Xcode 项目(“命令行工具”不行)。然后您需要创建一个类型为“Safari Extension Companion”的目标,并且您有机会在创建它时指定主应用程序。
当您构建和归档应用程序并导出归档文件时,您可以选择将扩展程序添加到应用程序包。然后安装 app bundle。
确保扩展的捆绑包 ID 与 Safari Extension Builder 中的设置相匹配。此外,请确保应用程序和 Safari 扩展程序都已签名,并且密钥具有匹配的开发人员 ID。对于 MacOS X 上的证书类型,请选择“开发者 ID”——首先是在请求时,然后在从构建存档中导出包时。
编辑:当原生伴侣崩溃时,Safari 会悄悄地禁用它。如果您删除并重新安装应用程序包,并重新启动 Safari,它会再次爱上伴侣。
【讨论】:
感谢您的回复。我做了所有的事情,但它仍然不起作用。我做了什么: 1.我在扩展中导入 Safari 证书。 2. 使用具有相同前缀的 Mac 开发证书对应用程序和伴侣进行签名 3. 将其存档并将其导出为 Development-Signed Application,然后将捆绑包复制到 Application 文件夹 原生部分也应该签名。我不确定您是否需要对主应用程序、扩展程序或两者都进行签名,所以我在构建 和导出时都签署了。 Safari 和 MacOS X 的证书在物理上是不同的,但它们具有相同的开发者 ID;以我的经验,这就足够了。 是否必须使用 Mac 分发证书进行签名?我只有开发证书。 在 Apple 网站申请 MacOS X 证书时,我指定了“开发者 ID”作为类型。尽管如此,它是一个分发(即生产)证书。从存档中导出捆绑包时,我还会指定“导出开发者 ID 签名的应用程序”。 它只是工作了一段时间......当 Safari 崩溃并且我再次打开它时,它不起作用。从日志中我看不到任何特别之处,只有一个日志。在成功的情况下,有一个消息“pkd: enable pid = xxxxx for plugin-in (plugin name, address and path)”。现在这条消息再也没有出现过。我怀疑它是否与Safari中的某些设置有关?以上是关于Safari Extension Companion 始终为空的主要内容,如果未能解决你的问题,请参考以下文章