在finder同步扩展和XPC之间进行通信

时间:2014-10-18 05:18:02

标签: objective-c cocoa xpc findersync osx-extensions

我正在为OS X开发Finder Sync Extension,并希望使用后台XPC服务。

我可以在主应用程序中启动它并启动XPC并正确运行但是当我尝试从Finder Sync访问它时没有任何反应。 finder sync和XPC都是他们自己的捆绑包,所以这可能就是原因所在。我想要的是寻找器同步与XPC谈论文件的状态和主应用程序与finder同步和XPC谈论要观看的文件夹列表。

有人有运气吗?是否有更好的方式来进行随需应变的后台服务?是否可以在两个XPC服务之间进行通信?

4 个答案:

答案 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进行通信。有关详细信息,请参阅我的问题和答案:

How should Finder Sync Extension and Main App communicate?

答案 3 :(得分:0)

我顽固地忽略了utahwithak的答案,并试图使其正常运行。我最终不得不在Apple Developer Forum上问类似的问题,并且最终收到了关于为什么将Finder Sync Extension连接到嵌入式XPC服务不是一个可行的系统设计的明确答案。

本质上:

  • Finder Sync Extension本质上类似于第三方应用程序,因为它与主机应用程序的作用域不同,因此无法与嵌入式XPC服务建立XPC连接。
  • utahwithak的答案是正确的,因为为了允许Finder Sync Extension与XPC服务进行通信,它必须是XPC登录项。但是对此有一些警告:

    • 这似乎是偶然的功能。不知道这是否最终会被修复/删除
    • 由于XPC是登录项,因此即使不需要,XPC也必须始终处于运行状态。
    • 如果这是一个登录项目,则用户需要明确选择加入此功能并可以选择退出。

来源: