-4

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

我考虑过简单地使用时间戳__DATE____TIME__存储在应用程序设置中,但这仅捕获包含常量的模块的编译日期,并且可能会错过未强制该模块重新编译的构建。而且我想可以使用捆绑文件上的日期,但这似乎有点不稳定。(任何与该方案有关的经验将不胜感激。)我寻找存储在捆绑包中的构建日期,但到目前为止还没有找到任何东西。

实际上,查看安装版本和编码版本之间是否存在不匹配的成本太高,无法在每次启动时进行。

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

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

4

2 回答 2

4

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

您可以获取捆绑版本:

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

您可以保存/阅读它:

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

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

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

于 2013-06-28T18:29:01.393 回答
2

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

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

于 2013-06-28T23:58:11.463 回答