2014-10-18 43 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

相關問題