我已经发布了我的应用程序的 1.0 版。1.1 版可能会包含某种迁移代码。为了论证的缘故,假设它将更新核心数据属性 - 所有姓氏都将转换为大写。我将在版本 1.1 中首次启动时执行此代码。
我是否需要为所有后续版本保留此代码?如果用户跳过 1.0 并且仅在 1.2 发布时更新,是否会自动先应用 1.1?还是我需要不断检查是否永远更新所有版本中的姓氏?
你不发布更新,你发布新版本。如果有人从 1.0 更新到 1.2 并跳过 1.1,那么这正是正在发生的事情。1.1 永远不会被安装或执行。
编辑:
这是一个非常简单的更新管理方法的建议。可能不是最优雅的,但它确实有效。
NSString *lastVersion = [[NSUserDefaults standardUserDefaults]
stringForKey:@"LastVersion"];
NSString *currentVersion = [[NSBundle mainBundle]
objectForInfoDictionaryKey:@"CFBundleShortVersionString"];
if ([self version:lastVersion isSmallerThanVersion:@"1.1"]) {
// update from 1.0 to 1.1 here.
}
if ([self version:lastVersion isSmallerThanVersion:@"1.2"]) {
// update from 1.1 to 1.2 here.
}
if ([self version:lastVersion isSmallerThanVersion:@"1.3"]) {
// update from 1.2 to 1.3 here.
}
[[NSUserDefaults standardUserDefaults]
setObject:currentVersion forKey:@"LastVersion"];
在此示例中,您有 4 个版本(1.0、1.1、1.2、1.3),而 1.3 是最新版本。
您在每次启动应用程序时运行它。由于更新应用程序也会终止它,您可以假设这将在可能的更新后运行。
基本上,您从用户默认值加载用户在此设备上使用的最后一个版本。如果应用程序第一次启动,则不会有已知的先前版本,不会执行任何更新例程,并且当前版本 (1.3) 会保存为最后使用的版本。
如果应用程序与以前的版本 (1.2) 一起使用,lastVersion
则将是1.2
并且仅执行最后一个if
块。
如果应用程序在 1.1 版本中使用,但跳过了 1.2,现在更新到 1.3,lastVersion
则将是 1.1,最后两个if
块按顺序执行。因此,首先您将数据从 1.1 更新到 1.2,然后从 1.2 更新到 1.3。
您应该保留所有版本 > 1.0 的迁移代码