我使用分布式通知中心在safari扩展应用程序和MacOS应用程序之间传输数据。我使用具有特定通知名称的DistributedNotificationCenter.default().addObserver
,并使用相同名称DistributedNotificationCenter.default().postNotificationName
从MacOS应用程序发布通知
我一直收到attempt to post distributed notification 'nameofnotification' thwarted by sandboxing.
我在苹果的文档中看到
沙盒应用程序只有在不包含词典如果发送应用程序位于应用程序沙盒中,则userInfo必须为零。
我的用户信息不是零,但这在以前版本的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服务的想法,或任何其他在沙盒扩展程序和应用程序之间通信和发送数据的方式。
XPC在这种情况下将无法工作。应通过SFSafariExtensionHandler
子类执行与新型Safari扩展的通信。
建议通过Xcode相应的模板创建Safari扩展,所有重要的设置、Info.plist字段和基础设施都将为您设置。
请在官方构建Safari应用程序扩展中查看良好的文档详细信息