sale novedades lanzamiento fecha descargar cuando apple iphone ios

novedades - Cómo detectar el primer lanzamiento de la aplicación en un iPhone



ios 12 novedades (12)

¿Cómo puedo detectar el primer lanzamiento de

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

¿método?


NSUserDefaults + Macro

El mejor enfoque es usar NSUserDefaults y guardar una variable BOOL . Como se mencionó anteriormente, el siguiente código funcionará bien:

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

También puede crear una macro de la siguiente manera para verificar fácilmente si es el primer lanzamiento o no

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

Entonces úsalo como tal,

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


Debe guardar algo cuando lo lance y luego verificar para ver si existe. Si no, es la primera vez. "Algo" puede ser un archivo, una entrada de base de datos, una configuración en los valores predeterminados del usuario ...


En Swift 3, 4 prueba esto:

func isAppAlreadyLaunchedOnce()->Bool{ let defaults = UserDefaults.standard if let isAppAlreadyLaunchedOnce = defaults.string(forKey: "isAppAlreadyLaunchedOnce"){ print("App already launched : /(isAppAlreadyLaunchedOnce)") return true }else{ defaults.set(true, forKey: "isAppAlreadyLaunchedOnce") print("App launched first time") return false } }

En Swift 2 prueba esto,

func isAppAlreadyLaunchedOnce()->Bool{ let defaults = NSUserDefaults.standardUserDefaults() if let isAppAlreadyLaunchedOnce = defaults.stringForKey("isAppAlreadyLaunchedOnce"){ print("App already launched : /(isAppAlreadyLaunchedOnce)") return true }else{ defaults.setBool(true, forKey: "isAppAlreadyLaunchedOnce") print("App launched first time") return false } }

ACTUALIZACIÓN: - Para OBJ-C uso esto,

+ (BOOL)isAppAlreadyLaunchedOnce { if ([[NSUserDefaults standardUserDefaults] boolForKey:@"isAppAlreadyLaunchedOnce"]) { return true; } else { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isAppAlreadyLaunchedOnce"]; [[NSUserDefaults standardUserDefaults] synchronize]; return false; } }

Ref. Para OBJ-C: https://.com/a/9964400/3411787


Es bastante simple hacer esto y solo requiere seis líneas de código.

Será útil agregar este código en las preferencias de inicio de la aplicación o en cualquier otro lugar que pueda necesitar para probar si es la primera vez que se ejecuta la aplicación o no.

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

PD . NO use bools en las preferencias Solo se adhiere a los enteros. Se predeterminan a cero cuando no están definidos.

Además, [theDefaults synchronize]; no es necesario, pero he descubierto que cuando una aplicación se ejecuta cientos de veces en cientos de dispositivos, los resultados no siempre son confiables, además, es una práctica mejor.


Escribí una pequeña biblioteca para este propósito. Me permite saber si este es el primer lanzamiento de la historia, o solo para esta versión, y cualquier versión anterior que el usuario haya instalado. Está disponible en github como un cocoapod bajo la licencia Apache 2: GBVersionTracking

Simplemente llama a esto en la application:didFinishLaunching:withOptions:

[GBVersionTracking track];

Y luego, para verificar si este es el primer lanzamiento, simplemente llámalo a cualquier lugar:

[GBVersionTracking isFirstLaunchEver];

Y del mismo modo:

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


Función rápida y fácil

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


Otra idea para Xcode 7 y Swift 2.0 es usar extensiones

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

Ahora puedes escribir en cualquier lugar de tu aplicación

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

Personalmente prefiero una extensión de UIApplication como esta:

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

Porque la llamada a la función es más descriptiva:

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


Para Swift 2.0 en Xcode 7. En el archivo AppDelegate.swift:

import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { return true } func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { didFinishLaunchingOnce() return true } func didFinishLaunchingOnce() -> Bool { let defaults = NSUserDefaults.standardUserDefaults() if let hasBeenLauncherBefore = defaults.stringForKey("hasAppBeenLaunchedBefore") { //print(" N-th time app launched ") return true } else { //print(" First time app launched ") defaults.setBool(true, forKey: "hasAppBeenLaunchedBefore") return false } } }


Puede implementarlo con el método estático a continuación:

+ (BOOL)isFirstTime{ static BOOL flag=NO; static BOOL result; if(!flag){ if ([[NSUserDefaults standardUserDefaults] boolForKey:@"hasLaunchedOnce"]){ result=NO; }else{ [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"hasLaunchedOnce"]; [[NSUserDefaults standardUserDefaults] synchronize]; result=YES; } flag=YES; } return result; }


almacene una clave bool en NSUserDefaults la primera vez que lo hará, la cambiará a sí y la mantendrá así hasta que la aplicación la elimine o la vuelva a instalar la primera vez.


para swift 3.0

agregar extensión

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 } }

luego en tu código

UIApplication.isFirstLaunch()


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"]) { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"]; [[NSUserDefaults standardUserDefaults] synchronize]; } return YES; }