如何使用已在 App Store 中的应用测试核心数据迁移?

Posted

技术标签:

【中文标题】如何使用已在 App Store 中的应用测试核心数据迁移?【英文标题】:How to Test Core Data Migration With an App Already in the App Store? 【发布时间】:2011-09-05 22:44:37 【问题描述】:

我们有一个应用程序目前在应用程序商店中。它使用 Core Data 作为其持久性机制。我们准备好了一个新版本,它有一些架构更改。具体来说,我们添加了 1 个新实体并向现有实体添加了一个新属性。根据我的理解和阅读,这是可能发生的最简单的迁移之一。没有字段删除,也没有要更改的关系。数据模型由 5 个完全没有关系的实体组成。

我们已经对数据模型进行了版本化,并创建了一个 .xcmappingmodel 来处理迁移。我们通过在 PersistentStoreCoordinator 的创建中添加以下选项来处理迁移:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                     [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, nil];

目前,我们已经使用以下流程与团队的几位成员成功测试:

    从设备和 iTunes 中删除应用的所有测试版本 前往应用商店下载当前版本 对应用进行一些更改以证明迁移成功 将新的二进制文件(使用相同的捆绑标识符签名)拖到 iTunes 中并同步 在设备上加载新版本,验证之前版本中所做的更改是否仍然存在,并且应用不会崩溃

我的问题是: 有没有更简单/更好的方法来测试这个?我们担心的是,一旦应用程序推出,就没有其他方法可以确保我们的用户获得最佳体验。

【问题讨论】:

【参考方案1】:

我一直在为我的应用程序使用Core Data 并升级了大约 7 次,从旧模型迁移到新模型。

每当我准备发布下一个版本时,我总是使用Model Mapping 来测试迁移。只要我把源模型的每一个实体和属性都做成is matched against corresponding目标模型的实体和属性,我就没有遇到任何问题。

使用您自己的项目文件进行测试与测试分发给客户的已发布文件相同,因此您不必担心将旧模型迁移到新模型的测试是否有效。强>

换句话说,您的项目捆绑包的目标,即将被归档和提交,与客户正在下载的目标相同。

我非常有信心是这种情况,因为我已经用我的应用程序的不同版本进行了测试,没有任何问题。

【讨论】:

谢谢。我以为是这样。我只是想确保我们以正确的方式进行。【参考方案2】:

是的。

我希望您在源代码管理系统中管理您的源代码。如果没有,请尽快开始。 Xcode 4 提供了 git 内置,如果你没有另一个,使用那个。

如果您有旧的源代码,请保留两个不同的目录,即 1.0 版本(现在在商店中)和 1.1 版本。如果您可以操作将在模拟器中影响的数据,那就太理想了。

您将核心数据存储在应用程序的一个文件中,它现在位于 /Users/bshirley/Library/Application\ Support/iPhone\ Simulator/4.3.2/Applications/6D18BD0E-70C1-41FB-9BE8-F736CAAA9FFC/Documents/MyApp.sqlite 之类的某个位置

您可以将其从目录中复制出来,将其作为资源添加到新应用中,并在每次新安装到 sim/device 时执行转换。您可以插入旧格式的任何新版本来测试不同的数据集。

【讨论】:

我们从第一天开始就一直在使用源代码控制。我熟悉实际 db 文件的位置以及可以抓取它的位置。很多时候,我必须加载数据库(使用 base.app)以确保进行了更改,或者正确写入了值。但是这种方法是否能让我们对应用商店中的当前版本进行有效测试?此外,这种方法是否也让 beta 测试人员能够为我们测试升级? 就v.应用商店的版本来说绝对不错。您无需下载该版本 - 运行相同的版本,无论是 sim 卡还是设备都可以。您必须确定哪些可能的测试用例,知道您的模型,您应该在自动迁移中运行以覆盖您的基础。至于Beta测试人员,他们通常只会获得自动升级的一项测试。要求他们再次删除、下载、重建和升级可能是不可取的。 正如您所提到的,您的迁移似乎很少,应该不会影响它。我认为最大的问题是处理对新属性/实体的空引用。

以上是关于如何使用已在 App Store 中的应用测试核心数据迁移?的主要内容,如果未能解决你的问题,请参考以下文章

我是不是需要从 Xcode 6 构建旧应用程序更新(已在 App Store 中)?

已在 App Store 和 iOS 8 发布的 iOS 应用程序

iOS App(使用核心数据)更新后崩溃,但只有 App Store 版本

iOS 10.3 - 如何回复 App Store 评论?

如何使用 Xcode 6.1 分发测试版 Mac App Store 应用程序?

IBM Worklight:将应用程序上传到 Worklight Server/App Store