Облегченная миграция iCloud Core Data - сущности исчезают
В моем приложении, которое доступно в Mac Appstore, у меня есть интегрированные данные iCloud + Core для пользователей Mavericks. Поэтому я использую новейшую реализацию iCloud, которая не была такой глючной, как старая… Я думал.
До сих пор все было хорошо, с последним обновлением приложения я вносил небольшие изменения в базу данных, просто добавляя несколько новых свойств к сущности и создавая новую версию модели для этого, конечно.
Если запустить обновленную версию, все данные есть и все в порядке. Все сущности все еще там. Это вывод консоли:
storesDidChange: {
added = (
"<NSSQLCore: 0x100410d10> (URL: file:///Users/lars/Library/Containers/de.nulldesign.tyme.osx/Data/Library/Application%20Support/de.nulldesign.tyme/CoreDataUbiquitySupport/lars~053CB071-18DD-5ED8-B2F0-DD0341B523C7/iCloudStore/2B3578B9-3A28-492B-8C62-BFF7FE7076F3/store/TymeCloud.storedata)"
);
}
-[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](760): CoreData: Ubiquity: lars~053CB071-18DD-5ED8-B2F0-DD0341B523C7:iCloudStore
Using local storage: 1
Через некоторое время возникает ошибка импорта:
__76-[_PFUbiquityRecordsImporter batchDownloadTransactionLogsAtLocations:error:]_block_invoke(763): CoreData: Ubiquity: Librian returned a serious error for starting downloads Error Domain=LibrarianErrorDomain Code=1 "Der Vorgang konnte nicht abgeschlossen werden. (LibrarianErrorDomain-Fehler 1 - Unable to initiate download.)" UserInfo=0x600000271440 {NSDescription=Unable to initiate download., Item Errors={
"file:///Users/lars/Library/Mobile%20Documents/HR22V4547K~de~nulldesign~tyme/CoreData/iCloudStore/lars~053CB071-18DD-5ED8-B2F0-DD0341B523C7/iCloudStore/16Dv7DuLeM4RoFUBtAVIQokfWJRwGABtWC81frFMCp0=/7B142E0C-3C97-4344-B647-28330E5D7FE3.1.cdt" = "Error Domain=UBErrorDomain Code=0 \"Der Vorgang konnte nicht abgeschlossen werden. (UBErrorDomain-Fehler 0 - Error Domain=UBErrorDomain Code=0 \"The operation couldn\U2019t be completed. (UBErrorDomain error 0.)\")\"
…
UserInfo=0x600000271600 {NSDescription=Error Domain=UBErrorDomain Code=0 \"The operation couldn\U2019t be completed. (UBErrorDomain error 0.)\"}";
};
NSDescription = "Unable to initiate download.";
NSUnderlyingError = "Error Domain=UBErrorDomain Code=0 \"Der Vorgang konnte nicht abgeschlossen werden. (UBErrorDomain-Fehler 0.)\"";
}
Затем магазины будут менять огни событий:
storesWillChange: {
NSPersistentStoreUbiquitousTransitionTypeKey = 4;
added = (
"<NSSQLCore: 0x100211490> (URL: file:///Users/lars/Library/Containers/de.nulldesign.tyme.osx/Data/Library/Application%20Support/de.nulldesign.tyme/CoreDataUbiquitySupport/lars~053CB071-18DD-5ED8-B2F0-DD0341B523C7/iCloudStore/2B3578B9-3A28-492B-8C62-BFF7FE7076F3/store/TymeCloud.storedata)"
);
removed = (
"<NSSQLCore: 0x100211490> (URL: file:///Users/lars/Library/Containers/de.nulldesign.tyme.osx/Data/Library/Application%20Support/de.nulldesign.tyme/CoreDataUbiquitySupport/lars~053CB071-18DD-5ED8-B2F0-DD0341B523C7/iCloudStore/2B3578B9-3A28-492B-8C62-BFF7FE7076F3/store/TymeCloud.storedata)"
);
}
И довольно много магазинов WillChange и storesDidChange вскоре после:
storesDidChange: {
removed = (
"<NSSQLCore: 0x100410d10> (URL: file:///Users/lars/Library/Containers/de.nulldesign.tyme.osx/Data/Library/Application%20Support/de.nulldesign.tyme/CoreDataUbiquitySupport/lars~053CB071-18DD-5ED8-B2F0-DD0341B523C7/iCloudStore/2B3578B9-3A28-492B-8C62-BFF7FE7076F3/store/TymeCloud.storedata)"
);
}
-[PFUbiquitySetupAssistant tryToReplaceLocalStore:withStoreSideLoadedByImporter:](3250): CoreData: Ubiquity: <PFUbiquitySetupAssistant: 0x100411670>
Error refreshing peer range cache: (null)
storesDidChange: {
NSPersistentStoreUbiquitousTransitionTypeKey = 4;
added = (
"<NSSQLCore: 0x100410d10> (URL: file:///Users/lars/Library/Containers/de.nulldesign.tyme.osx/Data/Library/Application%20Support/de.nulldesign.tyme/CoreDataUbiquitySupport/lars~053CB071-18DD-5ED8-B2F0-DD0341B523C7/iCloudStore/2B3578B9-3A28-492B-8C62-BFF7FE7076F3/store/TymeCloud.storedata)"
);
removed = (
"<NSSQLCore: 0x100410d10> (URL: file:///Users/lars/Library/Containers/de.nulldesign.tyme.osx/Data/Library/Application%20Support/de.nulldesign.tyme/CoreDataUbiquitySupport/lars~053CB071-18DD-5ED8-B2F0-DD0341B523C7/iCloudStore/2B3578B9-3A28-492B-8C62-BFF7FE7076F3/store/TymeCloud.storedata)"
);
}
storesDidChange: {
added = (
"<NSSQLCore: 0x10020cdb0> (URL: file:///Users/lars/Library/Containers/de.nulldesign.tyme.osx/Data/Library/Application%20Support/de.nulldesign.tyme/CoreDataUbiquitySupport/lars~053CB071-18DD-5ED8-B2F0-DD0341B523C7/iCloudStore/2B3578B9-3A28-492B-8C62-BFF7FE7076F3/store/TymeCloud.storedata)"
);
}
-[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](760): CoreData: Ubiquity: lars~053CB071-18DD-5ED8-B2F0-DD0341B523C7:iCloudStore
Using local storage: 1
После изменения магазина исчезли все объекты, которые не были созданы на этом Mac. Остальные остаются. Событие, если оно переключается на облачное хранилище:
PFUbiquitySwitchboardEntryMetadata setUseLocalStorage: Использование локального хранилища: 0
Только после обновления всех других Mac до последней версии моего приложения, недостающие объекты снова синхронизируются.
Документация гласит: Изменения в хранилище записываются и сохраняются независимо для каждой версии модели, которая связана с данным NSPersistentStoreUbiquitousContentNameKey. Постоянное хранилище, сконфигурированное с заданным NSPersistentStoreUbiquitousContentNameKey, синхронизирует данные с хранилищем данных другого устройства только в том случае, если версии модели совпадают.
Если вы перенастраиваете постоянное хранилище, настроенное с параметром NSPersistentStoreUbiquitousContentNameKey, на новую версию модели, история изменений хранилища, происходящих с текущего устройства, также будет перенесена, а затем объединена с любыми другими устройствами, настроенными с этой новой версией модели.
Поэтому мне интересно, если это ожидаемое поведение при легкой миграции в iCloud. Для моих пользователей это определенно не ожидаемое поведение, так как их проекты исчезают, пока они не обновили все свои устройства.
Настройка базового стека данных довольно проста:
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if(_persistentStoreCoordinator)
{
return _persistentStoreCoordinator;
}
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if(_iCloudConnectionPossible)
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(storesWillChange:)
name:NSPersistentStoreCoordinatorStoresWillChangeNotification
object:_persistentStoreCoordinator];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(persistentStoreDidImportUbiquitousContentChanges:)
name:NSPersistentStoreDidImportUbiquitousContentChangesNotification
object:_persistentStoreCoordinator];
}
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(storesDidChange:)
name:NSPersistentStoreCoordinatorStoresDidChangeNotification
object:_persistentStoreCoordinator];
NSURL *localStoragePath = [self dataStorePathUseiCloud:_useCloudStorage];
NSError *error = nil;
[_persistentStoreCoordinator lock];
NSPersistentStore *persistentStore = [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storagePath
options:[self storeOptionsUseiCloud:_useCloudStorage]
error:&error];
[_persistentStoreCoordinator unlock];
return _persistentStoreCoordinator;
}
- (NSDictionary *)storeOptionsUseiCloud:(BOOL)useiCloud
{
NSMutableDictionary *options = [NSMutableDictionary dictionary];
[options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
[options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];
if(useiCloud)
{
[options setObject:@"iCloudStore" forKey:NSPersistentStoreUbiquitousContentNameKey];
}
return options;
}
- (NSManagedObjectContext *)managedObjectContext
{
if(_managedObjectContext)
{
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if(coordinator != nil)
{
NSManagedObjectContext *moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
moc.mergePolicy = NSMergeByPropertyObjectTrumpMergePolicy;
[moc performBlockAndWait:^
{
[moc setPersistentStoreCoordinator:coordinator];
}];
_managedObjectContext = moc;
}
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(contextWillSaveNotification:)
name:NSManagedObjectContextWillSaveNotification
object:_managedObjectContext];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(mergeChangesAfterDidSaveNotification:)
name:NSManagedObjectContextDidSaveNotification
object:_managedObjectContext];
return _managedObjectContext;
}
И магазины обработчиков Will / DidChange:
- (void)storesWillChange:(NSNotification *)note
{
NSManagedObjectContext *moc = self.managedObjectContext;
[moc performBlockAndWait:^
{
NSError *error = nil;
if([moc hasChanges])
{
[moc save:&error];
}
[moc reset];
}];
}
- (void)storesDidChange:(NSNotification *)note
{
// refresh UI, ...
}
Есть ли способ обойти это? Что здесь не так?
4 ответа
Между тем я получил сообщение об этой проблеме от службы технической поддержки Apple: да, это ожидаемое поведение. Я должен подать отчет об улучшении, если я ожидаю лучшего поведения.
Что означает: миграция CoreData не работает для iCloud. Это не приемлемый опыт для пользователя. Как вы должны быть в состоянии сказать своим клиентам, что они временно теряют данные, пока все их устройства не будут обновлены. Если они переустановили одно устройство или оно сломалось, данные будут потеряны в iCloud навсегда.
Облегченная миграция должна работать нормально, однако это может занять некоторое время. Ниже приведен журнал такой миграции. Вы можете видеть ошибки, которые показывает Core Data, но все данные существуют, и некоторые были созданы приложением на устройстве, а другие данные были созданы на других устройствах. Обратите внимание, что в какой-то момент в течение почти 30 секунд не происходит никаких действий, прежде чем переключение в хранилище будет окончательно выполнено (посмотрите на время 10:57:51, следующее действие в 10:58:16).
2014-02-25 10:57:03.213 CoreDataLibraryApp[678:60b] OSCDStackManager.init called
2014-02-25 10:57:03.342 CoreDataLibraryApp[678:60b] AppDelegate.application:didFinishLaunchingWithOptions: didFinishLaunchingWithOptions called
2014-02-25 10:57:03.344 CoreDataLibraryApp[678:60b] AppDelegate.application:didFinishLaunchingWithOptions: starting long job (1 seconds) on main thread
2014-02-25 10:57:04.347 CoreDataLibraryApp[678:60b] AppDelegate.application:didFinishLaunchingWithOptions: finished long job on main thread
2014-02-25 10:57:04.352 CoreDataLibraryApp[678:60b] AppDelegate.application:didFinishLaunchingWithOptions: checkUserICloudPreferenceAndSetupIfNecessary done.
2014-02-25 10:57:04.354 CoreDataLibraryApp[678:60b] DetailViewManager.setDetailViewController: called
2014-02-25 10:57:04.442 CoreDataLibraryApp[678:60b] DetailViewManager.setDetailViewController: detailViewController is <OpeningViewController: 0x16d95360>
2014-02-25 10:57:04.444 CoreDataLibraryApp[678:60b] DetailViewManager.setDetailViewController: openingViewController is (null)
2014-02-25 10:57:04.446 CoreDataLibraryApp[678:60b] DetailViewManager.splitViewController:shouldHideViewController:inOrientation: called
2014-02-25 10:57:04.447 CoreDataLibraryApp[678:60b] DetailViewManager.splitViewController:shouldHideViewController:inOrientation: called
2014-02-25 10:57:04.449 CoreDataLibraryApp[678:60b] DetailViewManager.splitViewController:shouldHideViewController:inOrientation: called
2014-02-25 10:57:04.450 CoreDataLibraryApp[678:60b] AppDelegate.application:didFinishLaunchingWithOptions: didFinishLaunchingWithOptions done.
2014-02-25 10:57:04.492 CoreDataLibraryApp[678:60b] MenuViewController.viewWillAppear: called
2014-02-25 10:57:04.493 CoreDataLibraryApp[678:60b] DetailViewManager.showOpeningViewController called
2014-02-25 10:57:04.495 CoreDataLibraryApp[678:60b] DetailViewManager.showOpeningViewController openingViewController is <OpeningViewController: 0x16d95360>
2014-02-25 10:57:04.632 CoreDataLibraryApp[678:60b] OSCDStackManager.performChecks checkUserICloudPreferenceAndSetupIfNecessary called
2014-02-25 10:57:04.636 CoreDataLibraryApp[678:60b] OSCDStackManager.showBackgroundTaskActive _job_counter is 1
2014-02-25 10:57:04.643 CoreDataLibraryApp[678:60b] OSCDStackManager.backupCurrentStore called
2014-02-25 10:57:04.659 CoreDataLibraryApp[678:60b] OSCDStackManager.backupCurrentStore backup not required
2014-02-25 10:57:04.779 CoreDataLibraryApp[678:60b] OSCDStackManager.performChecks ubiquityIdentityToken is <c1fb12f1 f34ca983 5b43956f c11118e3 0a5e1bb8>
2014-02-25 10:57:04.916 CoreDataLibraryApp[678:60b] OSCDStackManager.performChecks iCloud container is file:///private/var/mobile/Library/Mobile%20Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/
2014-02-25 10:57:04.917 CoreDataLibraryApp[678:60b] OSCDStackManager.createFileQuery called.
2014-02-25 10:57:04.918 CoreDataLibraryApp[678:60b] OSCDStackManager.createFileQuery Creating metadata query
2014-02-25 10:57:04.921 CoreDataLibraryApp[678:60b] OSCDStackManager.createFileQuery starting iCloud metadata query
2014-02-25 10:57:04.922 CoreDataLibraryApp[678:60b] OSCDStackManager.createFileQuery query started
2014-02-25 10:57:04.923 CoreDataLibraryApp[678:60b] OSCDStackManager.performChecks iCloud is enabled
2014-02-25 10:57:04.925 CoreDataLibraryApp[678:60b] OSCDStackManager.performChecks User preference for au.com.ossh.CoreDataLibraryApp.UseICloudStorage is YES
2014-02-25 10:57:04.927 CoreDataLibraryApp[678:60b] OSCDStackManager.performChecks User selected iCloud
2014-02-25 10:57:04.928 CoreDataLibraryApp[678:60b] OSCDStackManager.performChecks iCloud is active
2014-02-25 10:57:04.929 CoreDataLibraryApp[678:60b] OSCDStackManager.performChecks userICloudChoiceSet is set
2014-02-25 10:57:04.930 CoreDataLibraryApp[678:60b] OSCDStackManager.performChecks userICloudChoice is YES
2014-02-25 10:57:04.931 CoreDataLibraryApp[678:60b] OSCDStackManager.setIsCloudEnabled: setIsCloudEnabled:YES called
2014-02-25 10:57:04.939 CoreDataLibraryApp[678:4303] OSCDStackManager.migrateFilesIfRequired migrateFilesIfRequired called...
2014-02-25 10:57:04.955 CoreDataLibraryApp[678:4303] OSCDStackManager.migrateFilesIfRequired iCloud has been enabled so migrate local files to iCloud if they exist
2014-02-25 10:57:04.956 CoreDataLibraryApp[678:4303] OSCDStackManager.localStoreExists localStoreExists called
2014-02-25 10:57:04.959 CoreDataLibraryApp[678:4303] OSCDStackManager.localStoreExists localStoreURL is /var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/persistentStore
2014-02-25 10:57:04.960 CoreDataLibraryApp[678:4303] OSCDStackManager.localStoreExists localStoreURL does not exist
2014-02-25 10:57:04.962 CoreDataLibraryApp[678:4303] OSCDStackManager.migrateFilesIfRequired No local store exists
2014-02-25 10:57:04.964 CoreDataLibraryApp[678:4303] OSCDStackManager.openPersistentStore openPersistentStore called... XXXXXXXXXX XXX XXX XX XX X X
2014-02-25 10:57:04.979 CoreDataLibraryApp[678:4303] OSCDStackManager.openPersistentStore storeURL is file:///var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/persistentStore_ICLOUD
2014-02-25 10:57:04.980 CoreDataLibraryApp[678:4303] OSCDStackManager.storeExists called
2014-02-25 10:57:04.988 CoreDataLibraryApp[678:4303] OSCDStackManager.iCloudStoreExists iCloudStoreExists called
2014-02-25 10:57:04.990 CoreDataLibraryApp[678:4303] OSCDStackManager.iCloudStoreExists Checking if file exists in local ubiquity container
2014-02-25 10:57:05.162 CoreDataLibraryApp[678:3707] OSCDStackManager.listAllICloudDocs iCloudDirectory is file:///private/var/mobile/Library/Mobile%20Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/
2014-02-25 10:57:05.164 CoreDataLibraryApp[678:3707] OSCDStackManager.listAllICloudDocs
2014-02-25 10:57:05.166 CoreDataLibraryApp[678:3707] OSCDStackManager.listAllICloudDocs ICLOUD DOCUMENTS (1)
2014-02-25 10:57:05.167 CoreDataLibraryApp[678:3707] OSCDStackManager.listAllICloudDocs =====================
2014-02-25 10:57:05.168 CoreDataLibraryApp[678:3707] OSCDStackManager.listAllICloudDocs persistentStore_ICLOUD
2014-02-25 10:57:05.169 CoreDataLibraryApp[678:3707] OSCDStackManager.listAllICloudDocs
2014-02-25 10:57:05.386 CoreDataLibraryApp[678:4303] OSCDStackManager.iCloudStoreExists icloudStoreURL is /private/var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD
2014-02-25 10:57:05.531 CoreDataLibraryApp[678:4303] OSCDStackManager.iCloudStoreExists icloudStoreURL exists
2014-02-25 10:57:05.533 CoreDataLibraryApp[678:4303] OSCDStackManager.iCloudStoreExists Now checking if file exists in iCloud (not downloaded yet perhaps)
2014-02-25 10:57:05.534 CoreDataLibraryApp[678:4303] OSCDStackManager.doesICloudFileExist called
2014-02-25 10:57:05.537 CoreDataLibraryApp[678:60b] OSCDStackManager.createFileQuery called.
2014-02-25 10:57:05.539 CoreDataLibraryApp[678:60b] OSCDStackManager.createFileQuery Creating metadata query
2014-02-25 10:57:05.540 CoreDataLibraryApp[678:60b] OSCDStackManager.createFileQuery starting iCloud metadata query
2014-02-25 10:57:05.541 CoreDataLibraryApp[678:60b] OSCDStackManager.createFileQuery query started
2014-02-25 10:57:05.543 CoreDataLibraryApp[678:4303] OSCDStackManager.doesICloudFileExist has not checked iCloud yet, waiting
2014-02-25 10:57:05.974 CoreDataLibraryApp[678:60b] OSCDStackManager.fileListReceived called.
2014-02-25 10:57:05.976 CoreDataLibraryApp[678:1803] OSCDStackManager.processFiles called.
2014-02-25 10:57:05.977 CoreDataLibraryApp[678:1803] OSCDStackManager.processFiles querystopped
2014-02-25 10:57:06.040 CoreDataLibraryApp[678:1803] OSCDStackManager.processFiles all files CURRENT
2014-02-25 10:57:06.041 CoreDataLibraryApp[678:1803] OSCDStackManager.processFiles iCloud file exists
2014-02-25 10:57:06.545 CoreDataLibraryApp[678:4303] OSCDStackManager.doesICloudFileExist has checked iCloud, file exists
2014-02-25 10:57:06.547 CoreDataLibraryApp[678:4303] OSCDStackManager.iCloudStoreExists icloud store exists
2014-02-25 10:57:06.549 CoreDataLibraryApp[678:4303] OSCDStackManager.storeExists iCloudStoreExists returned YES
2014-02-25 10:57:06.551 CoreDataLibraryApp[678:4303] OSCDStackManager.openPersistentStore store Options are {
NSInferMappingModelAutomaticallyOption = 1;
NSMigratePersistentStoresAutomaticallyOption = 1;
NSPersistentStoreUbiquitousContentNameKey = "persistentStore_ICLOUD";
NSSQLitePragmasOption = {
"journal_mode" = DELETE;
};
}
2014-02-25 10:57:06.552 CoreDataLibraryApp[678:4303] OSCDStackManager.openPersistentStore addPersistentStoreWithType about to be called...
2014-02-25 10:57:06.554 CoreDataLibraryApp[678:4303] OSCDStackManager.snooze: sleeping for 1 seconds...
2014-02-25 10:57:07.556 CoreDataLibraryApp[678:4303] OSCDStackManager.snooze: done sleeping.
2014-02-25 10:57:08.686 CoreDataLibraryApp[678:4303] OSCDStackManager.storesDidChange: storesDidChange called - >>>>>>>>>>>>>>>>>>>>>>>>>>>>
2014-02-25 10:57:08.687 CoreDataLibraryApp[678:4303] OSCDStackManager.storesDidChange: userInfo is {
added = (
"<NSSQLCore: 0x16d40640> (URL: file:///var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/CoreDataUbiquitySupport/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/D7446340-186B-4EDB-A5C9-43006892D532/store/persistentStore_ICLOUD)"
);
}
2014-02-25 10:57:08.689 CoreDataLibraryApp[678:4303] OSCDStackManager.storesDidChange: transition type is (null)
2014-02-25 10:57:08.690 CoreDataLibraryApp[678:60b] OSCDStackManager.createTimer called
2014-02-25 10:57:08.691 CoreDataLibraryApp[678:60b] OSCDStackManager.showBackgroundTaskActive _job_counter is 2
2014-02-25 10:57:08.720 CoreDataLibraryApp[678:4303] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](771): CoreData: Ubiquity: mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB:persistentStore_ICLOUD
Using local storage: 1
2014-02-25 10:57:08.729 CoreDataLibraryApp[678:4303] OSCDStackManager.openPersistentStore addPersistentStoreWithType completed successfully...
2014-02-25 10:57:08.732 CoreDataLibraryApp[678:4303] OSCDStackManager.loadSeedDataIfRequired called
2014-02-25 10:57:08.733 CoreDataLibraryApp[678:4303] OSCDStackManager.loadSeedDataIfRequired Do not load seed data
2014-02-25 10:57:08.735 CoreDataLibraryApp[678:4303] OSCDStackManager.createTimer called
2014-02-25 10:57:08.738 CoreDataLibraryApp[678:4303] OSCDStackManager.showBackgroundTaskInactive _job_counter is 1
2014-02-25 10:57:09.739 CoreDataLibraryApp[678:60b] OSCDStackManager.notifyOfCoreDataUpdates notifyOfCoreDataUpdates called
2014-02-25 10:57:09.742 CoreDataLibraryApp[678:60b] OSCDStackManager.showBackgroundTaskInactive _job_counter is 0
2014-02-25 10:57:17.665 CoreDataLibraryApp[678:60b] OSCDStackManager.fileListReceived called.
2014-02-25 10:57:17.667 CoreDataLibraryApp[678:4303] OSCDStackManager.processFiles called.
2014-02-25 10:57:17.669 CoreDataLibraryApp[678:4303] OSCDStackManager.processFiles querystopped
2014-02-25 10:57:17.681 CoreDataLibraryApp[678:4303] OSCDStackManager.processFiles keep running query because not all files CURRENT
2014-02-25 10:57:17.682 CoreDataLibraryApp[678:4303] OSCDStackManager.showBackgroundTaskActive _job_counter is 1
2014-02-25 10:57:22.038 CoreDataLibraryApp[678:60b] OSCDStackManager.fileListReceived called.
2014-02-25 10:57:22.040 CoreDataLibraryApp[678:4303] OSCDStackManager.processFiles called.
2014-02-25 10:57:22.042 CoreDataLibraryApp[678:4303] OSCDStackManager.processFiles querystopped
2014-02-25 10:57:22.053 CoreDataLibraryApp[678:4303] OSCDStackManager.processFiles keep running query because not all files CURRENT
2014-02-25 10:57:23.916 CoreDataLibraryApp[678:60b] OSCDStackManager.fileListReceived called.
2014-02-25 10:57:23.918 CoreDataLibraryApp[678:4303] OSCDStackManager.processFiles called.
2014-02-25 10:57:23.920 CoreDataLibraryApp[678:4303] OSCDStackManager.processFiles querystopped
2014-02-25 10:57:23.931 CoreDataLibraryApp[678:4303] OSCDStackManager.processFiles all files CURRENT
2014-02-25 10:57:23.932 CoreDataLibraryApp[678:4303] OSCDStackManager.showBackgroundTaskInactive _job_counter is 0
2014-02-25 10:57:23.933 CoreDataLibraryApp[678:4303] OSCDStackManager.processFiles iCloud file exists
2014-02-25 10:57:43.975 CoreDataLibraryApp[678:3707] OSCDStackManager.storesWillChange: storesWillChange called - >>>>>>>>>>>>>>>>>>>>>>>>>>>>
2014-02-25 10:57:43.976 CoreDataLibraryApp[678:3707] OSCDStackManager.storesWillChange: transition type is 4
2014-02-25 10:57:43.978 CoreDataLibraryApp[678:3707] OSCDStackManager.storesWillChange: transition type is NSPersistentStoreUbiquitousTransitionTypeInitialImportCompleted
2014-02-25 10:57:43.980 CoreDataLibraryApp[678:3707] OSCDStackManager.storesWillChange: added stores are (
"<NSSQLCore: 0x16d40640> (URL: file:///var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/CoreDataUbiquitySupport/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/D7446340-186B-4EDB-A5C9-43006892D532/store/persistentStore_ICLOUD)"
)
2014-02-25 10:57:43.982 CoreDataLibraryApp[678:3707] OSCDStackManager.storesWillChange: removed stores are (
"<NSSQLCore: 0x16d40640> (URL: file:///var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/CoreDataUbiquitySupport/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/D7446340-186B-4EDB-A5C9-43006892D532/store/persistentStore_ICLOUD)"
)
2014-02-25 10:57:43.983 CoreDataLibraryApp[678:3707] OSCDStackManager.storesWillChange: changed stores are (null)
2014-02-25 10:57:43.984 CoreDataLibraryApp[678:60b] OSCDStackManager.persistentStoreCoordinator persistentStoreCoordinator called
2014-02-25 10:57:44.055 CoreDataLibraryApp[678:3707] OSCDStackManager.storesDidChange: storesDidChange called - >>>>>>>>>>>>>>>>>>>>>>>>>>>>
2014-02-25 10:57:44.056 CoreDataLibraryApp[678:3707] OSCDStackManager.storesDidChange: userInfo is {
NSPersistentStoreUbiquitousTransitionTypeKey = 4;
added = (
"<NSSQLCore: 0x16d40640> (URL: file:///var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/CoreDataUbiquitySupport/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/D7446340-186B-4EDB-A5C9-43006892D532/store/persistentStore_ICLOUD)"
);
removed = (
"<NSSQLCore: 0x16d40640> (URL: file:///var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/CoreDataUbiquitySupport/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/D7446340-186B-4EDB-A5C9-43006892D532/store/persistentStore_ICLOUD)"
);
}
2014-02-25 10:57:44.058 CoreDataLibraryApp[678:3707] OSCDStackManager.storesDidChange: transition type is 4
2014-02-25 10:57:44.060 CoreDataLibraryApp[678:3707] OSCDStackManager.storesDidChange: transition type is NSPersistentStoreUbiquitousTransitionTypeInitialImportCompleted
2014-02-25 10:57:44.061 CoreDataLibraryApp[678:60b] OSCDStackManager.createTimer called
2014-02-25 10:57:44.063 CoreDataLibraryApp[678:60b] OSCDStackManager.showBackgroundTaskActive _job_counter is 1
2014-02-25 10:57:44.376 CoreDataLibraryApp[678:60b] OSCDStackManager.fileListReceived called.
2014-02-25 10:57:44.378 CoreDataLibraryApp[678:4b0f] OSCDStackManager.processFiles called.
2014-02-25 10:57:44.380 CoreDataLibraryApp[678:4b0f] OSCDStackManager.processFiles querystopped
2014-02-25 10:57:44.394 CoreDataLibraryApp[678:4b0f] OSCDStackManager.processFiles keep running query because not all files CURRENT
2014-02-25 10:57:44.395 CoreDataLibraryApp[678:4b0f] OSCDStackManager.showBackgroundTaskActive _job_counter is 2
2014-02-25 10:57:45.064 CoreDataLibraryApp[678:60b] OSCDStackManager.notifyOfCoreDataUpdates notifyOfCoreDataUpdates called
2014-02-25 10:57:45.067 CoreDataLibraryApp[678:60b] OSCDStackManager.showBackgroundTaskInactive _job_counter is 1
2014-02-25 10:57:47.641 CoreDataLibraryApp[678:60b] OSCDStackManager.fileListReceived called.
2014-02-25 10:57:47.644 CoreDataLibraryApp[678:4b0f] OSCDStackManager.processFiles called.
2014-02-25 10:57:47.645 CoreDataLibraryApp[678:4b0f] OSCDStackManager.processFiles querystopped
2014-02-25 10:57:47.657 CoreDataLibraryApp[678:4b0f] OSCDStackManager.processFiles keep running query because not all files CURRENT
2014-02-25 10:57:51.002 CoreDataLibraryApp[678:60b] OSCDStackManager.fileListReceived called.
2014-02-25 10:57:51.004 CoreDataLibraryApp[678:4b0f] OSCDStackManager.processFiles called.
2014-02-25 10:57:51.005 CoreDataLibraryApp[678:4b0f] OSCDStackManager.processFiles querystopped
2014-02-25 10:57:51.020 CoreDataLibraryApp[678:4b0f] OSCDStackManager.processFiles all files CURRENT
2014-02-25 10:57:51.022 CoreDataLibraryApp[678:4b0f] OSCDStackManager.showBackgroundTaskInactive _job_counter is 0
2014-02-25 10:57:51.023 CoreDataLibraryApp[678:4b0f] OSCDStackManager.processFiles iCloud file exists
2014-02-25 10:58:16.108 CoreDataLibraryApp[678:3707] -[PFUbiquitySafeSaveFile waitForFileToUpload:](299): CoreData: Ubiquity: <PFUbiquityBaseline: 0x16e1edc0>(0)
permanentLocation: <PFUbiquityLocation: 0x16e1eea0>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/.baseline/persistentStore_ICLOUD/cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=/baseline.zip
safeLocation: <PFUbiquityLocation: 0x16e1eed0>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/.baseline/persistentStore_ICLOUD/cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB
currentLocation: <PFUbiquityLocation: 0x16e1eed0>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/.baseline/persistentStore_ICLOUD/cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB
storeName: persistentStore_ICLOUD
modelVersionHash: cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=
baselineArchiveLocation: <PFUbiquityLocation: 0x16e1eea0>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/.baseline/persistentStore_ICLOUD/cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=/baseline.zip
Safe save failed for file, error: Error Domain=NSCocoaErrorDomain Code=260 "The operation couldn’t be completed. (Cocoa error 260 - Request for item properties on non-existent item.)" UserInfo=0x16d56b60 {NSDescription=Request for item properties on non-existent item.}
2014-02-25 10:58:16.116 CoreDataLibraryApp[678:3707] -[PFUbiquitySetupAssistant finishSetupForStore:error:](1012): CoreData: Ubiquity: <PFUbiquitySetupAssistant: 0x16d45940>
options: {
NSInferMappingModelAutomaticallyOption = 1;
NSMigratePersistentStoresAutomaticallyOption = 1;
NSPersistentStoreUbiquitousContentNameKey = "persistentStore_ICLOUD";
NSSQLitePragmasOption = {
"journal_mode" = DELETE;
};
}
psc: <NSPersistentStoreCoordinator: 0x16ea2570>
store: <NSSQLCore: 0x16d40640> (URL: file:///var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/CoreDataUbiquitySupport/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/D7446340-186B-4EDB-A5C9-43006892D532/store/persistentStore_ICLOUD)
storeURL: file:///var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/CoreDataUbiquitySupport/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/D7446340-186B-4EDB-A5C9-43006892D532/store/persistentStore_ICLOUD
actualStoreURL: file:///var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/CoreDataUbiquitySupport/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/D7446340-186B-4EDB-A5C9-43006892D532/store/persistentStore_ICLOUD
storeMetadata: {
NSPersistenceFrameworkVersion = 479;
NSStoreModelVersionHashes = {
Company = <e4d136d3 2e3c702a d137c31b d9b4fafa 4450aeba 09b59e09 7b715b06 ef379020>;
Contact = <7f35a0c9 6c3f490c 98bb4276 20b39a2b 86d4384f 301d7228 8be03a8d 30d6b0ec>;
Deliverable = <27faefa4 8ca257fc 9ad0ebe5 18ec883b 862c87cc 5dce86c8 8ef4f514 2ab8407e>;
Person = <d6cf6811 68922c51 9a93aa08 7fc172fd 86c710e5 b79ed8f2 d9b941f3 d9eadc1e>;
Program = <15879af6 ccb62dfb fff56d7e bfe6d087 9a9422d5 b839c887 908f84c7 d7bccaa1>;
Project = <0dd03984 c7f0e76c a1a0b703 34c5b7bb e5a71ccc a81d2273 a3ee6462 cd4c15ed>;
ProjectType = <4f1f3258 e877298f 88055237 fb9832c8 2c40bb4d 0c604562 8d47b770 7bda9f09>;
};
NSStoreModelVersionHashesVersion = 3;
NSStoreModelVersionIdentifiers = (
""
);
NSStoreType = SQLite;
NSStoreUUID = "FF808963-A275-4631-83D3-3BC991147555";
PFUbiquitySetupContainerIdentifierKey = "D7446340-186B-4EDB-A5C9-43006892D532";
PFUbiquitySetupOriginalStoreURLAbsoluteStringKey = "file:///var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/persistentStore_ICLOUD";
PFUbiquitySetupPreviousModelVersionHashKey = "xuH12bxbPI5FO_uboaBoP4EUS~raVWx0ga0Ia6jerHg=";
"_NSAutoVacuumLevel" = 2;
"com.apple.coredata.ubiquity.baseline.timestamp" = 1393285820;
"com.apple.coredata.ubiquity.ubiquitized" = 1;
}
storeKV: <PFUbiquityKnowledgeVector: 0x16f8f100> (duncangroenewald~AABC628E-9D5E-58F7-9B8D-0BC724C6D0C8:101:mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB:1)
storeFileExists: 1
storeFileIsReadOnly: 0
ubiquityEnabled: 1
ubiquityIdentityToken: <c1fb12f1 f34ca983 5b43956f c11118e3 0a5e1bb8>
ubiquityRootURL: file:///private/var/mobile/Library/Mobile%20Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/
ubiquityRootSubpath: (null)
ubiquityName: persistentStore_ICLOUD
ubiquityContainerIdentifier: (null)
localPeerID: mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB
modelVersionHash: cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=
ubiquityRootLocation: <PFUbiquityLocation: 0x16eb0db0>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD
localRootLocation: <PFUbiquityLocation: 0x16d4f3e0>: /var/mobile/Applications/2B6EA87A-05F1-4E38-A776-1CF74379B65A/Documents/CoreDataUbiquitySupport/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/D7446340-186B-4EDB-A5C9-43006892D532/container
metaKV: <PFUbiquityKnowledgeVector: 0x16e898e0> (duncangroenewald~AABC628E-9D5E-58F7-9B8D-0BC724C6D0C8:101)
baseline: <PFUbiquityBaseline: 0x16e1edc0>(0)
permanentLocation: <PFUbiquityLocation: 0x16e1eea0>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/.baseline/persistentStore_ICLOUD/cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=/baseline.zip
safeLocation: <PFUbiquityLocation: 0x16e1eed0>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/.baseline/persistentStore_ICLOUD/cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB
currentLocation: <PFUbiquityLocation: 0x16e1eed0>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/.baseline/persistentStore_ICLOUD/cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB
storeName: persistentStore_ICLOUD
modelVersionHash: cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=
baselineArchiveLocation: <PFUbiquityLocation: 0x16e1eea0>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/.baseline/persistentStore_ICLOUD/cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=/baseline.zip
baselineFileExists: 1
hasUploadingBaseline: 1
monitorBaslineUploadAsync: 0
didBaselineCopy: 1
baselineKV: <PFUbiquityKnowledgeVector: 0x16f1dde0> (duncangroenewald~AABC628E-9D5E-58F7-9B8D-0BC724C6D0C8:101:mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB:1)
hasStoreMetadataFile: 1
hasStoreMetadataEntry: 1
hasContainerUUID: 1
hasContainerUUIDInStore: 1
needsMetadataRecovery: 0
localPeerReceipt: <PFUbiquityPeerReceipt: 0x16f19b70>(0)
permanentLocation: <PFUbiquityLocation: 0x16f17d30>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=/receipt.0.cdt
safeLocation: <PFUbiquityLocation: 0x16d57780>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB.0.cdt
currentLocation: <PFUbiquityLocation: 0x16f17d30>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/cwloRsUoKpzgKGCNoi2z46q21XiaQQ4g8n2tM6pS~Po=/receipt.0.cdt
kv: <PFUbiquityKnowledgeVector: 0x16dafa90> (duncangroenewald~AABC628E-9D5E-58F7-9B8D-0BC724C6D0C8:101:mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB:1)
receiptKV: <PFUbiquityKnowledgeVector: 0x16d199a0> ()
containerIdentifier: <PFUbiquityContainerIdentifier: 0x16da1a20>: <PFUbiquityLocation: 0x16f64080>: /var/mobile/Library/Mobile Documents/HHWT75NS6T~au~com~ossh~CoreDataLibraryApp/CoreData/persistentStore_ICLOUD/.cdmetadata/metadata.nosync/mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB/persistentStore_ICLOUD/D7446340-186B-4EDB-A5C9-43006892D532.cid
preStoreContainerUUID: D7446340-186B-4EDB-A5C9-43006892D532
usedExistingUUIDMapping: 1
hasLocalTransactionLogs: 1
votedOffIsland: 0
reapUbiquitousLogs: 0
respondToBaselineRoll: 0
hasMigrationOptions: 1
didMigrateBaseline: 1
storeWasMigrated: 0
replayLogsSynchronously: 1
useLocalAccount: 0
abortSetup: 0
gotExportNotification: 0
Setup failed after waiting for the baseline file to upload.
Error Domain=NSCocoaErrorDomain Code=260 "The operation couldn’t be completed. (Cocoa error 260 - Request for item properties on non-existent item.)" UserInfo=0x16d56b60 {NSDescription=Request for item properties on non-existent item.}
2014-02-25 10:58:16.129 CoreDataLibraryApp[678:3707] -[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](771): CoreData: Ubiquity: mobile~A3BF465A-15C7-46F2-8C68-AC8F49FD15AB:persistentStore_ICLOUD
Using local storage: 0
2014-02-25 10:58:16.167 CoreDataLibraryApp[678:3707] -[PFUbiquitySetupAssistant finishSetupWithRetry:](822): CoreData: Ubiquity: <PFUbiquitySetupAssistant: 0x16d45940>: Retrying after delay: 60
Error Domain=NSCocoaErrorDomain Code=260 "The operation couldn’t be completed. (Cocoa error 260 - Request for item properties on non-existent item.)" UserInfo=0x16d56b60 {NSDescription=Request for item properties on non-existent item.}
2014-02-25 10:58:24.819 CoreDataLibraryApp[678:60b] OSCDStackManager.fileListReceived called.
2014-02-25 10:58:24.820 CoreDataLibraryApp[678:5c1f] OSCDStackManager.processFiles called.
2014-02-25 10:58:24.821 CoreDataLibraryApp[678:5c1f] OSCDStackManager.processFiles querystopped
2014-02-25 10:58:24.836 CoreDataLibraryApp[678:5c1f] OSCDStackManager.processFiles all files CURRENT
2014-02-25 10:58:24.838 CoreDataLibraryApp[678:5c1f] OSCDStackManager.processFiles iCloud file exists
Я очень сомневаюсь, что это предполагаемое поведение. Насколько я понимаю, ваше обновленное приложение должно сохранять свои данные, но не будет видеть данные из более старых версий, пока они не обновятся.
Кажется, первоначальная ошибка была в библиотекаре, который, я думаю, в основном отвечает за передачу файлов назад и вперед из облака. Возможно, из-за ошибки ваше приложение каким-то образом спровоцировало отступление в резервное хранилище без данных.
Возможно, стоит попробовать все это снова и посмотреть, произойдет ли тот же результат. Это могло быть только один раз из-за неудачной загрузки, и возможно это могло восстановиться через некоторое время.
Именно поэтому я никогда не поставлялся с Apple iCloud+Core Data sync - не из-за отсутствия попыток - и до сих пор не доверяю этому. Как вы можете доверять структуре персистентности, которая отбрасывает данные или изменяет их непредвиденными способами (например, теряет отношения), и где ничего из этого не задокументировано, а у вас нет исходного кода?
Решение Apple слишком тесно связывает стек основных данных со своим механизмом синхронизации. Они сделали эту ошибку очень рано, и теперь они не могут отступить. Они просто копают себя все глубже и глубже. Резервные магазины - классический пример. Теперь они меняют магазины из-под тебя.
Правильное решение, принятое в коммерческих предложениях с открытым исходным кодом, таких как Wasabi Sync, TICDS и Ensembles, состоит в том, чтобы иметь несвязанную структуру синхронизации. Если механизм синхронизации дает сбой, он никоим образом не должен сбивать ваш базовый стек данных. Он должен, черт возьми, не возвращаться в пустой магазин без уважительной причины.
Я думаю, что способ, которым Ensembles решает, это то, как Apple должна была это сделать (Раскрытие информации: я разрабатываю Ensembles). Стек основных данных настраивается так же, как любой стек, без "знания" о синхронизации. Инфраструктура синхронизации отслеживает сохранение в постоянном хранилище и объединяет изменения с других устройств через фоновый контекст. Ни в коем случае вам никогда не придется ломать свой стек, менять постоянные хранилища или переносить данные. Вы рассматриваете стек почти так, как если бы он был стандартным несинхронизируемым стеком.
Не нарушено ли это и не является ли это непреднамеренным поведением. В документации Apple говорится, что это ожидаемый результат, и даются объяснения.
Однако имя одноранговой папки версии App Store обычно отличается от имени не-версии App Store (такой как тестовая сборка, установленная с Xcode, версия Ad Hoc или версия TestFlight): для версии App Store, имя папки определяется данными, предоставленными App Store, в то время как для версии, отличной от App Store, оно рассчитывается на основе идентификатора пакета приложения.
Это означает, что он будет работать в вашей среде разработки и производства, если вы не перепутаете их во время тестирования.
Ссылка: документация Apple