Някои предварителни условия: Едно от нашите приложения е налично в 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/E 5FBA065- 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 и стартираме версия 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-9663B02F505 E/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>). Забелязахме, че остава същата папка, ако вземем версия 1.2.0 не от App Store, а директно от разпространението на Xcode/AdHoc (дори в конфигурацията на Release).
Така че се чудим какво става там. Защо рамката се опитва да зареди магазина от друга папка (която не съществува)? Дава ни приложение без никакви съществуващи данни. Ще загубим данните на клиента.