How to detect an iOS App installed or upgraded? [duplicate] How to detect an iOS App installed or upgraded? [duplicate] ios ios

How to detect an iOS App installed or upgraded? [duplicate]


You can differentiate between the first start after installing the App, the first start after an update and other starts quite easily via saving the latest known version to standardUserDefaults. But as far as I know it is not possible do detect a re-install of the App as all App-related data are also removed when the App is deleted from the device.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    NSString* currentVersion = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"];    NSString* versionOfLastRun = [[NSUserDefaults standardUserDefaults] objectForKey:@"VersionOfLastRun"];    if (versionOfLastRun == nil) {        // First start after installing the app    } else if (![versionOfLastRun isEqual:currentVersion]) {        // App was updated since last run    } else {        // nothing changed     }    [[NSUserDefaults standardUserDefaults] setObject:currentVersion forKey:@"VersionOfLastRun"];    [[NSUserDefaults standardUserDefaults] synchronize];}


Checkout Swift 3.0 version of code.
Note: Use CFBundleShortVersionString, for checking actual App version checking.

func checkAppUpgrade() {    let currentVersion = Bundle.main.object(forInfoDictionaryKey:     "CFBundleShortVersionString") as? String    let versionOfLastRun = UserDefaults.standard.object(forKey: "VersionOfLastRun") as? String    if versionOfLastRun == nil {        // First start after installing the app    } else if versionOfLastRun != currentVersion {        // App was updated since last run    } else {        // nothing changed    }    UserDefaults.standard.set(currentVersion, forKey: "VersionOfLastRun")    UserDefaults.standard.synchronize()}


For Swift 3

 let currentVersion : String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! Stringlet versionOfLastRun: String? = UserDefaults.standard.object(forKey: "VersionOfLastRun") as? Stringif versionOfLastRun == nil {     // First start after installing the app} else if  !(versionOfLastRun?.isEqual(currentVersion))! {      // App is updated}UserDefaults.standard.set(currentVersion, forKey: "VersionOfLastRun")UserDefaults.standard.synchronize()