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