TGViewer
Мобильный трудоголик Мобильный трудоголик @hardworkerit · 1.64K subscribers
Post #274 1.3K
🔢 Core Data миграции: Как безопасно менять модель данных.

Всем привет! Одна из самых критичных задач в iOS-разработке: изменение структуры базы данных без потери пользовательских данных. Представьте: вы выпускаете обновление приложения, а у пользователей пропадают все сохраненные данные. Это катастрофа! К счастью, Core Data предлагает элегантное решение: легкую миграцию. Сейчас разберем, как это работает.


Что такое легкая миграция и когда она возможна:

Легкая миграция - это автоматический процесс, при котором Core Data самостоятельно определяет различия между старой и новой версией модели данных и применяет необходимые преобразования.


Что не поддерживается в легкой миграции:

🔵Изменение типа существующего атрибута (например, String в Int).

🔵Сложные трансформации данных.

🔵Изменение иерархии наследования сущностей.


Использование легкой миграции:

Для успешного автоматического обновления модели данных необходимо выполнить три последовательных действия:

🔵Активация механизма легкой миграции.

🔵Создание новой версии модели данных.

🔵Внесение изменений в обновленную модель.


Рассмотрим каждый этап подробно:

Активация механизма миграции:

При использовании современного подхода с NSPersistentContainer дополнительная настройка не требуется, система автоматически включает поддержку легких миграций.

Если же вы работаете с собственной реализацией стека Core Data, потребуется явно указать необходимые опции при подключении хранилища:


let persistentStoreCoordinator = NSPersistentStoreCoordinator(
managedObjectModel: dataModel
)

let migrationOptions: [AnyHashable: Any] = [
NSMigratePersistentStoresAutomaticallyOption: true,
NSInferMappingModelAutomaticallyOption: true
]

do {
try persistentStoreCoordinator.addPersistentStore(
ofType: NSSQLiteStoreType,
configurationName: nil,
at: databaseURL,
options: migrationOptions
)
} catch {
// Обработка неудачной миграции
}


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


Создание новой версии модели:

Для корректной миграции системе необходимо видеть как исходную, так и целевую версию модели данных.

Важное правило: никогда не редактируйте непосредственно существующий файл .xcdatamodeld после публикации приложения. Вместо этого:

🔵В Xcode выберите вашу модель данных.

🔵Перейдите в меню Editor -> Add Model Version.

🔵Система создаст копию модели с новым именем.

🔵В панели File Inspector установите созданную версию как текущую (Current).

Теперь можно безопасно вносить изменения, не затрагивая структуру, с которой работают пользователи текущей версии приложения.


Редактирование обновленной модели:

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

🔵Добавление или удаление сущностей, их атрибутов или связей.

🔵Переименование элементов через указание Renaming Identifier в Data Model inspector.

🔵Изменение обязательности атрибутов (с обязательного на необязательный и наоборот) при наличии значения по умолчанию.

🔵Изменение типа связи (например, с «один-к-одному» на «один-ко-многим»).


Проверка возможности автоматической миграции:


let canMigrateAutomatically = try? NSMappingModel.inferredMappingModel(
forSourceModel: previousModelVersion,
destinationModel: updatedModelVersion
) != nil

if canMigrateAutomatically {
// Легкая миграция возможна
} else {
// Требуется ручная (тяжелая) миграция
}


Если метод возвращает nil, это означает, что Core Data не может самостоятельно сопоставить версии моделей.


🔗 Ссылка на подробную статью


💡 Вывод:

Легкая миграция Core Data - мощный инструмент, который избавляет разработчиков от ручного написания сложных скриптов миграции. При правильном использовании (создание новых версий модели, а не изменение существующих) система надежно перенесет данные пользователей между версиями приложения.


➡️ Подписаться на канал
Мобильный трудоголик
  • 👍 10
  • 🔥 5
  • 🙏 1
  • 👀 1
More from @hardworkerit
  1. Oct 6, 2026🔢 Swift 6.4: новая диагностика ретейн циклов. В Swift 6.4 появилась новая диагностика, ко…
  2. Oct 4, 2026🔢 SwiftUI: определение угла раскрытия iPhone Duo. В iOS 27.1 появился модификатор .onHing…
  3. Oct 2, 2026👣 Архитекторы, тестировщики и кодеры. Создаем мультиагентную команду Разработка с ИИ-аген…
  4. Oct 1, 2026🔢 Работа с Picture-in-Picture в iOS. Picture-in-Picture - системная функция iOS, которая…
  5. Sep 29, 2026🔢 Управление тулбарами на iPhone Duo. На iPhone Duo элементы управления навигацией, дейст…
  6. Sep 27, 2026🔢 Новые возможности Hashable в Swift 6.4 В Swift 6.4 добавили Hashable для нескольких тип…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →