2014-10-18 68 views
9

我正在研究OS X的Finder Sync扩展,并希望使用后台XPC服务。Finder同步扩展和XPC之间的通信

我可以从主应用程序启动,让它启动XPC并正常运行,但是当我试图从Finder Sync访问它时没有任何反应。发现者同步和XPC都是他们自己的捆绑包,所以这可能是原因。我想要的是,查找器同步与XPC讨论文件状态和主应用程序,以便与查找器同步和XPC讨论要观看的文件夹列表。

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

回答

3

与一些苹果工程师合作,他们意识到这是一个问题,并建议使用LoginItem,直到有更好的解决方案。

所以,这是一种XPC服务,只是一个不断运行。 XPC通信可用于扩展和主机应用程序。

它的工作原理,虽然它不是最理想的解决方案。我推荐处理XPC登录项目的苹果示例项目,以获取如何使其工作的示例。

+0

您能否详细解释一下这个问题?你是否将单独的应用程序用作XPC服务,或者将它捆绑在主应用程序中?我有一个问题,NSXPCConnection似乎无法从Finder插件打开我的XPC服务,该服务捆绑在主应用程序中。 – 2015-09-28 17:16:25

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

希望这可以帮助你,

+0

共享数据库仍然是一个推荐的方式来做FinderSyncExtension <-> MainApp通信?如何通知Finder它应该在数据库更新时自行刷新? – mixtly87 2016-12-07 07:56:19

+0

我现在强烈推荐AppleScript。我只是盲目地关注苹果文档,并完全忘记了AppleScript。我正在使用AppleScript进行通信。不,您不需要使用共享容器,感谢AppleScript :) – 2017-05-17 16:14:34

1

我实现了MainApp < - > FinderSyncExtension通过CFMessagePorts进行通讯。有关详细信息,请参见this answer