Como você abre seu aplicativo no login?

Só estou querendo saber como posso fazer o meu aplicativo abrir automaticamente no login, mas isso pode ser ativado e desativado usando uma checkbox de seleção na janela de preferências.

Há uma descrição decente do que fazer no CocoaDev .

Basicamente, você desejará usar a API em LaunchServices / LSSharedFileList.h se puder segmentar o Mac OS X 10.5 ou posterior. Antes de 10.5 não havia API limpa, portanto, você precisa manipular manualmente os itens de login ( código de exemplo no Developer Connection ).

Aqui está o código de exemplo (morto) para o Leopard que mencionei nos comentários. Encontrado através desta postagem no blog . O código que você precisa para ativar ou desativar a boot no login é em Controller.m.

Aqui está um código que eu uso, é baseado na fonte do Growl.

 + (BOOL) willStartAtLogin:(NSURL *)itemURL { Boolean foundIt=false; LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); if (loginItems) { UInt32 seed = 0U; NSArray *currentLoginItems = [NSMakeCollectable(LSSharedFileListCopySnapshot(loginItems, &seed)) autorelease]; for (id itemObject in currentLoginItems) { LSSharedFileListItemRef item = (LSSharedFileListItemRef)itemObject; UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes; CFURLRef URL = NULL; OSStatus err = LSSharedFileListItemResolve(item, resolutionFlags, &URL, /*outRef*/ NULL); if (err == noErr) { foundIt = CFEqual(URL, itemURL); CFRelease(URL); if (foundIt) break; } } CFRelease(loginItems); } return (BOOL)foundIt; } + (void) setStartAtLogin:(NSURL *)itemURL enabled:(BOOL)enabled { OSStatus status; LSSharedFileListItemRef existingItem = NULL; LSSharedFileListRef loginItems = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); if (loginItems) { UInt32 seed = 0U; NSArray *currentLoginItems = [NSMakeCollectable(LSSharedFileListCopySnapshot(loginItems, &seed)) autorelease]; for (id itemObject in currentLoginItems) { LSSharedFileListItemRef item = (LSSharedFileListItemRef)itemObject; UInt32 resolutionFlags = kLSSharedFileListNoUserInteraction | kLSSharedFileListDoNotMountVolumes; CFURLRef URL = NULL; OSStatus err = LSSharedFileListItemResolve(item, resolutionFlags, &URL, /*outRef*/ NULL); if (err == noErr) { Boolean foundIt = CFEqual(URL, itemURL); CFRelease(URL); if (foundIt) { existingItem = item; break; } } } if (enabled && (existingItem == NULL)) { LSSharedFileListInsertItemURL(loginItems, kLSSharedFileListItemBeforeFirst, NULL, NULL, (CFURLRef)itemURL, NULL, NULL); } else if (!enabled && (existingItem != NULL)) LSSharedFileListItemRemove(loginItems, existingItem); CFRelease(loginItems); } } 

Se você deseja uma checkbox de seleção fácil de implementar, crie um @property BOOL startAtLogin; em uma das suas aulas e implementá-lo da seguinte maneira. Basta ligar o valor da checkbox de seleção à propriedade e tudo deve funcionar perfeitamente.

 - (NSURL *)appURL { return [NSURL fileURLWithPath:[[NSBundle mainBundle] bundlePath]]; } - (BOOL)startAtLogin { return [LoginItem willStartAtLogin:[self appURL]]; } - (void)setStartAtLogin:(BOOL)enabled { [self willChangeValueForKey:@"startAtLogin"]; [LoginItem setStartAtLogin:[self appURL] enabled:enabled]; [self didChangeValueForKey:@"startAtLogin"]; } 

Chame o método colado abaixo com um URL de arquivo apontando para seu aplicativo para adicioná-lo aos itens de login do usuário atual.

Para desabilitar novamente, você precisará obter o mesmo loginListRef, convertê-lo em um array e iterá-lo até encontrar o item com o URL que deseja desabilitar. Finalmente, chame LSSharedFileListItemRemove com os argumentos apropriados.

Boa sorte 🙂

 - (void)enableLoginItemWithURL:(NSURL *)itemURL { LSSharedFileListRef loginListRef = LSSharedFileListCreate(NULL, kLSSharedFileListSessionLoginItems, NULL); if (loginListRef) { // Insert the item at the bottom of Login Items list. LSSharedFileListItemRef loginItemRef = LSSharedFileListInsertItemURL(loginListRef, kLSSharedFileListItemLast, NULL, NULL, (CFURLRef)itemURL, NULL, NULL); if (loginItemRef) { CFRelease(loginItemRef); } CFRelease(loginListRef); } } 

Veja também SO pergunta: Registre-se como item de login com cacau