Некоторые предварительные условия. Одно из наших приложений доступно в 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
};
URL-адрес магазина, который мы выбираем:
file:///private/var/mobile/Applications/F6819D1D-1935-487B-AA46-9FEE34275C02/Library/Application%20Support/CloudStore/F74FC85F-D3F6-4719-8ADC-B72570C9E7FE.sqlite
Приложение, загруженное из 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, и мы запускаем версию 2.0.0 непосредственно из Xcode, мы видим, что платформа Core Data переводит параметры и 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-.../). эм>). Мы заметили, что она остается той же самой папкой, если мы берем версию 1.2.0 не из App Store, а напрямую из дистрибутива Xcode/AdHoc (даже в конфигурации Release).
Так что нам интересно, что там происходит. Почему фреймворк пытается загрузить магазин из другой папки (которой не существует)? Это дает нам приложение без каких-либо существующих данных. Мы потеряем данные клиента.