应用更新后,无处不在的商店位置发生意外变化

时间:2014-08-27 08:41:38

标签: ios core-data icloud core-data-migration

一些先决条件: 我们的其中一个应用程序可在App Store 1.2.0版中找到。我们正在使用Core Data和iCloud。我们为NSPersistentStoreCoordinator提供的选项如下:

NSString *cloudContentName = [self cloudContentNameForStoreURL:cloudStoreURL];
NSURL *cloudStoreContentURL = [self URLForCloudContentForStoreURL:cloudStoreURL];
NSDictionary *cloudStoreOptions = @{
        NSPersistentStoreUbiquitousContentNameKey    : cloudContentName,
        NSPersistentStoreUbiquitousContentURLKey     : cloudStoreContentURL,
        NSMigratePersistentStoresAutomaticallyOption : @YES,
        NSInferMappingModelAutomaticallyOption       : @YES
    };

我们选择的商店网址是:

文件:///private/var/mobile/Applications/F6819D1D-1935-487B-AA46-9FEE34275C02/Library/Application%20Support/CloudStore/F74FC85F-D3F6-4719-8ADC-B72570C9E7FE.sqlite

从App Store加载的应用程序会将此URL和选项转换为以下无处不在的位置,并在那里创建新商店:

文件:///私人的/ var /移动/应用/ FAF62A03-2394-4133-9E84-DCB0BBEA1C22 /库/ Application%20Support / CloudStore / CoreDataUbiquitySupport /移动〜36A5A006-FF08-4D16-B81B-DEAEE6D532F9 /E5FBA065-8794-4C75-AEB5-C63004E1AAC6/7811DD75-3EEB-41A5-A748-C3206FBF9E31/store/E5FBA065-8794-4C75-AEB5-C63004E1AAC6.sqlite

现在问题: 我们开发了一个新版本的应用程序:2.0.0。当我们的iPad安装了1.2.0的App Store版本并且我们直接从Xcode启动版本2.0.0时,我们可以看到Core Data框架将我们的商店选项和URL转换为不相同,但是完全不同的URL :

文件:///私人的/ var /移动/应用/ FAF62A03-2394-4133-9E84-DCB0BBEA1C22 /库/ Application%20Support / CloudStore / CoreDataUbiquitySupport /移动〜3431F9C3-00D2-42D1-A888-9663B02F505E /E5FBA065-8794-4C75-AEB5-C63004E1AAC6/7811DD75-3EEB-41A5-A748-C3206FBF9E31/store/E5FBA065-8794-4C75-AEB5-C63004E1AAC6.sqlite

您可以在此处看到,该设备是普遍存在的URL的一部分已发生变化。这可以由我们复制。对于App Store版本( / mobile~36A5A006 -... / ),它总是相同的,并且对于调试版本总是相同的( / mobile~3431F9C3 -... / )。 我们注意到,如果我们不是从App Store获取1.2.0版本,而是直接从Xcode / AdHoc发行版(即使在发布配置中),它仍保持相同的文件夹。

所以我们想知道那里发生了什么。为什么框架尝试从不同的文件夹(不存在)加载存储?它为我们提供了一个没有任何现有数据的应用我们放弃了客户的数据。

1 个答案:

答案 0 :(得分:1)

我已经发出了TSI并得到了这个答案:

  

你所看到的(Ad Hoc版本使用的路径不同于   App Store版本)是一种预期的行为。原因是核心   与iCloud结合使用的数据使用应用的identifierForVendor   在App Store版本和广告中创建商店URL和标识符   Hoc版本可以不同。如果你看一下规格   你会看到identifierForVendor类引用中的UIDevice   这个:“...使用时安装测试版本时,值也会发生变化   Xcode或使用ad-hoc在设备上安装应用程序时   分配“。

     

从App Store安装更新时,不会发生这种情况。