2014-10-18 9 views
9

Sto lavorando su un'estensione di ricerca del Finder per OS X e desidero utilizzare un servizio XPC in background.Comunica tra l'estensione di sincronizzazione finder e XPC

Posso iniziare nell'app principale e farlo avviare XPC ed eseguire correttamente, ma non succede nulla quando tento di accedervi da Finder Sync. sia il finder sync che l'XPC sono i loro bundle e questo potrebbe essere il motivo per cui. Quello che voglio è che la sincronizzazione del Finder parli con XPC dello stato dei file e l'app principale per parlare sia della sincronizzazione del cercatore che dell'XPC sulla lista delle cartelle da guardare.

Qualcuno ha avuto fortuna con questo? Esiste un modo migliore per un servizio in background su richiesta? È possibile parlare tra due servizi XPC?

risposta

3

Lavorando con alcuni ingegneri Apple, si è reso conto che si trattava di un problema e ha suggerito di utilizzare un oggetto Login fino a quando non è stata trovata una soluzione migliore.

Quindi, è una sorta di servizio XPC, solo uno che viene eseguito costantemente. La comunicazione XPC è disponibile sia per l'estensione che per l'app host.

Funziona, anche se non è la soluzione più ideale. Raccomando il progetto di esempio Apple che si occupa di elementi di login XPC per un esempio di come farlo funzionare.

+0

Puoi spiegarlo meglio? Stai utilizzando l'applicazione separata come servizio XPC o la riunisci nell'app principale? Ho un problema che NSXPCConnection non sembra aprire dal plugin Finder al mio servizio XPC, che è in bundle all'interno dell'app principale. –

1

Non è possibile comunicare direttamente tra l'applicazione contenitore e l'estensione, ma è possibile farlo indirettamente utilizzando le risorse condivise. Ho fatto esattamente quello che hai fatto, che è completamente scorretto. Spero che tu memorizzi lo stato del file nel database, se non lo memorizzi e poi condividi il database tra l'applicazione contenitore e l'estensione. Lo so, perché vuoi usare XPCService come nel documento FinderSync di Apple. (In realtà per la ragione prestazioni, Creare un NSXPCService all'estensione e dalla XPCService, accedere al database condiviso)

Per ulteriori informazioni sulla condivisione del database:

http://blog.sam-oakley.co.uk/post/92323630293/sharing-core-data-between-app-and-extension-in-ios-8

Spero che questo ti aiuta,

+0

Il database di condivisione è ancora un metodo consigliato per eseguire FinderSyncExtension <-> Comunicazione MainApp? Come notificare al Finder che dovrebbe aggiornarsi quando il database viene aggiornato? – mixtly87

+0

Consiglierei vivamente AppleScript ora. Ho seguito ciecamente i documenti Apple e ho completamente dimenticato AppleScript. Sto usando AppleScript per la comunicazione. No, non è necessario utilizzare un contenitore condiviso, grazie ad AppleScript :) –

1

Ho implementato MainApp < -> FinderSyncExtension comunicazione tramite CFMessagePorts. Vedi this answer per alcuni dettagli.

Problemi correlati