Comprobar si se actualiza mi aplicación IOS

Necesito verificar cuándo se inicia mi aplicación si se está actualizando, porque necesito hacer una vista que solo aparece cuando la aplicación está instalada en primer lugar para volver a aparecer después de ser actualizada.

Podría save un valor (por ejemplo, el número de versión de la aplicación actual) en NSUserDefaults y verificarlo cada vez que el usuario inicie la aplicación.

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // ... NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSString *currentAppVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; NSString *previousVersion = [defaults objectForKey:@"appVersion"]; if (!previousVersion) { // first launch // ... [defaults setObject:currentAppVersion forKey:@"appVersion"]; [defaults synchronize]; } else if ([previousVersion isEqualToString:currentAppVersion]) { // same version } else { // other version // ... [defaults setObject:currentAppVersion forKey:@"appVersion"]; [defaults synchronize]; } return YES; } 

La versión rápida se ve así:

 let defaults = NSUserDefaults.standardUserDefaults() let currentAppVersion = NSBundle.mainBundle().objectForInfoDictionaryKey("CFBundleShortVersionString") as! String let previousVersion = defaults.stringForKey("appVersion") if previousVersion == nil { // first launch defaults.setObject(currentAppVersion, forKey: "appVersion") defaults.synchronize() } else if previousVersion == currentAppVersion { // same version } else { // other version defaults.setObject(currentAppVersion, forKey: "appVersion") defaults.synchronize() } 

puede almacenar un número de versión de la aplicación en NSUserDefaults y verificarlo cada vez que se inicie su aplicación. Si el número no está disponible, es una installation nueva. Si se cambia, es una actualización.

Versión rápida con una mejora importante sobre la respuesta aceptada:

  • usar infoDictionary lugar de objectForInfoDictionaryKey garantiza que el resultado es independiente del lenguaje del dispositivo; de lo contrario, puede terminar en casos excepcionales si cree que hay una actualización cuando en realidad es solo un cambio en el idioma del dispositivo
  • utilizando una key UserDefaults idéntica a la principal Bundle infoDictionary para mayor claridad sobre lo que está exactamente almacenado
  • factorización de configuration actualCódigo de versión
  • Swift 3 syntax

Código:

  let standardUserDefaults = UserDefaults.standard let shortVersionKey = "CFBundleShortVersionString" let currentVersion = Bundle.main.infoDictionary![shortVersionKey] as! String let previousVersion = standardUserDefaults.object(forKey: shortVersionKey) as? String if previousVersion == currentVersion { // same version } else { // replace with `if let previousVersion = previousVersion {` if you need the exact value if previousVersion != nil { // new version } else { // first launch } standardUserDefaults.set(currentVersion, forKey: shortVersionKey) standardUserDefaults.synchronize() } 

Swift 3.x

Simplemente inicialice AppVersionUpdateNotifier en el inicio de la aplicación y ajuste el protocolo AppUpdateNotifier, disfrute.

 class AppVersionUpdateNotifier { static let KEY_APP_VERSION = "key_app_version" static let shanetworking = AppVersionUpdateNotifier() private let userDefault:UserDefaults private var delegate:AppUpdateNotifier? private init() { self.userDefault = UserDefaults.standard } func initNotifier(_ delegate:AppUpdateNotifier) { self.delegate = delegate checkVersionAndnotify() } private func checkVersionAndnotify() { let versionOfLastRun = userDefault.object(forKey: AppVersionUpdateNotifier.KEY_APP_VERSION) as? Int let currentVersion = Int(Bundle.main.buildVersion)! if versionOfLastRun == nil { // First start after installing the app } else if versionOfLastRun != currentVersion { // App was updated since last run delegate?.onVersionUpdate(newVersion: currentVersion, oldVersion: versionOfLastRun!) } else { // nothing changed } userDefault.set(currentVersion, forKey: AppVersionUpdateNotifier.KEY_APP_VERSION) } } protocol AppUpdateNotifier { func onFirstLaunch() func onVersionUpdate(newVersion:Int, oldVersion:Int) } extension Bundle { var shortVersion: String { return infoDictionary!["CFBundleShortVersionString"] as! String } var buildVersion: String { return infoDictionary!["CFBundleVersion"] as! String } } //************************* //Use: Example //************************* extention AppDelagate: AppUpdateNotifier { func onVersionUpdate(newVersion: Int, oldVersion: Int) { // do something } func onFirstLaunch() { //do something } }