2011-06-01 87 views
12

我们有一个应用程序目前在应用程序商店。它使用核心数据作为其持久性机制。我们准备好了一个新版本,并且它有一些模式更改。具体而言,我们添加了1个新实体并为现有实体添加了新属性。从我的理解和阅读来看,这是可能发生的最简单的迁移之一。没有字段删除,也没有要更改的关系。数据模型由5个实体组成,根本没有关系。如何使用App Store测试核心数据迁移?

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

  1. 删除所有测试:

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

    目前,我们已经使用以下过程中的团队的几名成员成功测试从设备和iTunes版本的应用程序

  2. 转到应用商店并下载最新版本
  3. 对应用程序进行一些更改,证明迁移成功
  4. 将新的二进制(具有相同的包标识符签名)到iTunes和同步
  5. 负载设备上的新的版本,验证在以前的版本进行的更改仍然存在,并且该应用程序不崩溃

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

回答

5

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

每当我准备发布下一个版本时,我总是使用Model Mapping来测试迁移。只要我将源模型的所有实体和属性都作为目标模型的实体和属性,我就没有经历过任何问题。

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

换句话说,您的项目包的目标将被存档和提交,与客户下载的目标相同。

我非常自信,这是事实,因为我已经完成了对不同版本的应用程序的测试,没有任何问题。

+0

谢谢。我以为是这样。我只是想确保我们以正确的方式开展工作。 – 2011-06-01 13:44:13

+0

我很高兴它有帮助 – petershine 2011-06-02 03:50:57

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 /设备上。您可以使用旧格式的任何新版本来测试不同的数据集。

+0

自从第1天起,我们一直在使用源代码控制。我熟悉实际的db文件的位置以及我可以抓住它的位置。很多时候,我必须加载数据库(使用base.app)以确保进行了更改,或者正确编写了值。但是这种方法是否让我们对应用商店中的当前版本进行有效的测试?此外,这种方法是否适合beta测试人员也能够为我们测试升级? – 2011-06-01 03:47:06

+0

就应用商店版本而言,这绝对是不错的选择。您不需要下载该版本 - 运行相同的版本,无论是SIM还是设备都可以。您必须确定哪些可能的测试用例,了解您的模型,您应该运行自动迁移来覆盖您的基础。就Beta测试人员而言,他们通常只会得到一次自动升级测试。要求他们删除,下载,重建和再次升级可能不合需要。 – bshirley 2011-06-01 04:01:37

+0

正如你所提到的,你的迁移似乎很少,没有太多应该影响它。我认为最大的问题是处理对新属性/实体的空引用。 – bshirley 2011-06-01 04:07:54