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

Posted

技术标签:

【中文标题】应用更新后无处不在的商店位置发生意外变化【英文标题】:Unexpected change of ubiquity store location after app update 【发布时间】:2014-08-27 08:41:37 【问题描述】:

一些先决条件: 我们的应用程序之一在 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
    ;

我们选择的店铺网址是:

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

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

file:///private/var/mobile/Applications/FAF62A03-2394-4133-9E84-DCB0BBEA1C22/Library/Application%20Support/CloudStore/CoreDataUbiquitySupport/mobile~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 安装了 App Store 版本 1.2.0 并且我们直接从 Xcode 启动版本 2.0.0 时,我们可以看到 Core Data 框架将我们的商店选项和 URL 转换为不同的 URL,而是完全不同的 URL :

file:///private/var/mobile/Applications/FAF62A03-2394-4133-9E84-DCB0BBEA1C22/Library/Application%20Support/CloudStore/CoreDataUbiquitySupport/mobile~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-.../) 始终相同em>)。 我们注意到,如果我们不是从 App Store 而是直接从 Xcode/AdHoc 分发版(即使在 Release 配置中)获取 1.2.0 版本,它仍然是同一个文件夹。

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

【问题讨论】:

【参考方案1】:

我已经签发了一份 TSI 并得到了这个答案:

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

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

【讨论】:

以上是关于应用更新后无处不在的商店位置发生意外变化的主要内容,如果未能解决你的问题,请参考以下文章

当 vuex 商店的值发生变化时,如何更新组件中的状态?

从应用商店更新后,运行 iOS 应用会发生啥?

identifierForVendor 是不是会在应用更新时发生变化?

汽油运输基于资产监测终端案例分析

与嵌入式 UITableView 交互后,为啥我的 UIView 的框架会发生意外变化?

观察者模式实际应用:监听线程,意外退出线程后自动重启