¿Detecta cuándo se lanza una aplicación de iOS por primera vez?

¿Cómo puedo detectar cuándo se lanza una aplicación de iOS por primera vez?

Más o menos lo que dijeron Marc y Chris, aunque prefiero cambiar el valor cuando la aplicación se cierra en caso de que haya varias áreas de la aplicación que necesiten saber al respecto. En codigo:

// -applicationDidFinishLaunching: [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES],@"firstLaunch",nil]]; // to check it: [[NSUserDefaults standardUserDefaults] boolForKey:@"firstLaunch"]; // -applicationWillTerminate: [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstLaunch"]; 

Me di cuenta de que esta pregunta es bastante antigua, pero la utilicé para encontrar un método para detectar el primer inicio después de una “nueva instalación” (frente a la primera puesta en marcha después de una actualización / degradación) y pensé que compartiría el código aquí para futuros televidentes en caso de que sea útil.

 // Get current version ("Bundle Version") from the default Info.plist file NSString *currentVersion = (NSString*)[[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; NSArray *prevStartupVersions = [[NSUserDefaults standardUserDefaults] arrayForKey:@"prevStartupVersions"]; if (prevStartupVersions == nil) { // Starting up for first time with NO pre-existing installs (eg, fresh // install of some version) [self firstStartAfterFreshInstall]; [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:currentVersion] forKey:@"prevStartupVersions"]; } else { if (![prevStartupVersions containsObject:currentVersion]) { // Starting up for first time with this version of the app. This // means a different version of the app was alread installed once // and started. [self firstStartAfterUpgradeDowngrade]; NSMutableArray *updatedPrevStartVersions = [NSMutableArray arrayWithArray:prevStartupVersions]; [updatedPrevStartVersions addObject:currentVersion]; [[NSUserDefaults standardUserDefaults] setObject:updatedPrevStartVersions forKey:@"prevStartupVersions"]; } } // Save changes to disk [[NSUserDefaults standardUserDefaults] synchronize]; 

Normalmente utilizo el número de versión de la aplicación en lugar de un valor booleano para el primer valor de inicio en los valores predeterminados del usuario. De esta forma, puede distinguir entre el primer lanzamiento de una nueva instalación y el primer lanzamiento de una actualización. Puede ser útil en versiones futuras …

Este es un atajo realmente simple, pero descubrí que los pares de valores de clave NSUserDefault siempre son NULL la primera vez que ejecutas una aplicación.

 // Check to see if its the first time if ([[NSUserDefaults standardUserDefaults] valueForKey:@"firstTime"] == NULL) { [[NSUserDefaults standardUserDefaults] setValue:@"Not" forKey:@"firstTime"]; } 

y coloque este código en awakeFromNib del controlador de vista que aparece cuando se inicia su aplicación. No sé si alguna de las otras respuestas funciona para su problema, pero esta es la forma en que lo resolví.

Puede establecer un valor booleano en los valores predeterminados del usuario para hacer esto. Establezca la clave en falso cuando llame a registerDefaults: y luego configúrelo en true; cámbielo a verdadero después de que haya mostrado su pantalla de ayuda inicial o lo que sea que deba hacer.

Si tiene un archivo de datos persistentes que siempre se guarda después de que se cierra la aplicación, verificar si existe podría ser de otra manera.

Guárdelo como una preferencia de usuario , por ejemplo, had_first_launch, establecido en true en el inicio, solo será falso la primera vez …

Esto no funcionará correctamente si desea detectar en otros lugares del código si es su primer lanzamiento. El “applicationWillTerminate” no funcionará desde iOS 4.0 debido a la multitarea. este enlace proporciona una buena solución: http://mobiledevblog.metalcompass.com/?p=43