tinder tarde solucion sesion puedo problema nuevo mas intentalo iniciar habido error como cocoa login

cocoa - tarde - ¿Cómo se abre la aplicación al iniciar sesión?



tinder error 84503 (4)

Esta pregunta ya tiene una respuesta aquí:

Me pregunto cómo puedo hacer que mi aplicación se abra automáticamente al iniciar sesión, pero puedo activar y desactivar esta opción usando una casilla de verificación en la ventana de preferencias.


Aquí hay un código que uso, está basado en la fuente 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); } }

Si desea una casilla de verificación fácil de implementar, @property BOOL startAtLogin; un @property BOOL startAtLogin; en una de tus clases e implementarlo de la siguiente manera. Simplemente enlace el valor de la casilla de verificación a la propiedad y todo debería funcionar a la perfección.

- (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"]; }


Hay una descripción decente de qué hacer en CocoaDev .

Básicamente, querrá usar la API en LaunchServices / LSSharedFileList.h si puede apuntar a Mac OS X 10.5 o posterior. Antes de 10.5 no había una API limpia, por lo que debe manipular manualmente los elementos de inicio de sesión ( código de muestra en Developer Connectiong ).

Aquí está el código de muestra (muerto) para Leopard que mencioné en los comentarios. Encontrado a través de esta publicación de blog . El código que necesita para habilitar o deshabilitar el inicio al iniciar sesión se encuentra en Controller.m.


Llame al método pegado a continuación con un URL de archivo apuntando a su aplicación para agregarlo a los elementos de inicio de sesión del usuario actual.

Para volver a deshabilitarlo, deberá obtener ese mismo loginListRef, convertirlo en una matriz e iterar hasta encontrar el elemento con la url que desea deshabilitar. Finalmente, llame a LSSharedFileListItemRemove con los argumentos apropiados.

Buena suerte :)

- (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); } }