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

我只是试图devise一个数据库模式升级scheme(对于使用专有数据库的应用程序系列)。 我想要的是一个简单的方法来确定应用程序已被重新安装在手机上,与以前的版本不同的Xcode生成的应用程序版本,所以我们只有通过凌乱的升级逻辑,如果有一直在变化。

我考虑简单地使用存储在应用程序设置中的__DATE____TIME__的时间戳记,但仅捕获包含常量的模块的编译date,并且可能会遗漏未强制重新编译该模块的构build。 我想可以在捆绑文件上使用date,但看起来有点片面。 (任何与该计划的经验,将不胜感激。)我查找存储在捆绑内的build立date,但迄今没有发现任何东西。

实际上,看看安装和编码版本之间是否存在不匹配,在每次启动时都太昂贵了。

当然,我试图避免一个需要在应用程序中手动修改版本标识符的scheme,因为在战斗的热度下人类往往会忘记这样的事情。

(我相当有信心,有人会很快“欺骗”这个问题,我不介意只要这个蠢事真的在解决我的问题,而不是只是碰到相同关键字的东西。)

我已经为多个公司的多个应用程序实现了这一点。 有许多可行的方法,但最简单的方法似乎是将最后一个启动的版本存储在NSUserDefaults中,并将每次启动时的版本与当前版本进行比较。

你可以取得你的软件包版本:

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

你可以保存/阅读:

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

还有一些方法可以自动增加内部版本号,所以你永远不会忘记: 像这样

我强烈推荐这种方法在任何时间戳。

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

我用一个允许用户备份和恢复他们的数据的应用程序来做到这一点。 由于他们可以恢复旧数据,检查应用程序版本是没有用的。 我需要看看存储在数据库文件中的版本。 我有我曾经发布的每个数据库版本单独的更新脚本,所以我的应用程序可以从我的应用程序的任何版本恢复数据。