2013-06-23 11 views
7

Come si utilizza uno LaunchAgent all'interno della sandbox? Voglio distribuire un pacchetto di app LaunchAgent senza UI all'interno della mia applicazione principale che posso avviare su richiesta. La ragione per cui voglio questo invece di un servizio XPC è per l'opzione KeepAlive, che impedirà l'annullamento automatico del mio processo quando è inattivo lo launchd. Questa opzione non esiste nei servizi XPC.Utilizzo di un LaunchAgent all'interno della sandbox dell'app per Mac.

La documentazione dice che c'è un plist che deve essere copiato in ~/Library/LaunchAgents, e questo ovviamente non è possibile all'interno della sandbox. Esiste una sorta di API di sistema che gestirà la copia del plist per me? Ho visto il codice di esempio SMJobBless di Apple, ma sembra che sia per la registrazione di un LaunchDaemon privilegiato piuttosto che di un LaunchAgent non privilegiato.

risposta

4

L'API che stai cercando è SMLoginItemSetEnabled(). Dovrai impacchettare il tuo agente di lunga durata come un normale pacchetto .app e inserirlo nel pacchetto dell'app principale al numero Content/Library/LoginItems.

Quindi in fase di esecuzione nell'applicazione principale è possibile utilizzare la chiamata SMLoginItemSetEnabled() con l'identificativo del pacchetto dell'agente per abilitare e disabilitare il proprio agente. Se l'applicazione principale si chiude, l'agente rimane attivo. Se l'utente si disconnette e ritorno o riavvii, il sistema operativo rilancerà il vostro agente quando l'utente accede nuovamente in

Aggiornamento:. Come nota Dmitry, la documentazione non viene fornito con il campione Originariamente ho citato, ma un altro Apple sample code project, per App Sandbox, mostra la stessa API (vedere il file NSXPCConnection+LoginItem.m).

Problemi correlati