Облегченная миграция 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

Другие вопросы по тегам