如何检查应用程序是否已安装或正在安装
什么是检查应用程序是否已经安装或首次安装的最佳方法。
捆绑版本并将其保存为用户默认值。
编辑:
这里有三件事要注意。
-
软件包版本 :这是您要发布的应用程序的版本。
-
旧版本 :这将表明您的应用程序的以前版本。 我们将这个存储在用户的默认值,以便我们知道什么是更新我们的应用程序的旧版本。 如果你的包版本是1.0,这显然是零。
-
目标版本 :表示用户的目标版本。 我们稍后会讨论这个。
所以,条件如
bundleVersion > oldVersion
或
if(isVersionBetter:myBundleVersion thanVersion:oldVersion)
要么意味着我们要创build我们的数据库(在这种情况下,捆绑版本将是1.0,旧版本将为零)或更新我们的数据库(在这种情况下捆绑版本将大于1.0,因此旧版本不会是零) 。
因此,我们可以看到,创build数据库意味着用户首次安装应用程序。 更新数据库意味着用户已经安装了应用程序并正在更新数据库。
但是,当你想更新你的应用程序,并希望保持数据库的状态时,也可能会出现这种情况。 也就是说,只有UI更新。
在这里,目标版本进入图片。
如上所述,目标版本是用户所针对的版本。 如果用户的目标是捆绑版本,所有的都和上面的一样。 但是,如果用户的目标是捆绑版本以外的其他版本,我们将跳过数据库更新部分,从而只允许更改UI。
所以,最后的声明会是这样的:
if( bundleVersion == targetVersion AND bundleVersion > oldVersion ) { // Either create or update the database. }else { // Do nothing. Skips database updating and allows UI update. }
因此,你的数据库函数看起来像这样
-(void) initWithTargetVersion:(NSString *) targetVersion { NSString *oldDatabaseVersion = [[NSUserDefaults standardUserDefaults] stringForKey:@"OldDatabaseVersion"]; NSString *bundleDatabaseVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"]; if([bundleDatabaseVersion isEqualToString:targetVersion] && [self isVersionBetter:oldDatabaseVersion new:targetVersion]) { // Create or update the database. }else { // Do nothing. } }
用户可以按如下方式传递目标版本:
[[DatabaseManager sharedManager] initWithTargetVersion:@"1.0"];