2011-04-08 11 views
6

Estoy desarrollando una aplicación que deseo iniciar automáticamente cuando el usuario inicie sesión. Hay varias respuestas sobre cómo hacer esto, en particular, estoy usando el código de this GitHub repository, y funciona bien.Mac OS X: abra la aplicación al iniciar sesión, sin mostrar la ventana principal

Lo que quiero ahora, y no pude encontrar cómo hacerlo, es iniciar la aplicación pero sin mostrar la ventana principal. Solo cuando la aplicación se inicia al iniciar sesión, si la aplicación está cerrada y el usuario la abre con un clic en el Dock (o lo que sea), quiero que muestre la ventana.

¿Es posible? ¿Alguna idea sobre cómo hacer esto?

En la preferencia del sistema Cuentas, donde configura las aplicaciones que se inician al iniciar sesión, hay una verificación "ocultar" que hace lo que quiero, pero quiero hacerlo mediante programación.

Respuesta

10

Bueno, he encontrado cómo hacerlo ... Esto Open Radar bug report helped, estaba usando la propiedad incorrecta.

Aquí está el código:

- (void)enableLoginItemWithLoginItemsReference:(LSSharedFileListRef)theLoginItemsRefs ForPath:(NSString *)appPath { 
// We call LSSharedFileListInsertItemURL to insert the item at the bottom of Login Items list. 
CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:appPath]; 

CFMutableDictionaryRef inPropertiesToSet = CFDictionaryCreateMutable(NULL, 1, NULL, NULL); 
CFDictionaryAddValue(inPropertiesToSet, kLSSharedFileListLoginItemHidden, kCFBooleanTrue); 

LSSharedFileListItemRef item = LSSharedFileListInsertItemURL(theLoginItemsRefs, kLSSharedFileListItemLast, NULL, NULL, url, inPropertiesToSet, NULL);  
if (item) { 
    CFRelease(item); 
} 
} 

La solución fue crear un diccionario con la clave y el valor kLSSharedFileListLoginItemHidden verdadera, y pasarlo a la función LSSharedFileListInsertItemURL.

+0

Hola Marcos, estoy teniendo el mismo problema en mi aplicación Mac OS X. Probé tu código, se establece como oculto (Tick habilitado) en User & Groups-> LoginItems para mi aplicación después de instalar mi aplicación en Mac OS X Lion. Pero cuando reinicio mi máquina, abre la ventana de mi aplicación, que quería ocultar UIWindow en lugar de mostrar automáticamente. ¿Podría por favor avisarme cómo puedo solucionarlo exactamente? – Getsy

+0

Gracias por esta respuesta, pero ¿cómo sé si la aplicación ha sido iniciada automáticamente o por el usuario independientemente de que se muestre o no la ventana principal? Gracias !! –

+0

@ marcos-crispino ¿Puedes publicar el código donde * verificas * para ver si la aplicación se abrió al iniciar sesión o si se abrió manualmente? – cksubs

Cuestiones relacionadas