【问题标题】:How are multiple app updates applied?如何应用多个应用更新?
【发布时间】:2012-11-18 01:17:01
【问题描述】:

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

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

【问题讨论】:

    标签: iphone ios cocoa core-data migration


    【解决方案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。

    【讨论】:

    • 谢谢 - 所以 10 年后的 500 版本必须假设用户可能从任何版本 1..499 升级,并处理在那段时间存在的所有已知核心数据状态?
    • 差不多,是的。但这并不是那么困难。您最多只需要为每个新版本实施一个更新例程。见我编辑。
    【解决方案2】:

    您应该保留所有版本 > 1.0 的迁移代码

    【讨论】:

      猜你喜欢
      • 2021-03-17
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-11-13
      相关资源
      最近更新 更多