verifier - nfc iphone se




Comment détecter le lancement de l'application pour la première fois sur un iPhone (8)

NSUserDefaults + Macro

La meilleure approche consiste à utiliser NSUserDefaults et à enregistrer une variable BOOL . Comme mentionné ci-dessus, le code suivant fera très bien:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:[NSNumber numberWithBool:true] forKey:@"~applicationHasLaunchedBefore"];
[userDefaults synchronize];

Vous pouvez également créer une macro comme ci-dessous pour vérifier facilement si c'est le premier lancement ou non

#define kApplicationHasLaunchedBefore [[NSUserDefaults standardUserDefaults] objectForKey:@"~applicationHasLaunchedBefore"]

Alors utilisez-le comme tel,

if (kApplicationHasLaunchedBefore) {
    //App has previously launched
} else {
    //App has not previously launched
}

Comment puis-je détecter le tout premier lancement de

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // if very first launch than perform actionA
  // else perform actionB
}

méthode?


C'est assez simple à faire et ne nécessite que six lignes de code.

Il sera utile d'ajouter ce code dans vos préférences de lancement d'application ou n'importe où ailleurs vous pourriez avoir besoin de tester si c'est la première fois que votre application a été exécutée.

//These next six lines of code are the only ones required! The rest is just running      code when it's the first time.
//Declare an integer and a default.
NSUserDefaults *theDefaults;
int  launchCount;
//Set up the properties for the integer and default.
theDefaults = [NSUserDefaults standardUserDefaults];
launchCount = [theDefaults integerForKey:@"hasRun"] + 1;
[theDefaults setInteger:launchCount forKey:@"hasRun"];
[theDefaults synchronize];

//Log the amount of times the application has been run
NSLog(@"This application has been run %d amount of times", launchCount);

//Test if application is the first time running
if(launchCount == 1) {
    //Run your first launch code (Bring user to info/setup screen, etc.)
    NSLog(@"This is the first time this application has been run";
}

//Test if it has been run before
if(launchCount >= 2) {
    //Run new code if they have opened the app before (Bring user to home screen etc.
    NSLog(@"This application has been run before);
}

PS N'utilisez PAS les bools dans les préférences. Tenez-vous simplement aux entiers. Ils sont par défaut à zéro lorsqu'ils ne sont pas définis.

En outre, [theDefaults synchronize]; ligne n'est pas nécessaire mais j'ai constaté que lorsqu'une application est exécutée des centaines de fois sur des centaines de périphériques, les résultats ne sont pas toujours fiables, en plus, c'est une meilleure pratique.


Fonction rapide et facile

- (BOOL) isFirstTimeOpening {
    NSUserDefaults *theDefaults = [NSUserDefaults standardUserDefaults];
    if([theDefaults integerForKey:@"hasRun"] == 0) {
        [theDefaults setInteger:1 forKey:@"hasRun"];
        [theDefaults synchronize];
        return true;
    }
    return false;
}

J'ai écrit une petite bibliothèque dans ce but précis. Cela me permet de savoir s'il s'agit du premier lancement, ou seulement pour cette version, et des versions précédentes installées par l'utilisateur. Il est disponible sur github en tant que coco sous la licence Apache 2: GBVersionTracking

Vous appelez cela simplement dans l' application:didFinishLaunching:withOptions:

[GBVersionTracking track];

Et puis, pour vérifier si c'est le premier lancement, appelez ça n'importe où:

[GBVersionTracking isFirstLaunchEver];

Et de même:

[GBVersionTracking isFirstLaunchForVersion];

[GBVersionTracking currentVersion];
[GBVersionTracking previousVersion];
[GBVersionTracking versionHistory];

Une autre idée pour Xcode 7 et Swift 2.0 est d'utiliser des extensions

extension NSUserDefaults {
    func isFirstLaunch() -> Bool {
        if !NSUserDefaults.standardUserDefaults().boolForKey("HasAtLeastLaunchedOnce") {
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "HasAtLeastLaunchedOnce")
            NSUserDefaults.standardUserDefaults().synchronize()
            return true
        }
        return false
    }
}

Vous pouvez maintenant écrire n'importe où dans votre application

if NSUserDefaults.standardUserDefaults().isFirstLaunch() {
    // do something on first launch
}

Personnellement, je préfère une extension de UIApplication comme ceci:

extension UIApplication {
    class func isFirstLaunch() -> Bool {
        if !NSUserDefaults.standardUserDefaults().boolForKey("HasAtLeastLaunchedOnce") {
            NSUserDefaults.standardUserDefaults().setBool(true, forKey: "HasAtLeastLaunchedOnce")
            NSUserDefaults.standardUserDefaults().synchronize()
            return true
        }
        return false
    }
}

Parce que l'appel de la fonction est plus descriptif:

if UIApplication.isFirstLaunch() {
    // do something on first launch
}

Vous devez enregistrer quelque chose lorsque vous lancez, puis vérifiez pour voir s'il existe. Sinon, c'est la première fois. "Quelque chose" peut être un fichier, une entrée de base de données, un réglage par défaut de l'utilisateur ....


pour swift 3.0

ajouter une extension

    extension UIApplication {
        class func isFirstLaunch() -> Bool {
            if UserDefaults.standard.bool(forKey: "hasBeenLaunchedBeforeFlag") {
                UserDefaults.standard.set(true, forKey: "hasBeenLaunchedBeforeFlag")
                UserDefaults.standard.synchronize()
                return true
            }
            return false
        }
    }

alors dans votre code

UIApplication.isFirstLaunch()

stocker une clé bool dans NSUserDefaults la première fois ce sera non, vous allez le changer en oui et le garder comme ça jusqu'à ce que l'application supprime ou réinstalle sera à nouveau la première fois.





ios