web-dev-qa-db-fra.com

Détecter quand une application iOS est lancée pour la première fois?

Comment puis-je détecter quand une application iOS est lancée pour la première fois?

64
Steph Thirion

À peu près ce que Marc et Chris ont dit, bien que je préfère modifier la valeur lorsque l'application quitte au cas où plusieurs domaines de l'application doivent en savoir plus. Dans du code:

objectif-c

// -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"];

Swift 5.

// -applicationDidFinishLaunching:
UserDefaults.standard.register(defaults: ["firstLaunch":true])
// to check it:
UserDefaults.standard.bool(forKey: "firstLaunch")
// -applicationWillTerminate:
UserDefaults.standard.set(false, forKey: "firstLaunch")
82
Noah Witherspoon

Je réalise que cette question est assez ancienne, mais je l'ai utilisée pour venir ne méthode de détection du premier démarrage après une "installation nouvelle" (vs première start-up après une mise à niveau/déclassement) et la pensée "D Partagez le code ici pour les futurs spectateurs au cas où il sera utile.

// 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 (e.g., 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];
59
Clint Harris

J'utilise normalement le numéro de version de l'application au lieu d'un booléen pour la valeur FirstLaunch dans les paramètres par défaut des utilisateurs. De cette façon, vous pouvez distinguer le premier lancement d'une nouvelle installation et le premier lancement d'une mise à niveau. Peut être utile dans les versions futures ...

29
Daniel

Ceci est un raccourci vraiment simple, mais j'ai trouvé que Nsuserdefault Key La valeur de la valeur est toujours null la première fois que vous exécutez une application afin

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

et placez ce code dans l'éveakfromnib du contrôleur d'affichage qui apparaît lorsque votre application est lancée. Je ne sais pas si l'une des autres réponses fonctionne pour votre problème, mais c'est ainsi que je l'ai résolu.

4
NSCoder

Vous pouvez définir une valeur booléenne dans les défauts d'utilisateur pour le faire. Définissez la clé sur false lorsque vous appelez registerDefaults:, puis la définir sur TRUE le change comme true après avoir montré votre écran d'aide initiale ou tout ce que vous devez faire.

Si vous avez un fichier de données persistant qui est toujours enregistré après la fermeture de l'application, vérifiez s'il existe s'il existe un autre moyen.

2
Marc Charbonneau

Enregistrez-le sous forme de préférence de l'utilisateur , par exemple, had_first_launch, défini sur true sur le démarrage, il ne sera faux que faux dans la première fois ...

2
Chris Kimpton

Cela ne fonctionnera pas correctement si vous souhaitez détecter lors d'autres endroits du code si son premier lancement. L'application "ApplicationWillTerminate" ne fonctionnera pas de iOS 4.0 en raison de la multitâche. Ce lien fournit une bonne solution: http://mobiledevblog.metalcomPass.com/?p=4

2
MCO