iCloud 和轻量级迁移

Posted

技术标签:

【中文标题】iCloud 和轻量级迁移【英文标题】:iCloud and lightweight migration 【发布时间】:2015-05-12 13:32:21 【问题描述】:

我有一个已发布的应用程序将核心数据与 iCloud 同步。 我需要更新模型添加两个属性,然后填充这些新字段。

我在本地测试过轻量级迁移,效果很好,可以看到旧数据迁移到新模型方案中。

当我激活 iCloud 时,保存在 ubiquity 容器中的旧数据不会与新模型架构同步。 预期的行为是什么? 我应该能够在新旧模型版本上同步数据吗? 我怎样才能实现它并测试这种情况?

我读过:

CoreData versioning 和

Understanding Core Data iCloud Store Migration When Testing an ios App Update

但实际上,我很困惑。

【问题讨论】:

我发现升级 iCloud 商店并不可靠,尤其是在使用 WAL 模式时。我现在采取的方法是在应用启动时检查商店是否需要升级,如果需要,我首先将商店迁移到本地商店,然后执行升级,然后将其迁移回 iCloud。这似乎现在可以可靠地工作,但确实需要与用户进行一些交互,因为事情可能需要一段时间,并且您需要确保 iCloud 存储被完全删除,然后在所有设备上被替换...... 我不希望在这次迁移中涉及用户交互,但像 ***.com/questions/27792667/… 这样的情况让我感到害怕 没错,请参阅上面我在 iCloud 商店上重新执行迁移的观点...如果它不是 100% 可靠,则不是一个选项。我还提供了一个备份功能,可以将现有存储(iCloud 或本地)迁移到另一个本地文件。然后,用户可以选择将备份文件复制到 iCloud 以提供额外的备份副本和/或从其中一个备份中恢复数据库。您可以在我的其他一些帖子中找到更多信息,其中包含指向示例应用程序和其中一些代码的链接。 【参考方案1】:

应该发生的是,iCloud 数据仅在使用相同版本数据模型的设备之间同步。如果您在一台设备上升级应用程序但不在另一台设备上升级,则在第二台设备也更新到新型号版本之前,它们不会同步更改。

如果这不是您所看到的,请添加有关您所看到问题的更多详细信息。

【讨论】:

谢谢,现在很清楚了。出于测试目的,我是否应该在设备上安装具有旧型号版本的应用程序,然后在该设备上安装具有较新型号版本的新应用程序?如果我没记错的话,在已发布的应用上构建新应用应该行不通 如果您的意思是在手机上已经有应用商店版本的情况下从 Xcode 安装应用程序,那应该可以。这是测试应用程序新版本升级过程的一种非常常见的方法。 我的意思是,但是当我在商店版本(旧型号)上从 Xcode(新型号)安装应用程序时迁移它不起作用,请参阅问题中的第二个链接,谢谢 我遇到了您描述的行为,从 Xcode 安装包含旧模型版本的应用程序版本,然后安装包含新模型版本的应用程序,但在我描述的情况下没有在上一条评论中

以上是关于iCloud 和轻量级迁移的主要内容,如果未能解决你的问题,请参考以下文章

如果我使用 Core Data 手动迁移,我以后可以集成 iCloud 同步吗?

CoreData 版本控制和阻塞轻量级迁移

核心数据和累积的轻量级迁移

未发布的 xcdatamodel 版本和轻量级迁移

Core Data轻量级迁移有多少个迁移步骤?

集成 RestKit 和 MagicalRecord 时出现 CoreData 轻量级迁移错误