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