2

我使用分布式通知中心在 safari 扩展应用程序和 MacOS 应用程序之间传输数据。我使用DistributedNotificationCenter.default().addObserver特定的通知名称,并使用相同的名称从 MacOS 应用程序发布通知DistributedNotificationCenter.default().postNotificationName

我不断得到attempt to post distributed notification 'nameofnotification' thwarted by sandboxing.

我在苹果文档中看到

只有在不包含字典的情况下,沙盒应用程序才能发送通知。如果发送应用程序在 App Sandbox 中,则 userInfo 必须为 nil。

我的用户信息不是零,但这在以前版本的 Mac 上运行良好。我错过了什么?这是比较新的吗?

在扩展程序和应用程序之间进行通信的替代方案是什么?XPC 服务会起作用吗?

更新

我已经按照苹果的文档实现了一个 XPC 服务,但是当我从 safari 扩展程序调用它时,我得到了这个错误Couldn’t communicate with a helper application.,我可以从嵌入 XPC 服务的应用程序调用它,而不会出现任何问题。

我试图:

  • 将服务复制到扩展程序的Contents/XPCServices
  • 添加一个应用程序组,并使用let connectionXPC = SXPCConnection.init(serviceName:"XXXXXXX.com.bundlename.XPCService")而不是仅let connectionXPC = NSXPCConnection.init(serviceName: "com.bundlename.XPCService")在 XXXXXXX 是应用程序组的位置。

关于如何正确使用扩展应用程序中的 XPC 服务的任何想法,或任何其他在沙盒扩展程序和应用程序之间通信和发送数据的方式。

4

1 回答 1

0

XPC 在这种情况下将不起作用。与新型 Safari Extensions 的通信应通过SFSafariExtensionHandler子类执行。

建议通过 Xcode 对应模板创建 Safari Extension,所有重要设置、Info.plist 字段和基础设施都会为您设置好。

请在官方构建 Safari 应用程序扩展中查看良好的文档详细信息

于 2020-02-25T15:12:21.000 回答