我正在为 OS X 开发 Finder 同步扩展,并希望使用后台 XPC 服务。
我可以在主应用程序中启动并让它启动 XPC 并正确运行,但是当我尝试从 Finder Sync 访问它时没有任何反应。finder 同步和 XPC 都是它们自己的捆绑包,所以这可能就是原因。我想要的是 finder 同步与 XPC 讨论文件的状态,主应用程序与 finder 同步和 XPC 讨论要观看的文件夹列表。
有没有人有这方面的运气?按需后台服务有更好的方法吗?是否可以在两个 XPC 服务之间进行通信?
我正在为 OS X 开发 Finder 同步扩展,并希望使用后台 XPC 服务。
我可以在主应用程序中启动并让它启动 XPC 并正确运行,但是当我尝试从 Finder Sync 访问它时没有任何反应。finder 同步和 XPC 都是它们自己的捆绑包,所以这可能就是原因。我想要的是 finder 同步与 XPC 讨论文件的状态,主应用程序与 finder 同步和 XPC 讨论要观看的文件夹列表。
有没有人有这方面的运气?按需后台服务有更好的方法吗?是否可以在两个 XPC 服务之间进行通信?
与一些 Apple 工程师合作后,他们意识到这是一个问题,并建议使用 LoginItem,直到找到更好的解决方案。
所以,它是一种 XPC 服务,只是一个不断运行的服务。XPC 通信可用于扩展和主机应用程序。
它有效,尽管它不是最理想的解决方案。我推荐处理 XPC 登录项的苹果示例项目,作为如何使其工作的示例。
我通过实现 MainApp <-> FinderSyncExtension 通信CFMessagePorts
。有关详细信息,请参阅我的问题和答案:
您不能直接在容器应用程序和扩展之间进行通信,但您可以使用共享资源间接地进行通信。我做了你所做的完全不正确的事情。我希望您将文件状态存储在数据库中,如果不存储,然后在容器应用程序和扩展之间共享数据库。我知道,您为什么要使用 Apple 的 FinderSync Doc 中的 XPCService。(其实是出于性能原因,为扩展创建一个NSXPCService,并从XPCService中访问共享数据库)
有关共享数据库的更多信息:
http://blog.sam-oakley.co.uk/post/92323630293/sharing-core-data-between-app-and-extension-in-ios-8
希望这对你有帮助,
我固执地忽略了 utahwithak的回答,并试图让它发挥作用。我最终不得不在 Apple Developer Forums 上问一个类似的问题,并最终得到了一个明确的答案,说明为什么将 Finder Sync Extension 连接到嵌入式 XPC 服务不是一个可行的系统设计。
本质上:
utahwithak的回答是正确的,为了让 Finder Sync Extension 与 XPC 服务通信,它需要是 XPC 登录项。但是,对此有一些警告:
资源: