Простая миграция основных данных на ранних этапах разработки, когда потеря данных ожидается и приемлема

Когда приложение Core Data находится на ранней стадии разработки, его модель управляемых объектов часто находится в постоянном движении. Для каждой сборки новые управляемые объекты и свойства добавляются или удаляются из модели.

При изменении модели управляемых объектов приложение завершит работу при следующем запуске с ошибкой:

Модель, используемая для открытия магазина, несовместима с моделью, используемой для создания магазина.

Общий совет в этой ситуации - удалить приложение с вашего устройства / симулятора и перезапустить.

Это отлично работает для разработчиков, использующих Xcode, но раздражает нетехнических заинтересованных сторон, вовлеченных в процесс выпуска. Было бы гораздо предпочтительнее не объяснять руководителю или команде QA, что они должны удалить приложение перед установкой этого обновления из TestFlight. Или к полевым ошибкам, вызванным этой проблемой.

Как только модели будут доработаны, мы реализуем настоящую стратегию миграции Core Data.

На этом этапе разработки потеря данных является приемлемой и ожидаемой.

Этот метод будет удален до выпуска приложения.

Какой самый простой, легкий, съемный и отладочный способ "перенести" изменения в модель управляемых объектов между выпусками? Скорее всего, это будет эквивалентно "удалить приложение и перезапустить", но без необходимости вручную удалять приложение.

Это должно обрабатывать все изменения в стеке основных данных, включая добавление и удаление управляемых объектов и свойств.

2 ответа

В этом сценарии я проверил бы совместимость с текущей моделью, а затем удалил бы базу данных SQLite, если бы потребовалась миграция.

Рассмотрите возможность использования (в Objective-C)

// error, sourceStoreURL, theManagedObjectModel are valid

NSDictionary *storeMetadata=[NSPersistentStoreCoordinator metadataForPersistentStoreOfType: NSSQLiteStoreType
    URL: sourceStoreURL error: &error];
BOOL storeIsCurrent=[theManagedObjectModel isConfiguration: nil
    compatibleWithStoreMetadata: storeMetadata];
if (!storeIsCurrent)
{
    // Alert user
    // Delete on-disk store via sourceStoreURL
    // (including -wal and -shm files if journaling enabled)
}

Вы можете изменить URL магазина при смене модели.

Вы также можете создавать версии моделей даже для ранней разработки, а затем удалять их все перед отправкой. Это также может помочь вашей команде изучить все тонкости управления версиями модели.

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