如何检查应用程序是否已安装或正在安装

什么是检查应用程序是否已经安装或首次安装的最佳方法。

捆绑版本并将其保存为用户默认值。

编辑:

这里有三件事要注意。

  1. 软件包版本 :这是您要发布的应用程序的版本。

  2. 旧版本 :这将表明您的应用程序的以前版本。 我们将这个存储在用户的默认值,以便我们知道什么是更新我们的应用程序的旧版本。 如果你的包版本是1.0,这显然是零。

  3. 目标版本 :表示用户的目标版本。 我们稍后会讨论这个。

所以,条件如

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"];