2011-09-15 2 views
10

In realtà, ho letto il seguente documento:Come creare un'applicazione di supporto per l'applicazione Mac per avviarla all'accesso utente?

Applications can contain a helper application as a full application bundle, stored inside the main application bundle in the Contents/Library/LoginItems directory. Set either the LSUIElement or LSBackgroundOnly key in the Info.plist file of the helper application’s bundle.

non ho ben capito, qualcuno sa come fare?

e anche, cosa significa:

Note: Before calling the SMLoginItemSetEnabled function, first register with Launch Services by calling the LSRegisterURL function with the URL for the helper application bundle.

c'è qualche esempio su come utilizzare LSRegisterURL e SMLoginItemSetEnabled?

+1

ero veramente bloccato con questo, e poi ho trovato questa soluzione: http://blog.timschroeder.net/2012/07/03/the-launch-at-login-sandbox-project/ Mi ha davvero aiutato senza fine. –

+0

possibile duplicato di [Mac OS X: avviare all'avvio mentre si trova nell'app store?] (Http://stackoverflow.com/questions/11536477/mac-os-x-start-on-launch-while-in-app-store) L'impostazione –

risposta

0

non ho mai usato LSRegisterURL, posso rispondere alla prima domanda: per impostare il bit LSUIElement basta semplicemente aprire il .plist e aggiungere la riga "L'applicazione è l'agente (UIElement)", quindi impostare il valore su true.

+0

LSUIElement su TRUE sta creando un'applicazione di supporto? in effetti, non capisco cosa sia l''applicazione di supporto'? dov'è? – disorderdev

-1

Fondamentalmente è necessario dare un'occhiata a Launch Services che è solo un involucro intorno a launchd, che è possibile controllare guardando man launchd nel terminale.

o dare un'occhiata a questa domanda qui a SO How do you make your App open at login?

+0

disorderdev non è l'unico in questa barca. Trovo strano che non sia stato trovato alcun codice di esempio sull'utilizzo di SMLoginItemSetEnabled. Non in GitHub, non in Google. nada. – Antony

+0

bene c'è un paio di codice di esempio nell'articolo SO a cui ho fatto riferimento nella mia risposta. Hai trovato il tempo di dargli un'occhiata? – GorillaPatch

+0

beh, man launchd espone la sintassi per l'esecuzione di un servizio in background, ma non dettaglia molto su come puoi impaginare il codice in obj-c. D'altra parte, il collegamento che hai fornito è in realtà per l'approccio dell'elenco di file condivisi. La [documentazione] (http://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLoginItems.html#//apple_ref/doc/uid/10000172i-SW5-SW1) doesn ' t dettaglio molto se si vuole prendere l'approccio quadro di gestione dei servizi. Vogliamo creare un elemento di accesso che non consenta all'utente di disabilitare direttamente. – Antony

9
+ (void)startHelper { 
    NSURL *helperURL = [[[NSBundle mainBundle] bundleURL] URLByAppendingPathComponent:@"Contents/Library/LoginItems/YourHelper.app" isDirectory:YES]; 
    OSStatus status = LSRegisterURL((CFURLRef)helperURL, YES); 
    if (status != noErr) { 
     NSLog(@"Failed to LSRegisterURL '%@': %jd", helperURL, (intmax_t)status); 
    } 


    Boolean success = SMLoginItemSetEnabled(CFSTR("com.yourcompany.helper-CFBundleIdentifier-here"), YES); 
    if (!success) { 
     NSLog(@"Failed to start Helper"); 
    } 
} 

Si noti che il Helper deve essere confezionato con l'applicazione principale nei "Contents// Library LoginItems" directory. Dovrai crearlo durante la compilazione e copiare lì l'aiutante.

+0

Questo è quello che stavo cercando da settimane! Grazie, roustern. – Todd

3

ho trovato un link a portata di mano:

http://www.delitestudio.com/2011/10/25/start-dockless-apps-at-login-with-app-sandbox-enabled/

EDIT: purtroppo questo link non funziona più. Forse qualcuno potrebbe suggerire un'alternativa migliore ...

È un buon tutorial per fare la registrazione di un elemento di login in un ambiente Sandbox se questo è utile (e avremo tutti bisogno di alla fine!). La cosa importante è che, fastidiosamente, devi copiare la tua app principale, integrata nella cartella Applicazioni e non fare quello che faccio, dimenticando sandbox l'helper-app e aggiungere una riga Application is agent (UIElement) al plista dell'helper con TRUE per il valore. NSLog e Console è il tuo vecchio amico di debug ora.

... semplicemente di capire come ottenere l'applicazione di supporto per lanciare l'applicazione principale quando sono entrambi sandbox ..... Edit: Trovato questa domanda: Cocoa: Sandbox entitlement to launch another application