如何应用多个应用更新?

时间:2012-11-18 01:17:02

标签: iphone ios cocoa core-data migration

我已经发布了我的应用版本1.0。 1.1版可能包含某种迁移代码。为了论证,让我们说它会更新核心数据属性 - 所有姓氏都将转换为大写。我将在1.1版首次启动时执行此代码。

我是否需要为所有后续版本保留此代码?如果用户跳过1.0并且仅在1.2发布时更新,则会自动首先应用1.1吗?或者我是否需要继续检查是否要永久更新所有版本中的姓氏?

2 个答案:

答案 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