如何检测应用程序版本是否已更改

时间:2013-06-28 16:38:06

标签: ios timestamp

我只是试图设计一个数据库模式升级方案(对于使用专有数据库的应用程序系列)。我想要的是一种简单的方法来确定应用程序已经在手机上重新安装,使用与以前版本不同的Xcode生成的应用程序版本,这样我们只会经历凌乱的升级逻辑,如果有的话是一个变化。

我考虑过只使用存储在应用设置中的__DATE____TIME__的时间戳,但是它只捕获包含常量的模块的编译日期,并且可能会错过不强制的构建该模块重新编译。我想可以使用捆绑文件上的日期,但这看起来有点不稳定。 (有关该方案的任何经验都将受到赞赏。)我查找了存储在包中的构建日期,但到目前为止还没有找到任何内容。

实际上,在每次启动时都要查看安装版本和编码版本之间是否存在不匹配问题。

当然,我正在努力避免一种需要在应用程序中手动修改版本标识符的方案,因为人类倾向于在激烈的战斗中忘记这些事情。

(我相当有信心有人会很快“欺骗”这个问题。我不介意,只要欺骗真正解决我的问题,而不只是点击相同的关键词。)

2 个答案:

答案 0 :(得分:4)

我已为多家公司的多个应用实施此功能。有许多可行的方法,但最简单的似乎只是将您上次启动的版本存储在NSUserDefaults中,并在每次启动时将其与当前版本进行比较。

您可以获取捆绑包版本:

NSString *version = [[NSBundle mainBundle] objectForInfoDictionaryKey:(NSString *)kCFBundleVersionKey];

您可以保存/阅读它:

[[NSUserDefaults standardUserDefaults] setObject:version forKey:@"lastVersion"];

还有一些方法可以自动增加您的内部版本号,这样您就不会忘记:like this

我强烈推荐这种方法,而不是任何时间戳。

答案 1 :(得分:2)

一个好的解决方案是在数据库中存储“版本”值。从1开始,每次更新架构时都会增加1。每次打开数据库时,都要检查数据库中的值。如果它与最新版本不匹配,那么您可以执行随应用程序提供的升级脚本。

我使用允许用户备份和恢复数据的应用程序来执行此操作。由于他们可以恢复旧数据,因此检查应用版本是没用的。我需要查看存储在数据库文件中的版本。我为我发布的每个数据库版本都有单独的更新脚本,因此我的应用程序可以从我的应用程序的任何版本恢复数据。