ultima sale descargar cuando compatibilidad actualizacion ios objective-c swift uiapplication

sale - Comprueba si mi aplicación IOS está actualizada



ios 12 iphone 6s (5)

Aquí hay un código simple para saber si la versión actual es diferente (este código también funciona en el simulador).

-(BOOL) needsUpdate { NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary]; NSString* appID = infoDictionary[@"CFBundleIdentifier"]; NSURL* url = [NSURL URLWithString:[NSString stringWithFormat:@"http://itunes.apple.com/lookup?bundleId=%@", appID]]; NSData* data = [NSData dataWithContentsOfURL:url]; NSDictionary* lookup = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; if ([lookup[@"resultCount"] integerValue] == 1) { NSString* appStoreVersion = lookup[@"results"][0][@"version"]; NSString* currentVersion = infoDictionary[@"CFBundleShortVersionString"]; if (![appStoreVersion isEqualToString:currentVersion]) { NSLog(@"Need to update [%@ != %@]", appStoreVersion, currentVersion); return YES; } } return NO; }

Nota: asegúrese de que cuando ingrese la nueva versión en iTunes, esto coincida con la versión de la aplicación que está lanzando. Si no, el código anterior siempre devolverá SÍ, independientemente de si el usuario actualiza.

Necesito verificar cuándo se inicia mi aplicación si se estaba actualizando, porque debo hacer una vista que solo aparezca cuando la aplicación se instale por primera vez para que aparezca nuevamente después de actualizarla.


Swift 3.x

Simplemente inicie AppVersionUpdateNotifier en el inicio de la aplicación y cumpla con el protocolo AppUpdateNotifier, disfrute.

class AppVersionUpdateNotifier { static let KEY_APP_VERSION = "key_app_version" static let shared = 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 } }


Versión swift con una mejora importante sobre la respuesta aceptada:

  • el uso de infoDictionary lugar de objectForInfoDictionaryKey garantiza que el resultado es independiente del idioma del dispositivo; de lo contrario, puede terminar en algunos casos raros creyendo que hay una actualización cuando en realidad es solo un cambio de idioma del dispositivo
  • usando una clave de UserDefaults idéntica a la información principal del paquete infoDictionary para claridad en lo que se almacena exactamente
  • factoring ajuste de código de versión actual
  • Sintaxis de Swift 3

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


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 instalación nueva. Si se cambia, es una actualización.


Puede guardar 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 swift-2 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() }

La versión swift-3 ve así:

let defaults = UserDefaults.standard let currentAppVersion = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String let previousVersion = defaults.string(forKey: "appVersion") if previousVersion == nil { // first launch defaults.set(currentAppVersion, forKey: "appVersion") defaults.synchronize() } else if previousVersion == currentAppVersion { // same version } else { // other version defaults.set(currentAppVersion, forKey: "appVersion") defaults.synchronize() }