我已经发布了我的应用版本1.0。 1.1版可能包含某种迁移代码。为了论证,让我们说它会更新核心数据属性 - 所有姓氏都将转换为大写。我将在1.1版首次启动时执行此代码。
我是否需要为所有后续版本保留此代码?如果用户跳过1.0并且仅在1.2发布时更新,则会自动首先应用1.1吗?或者我是否需要继续检查是否要永久更新所有版本中的姓氏?
答案 0 :(得分:2)
您不发布更新,而是发布新版本。如果有人从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 :(得分:2)
您应该保留所有版本的迁移代码> 1.0