- PVSM.RU - https://www.pvsm.ru -
Казалось бы простая задача добавления атрибута(ов) в модель данных CoreData может обернуться проблемами если в приложении используется синхронизация между устройствами через iCloud. В этом случае необходимо провести так называемую lightweight миграцию прежней базы данных в базу данных с новой моделью иначе синхронизация перестанет работать, что чревато в дальнейшем потерей данных при их восстановлении из iCloud. Здесь предлагается пошаговая инструкция как это сделать легко и безопасно на примере моего приложения для учета финансов [1], которым ежедневно пользуется несколько тысяч пользователей, поэтому к сохранности данных подход должен быть серьезный
Итак, поехали!
Для этого в Xcode выделяем вашу модель (в мем случае это Debts.xcdatamodeld) и в верхнем меню Edit выбираем Add Model Version...

Выделяем свежесозданный файл новой модели в Xcode слева

и добавляем нужные нам атрибуты

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

после этого должна появиться зеленая галочка на новой версии модели в Xcode слева

Чтобы все работало корректно необходимо инициализировать новую схему в CloudKit Database. соответствующую вашей новой модели. Для этого необходимо добавить эти две строчки кода в инициализатор вашего NSPersistentCloudKitContainer

Теперь запустите приложение на реальном устройстве под вашим AppleID разработчика (возможно получится и на симуляторе, но я не пробовал) дождитесь пока приложение запустится и полностью успокоится консоль в Xcode, после чего удалите приложение с устройства и закомментите эти две строчки в коде.

Наша новая схема сейчас существует только в Development, чтобы она заработала в Production необходимо ее там развернуть. Для этого вам нужно войти в ваш CloudKit Database

и нажать Deploy Schema Changes слева внизу.

Должно появиться что-то вроде этого. Если выйдут нули, значит что-то вы сделали не так выше.
Все. Теперь можно использовать новые атрибуты в коде и отправлять приложение в AppStore.
После появления новой версии в AppStore я проверил синхронизацию следующим образом.
приложения на iPhone и iPad скаченные ранее из AppStore оба не обновлены - синхронизация работает как раньше, без проблем
приложения на iPhone обновил, а на iPad нет - синхронизация работает в обе стороны, как и до этого, без проблем
приложения на iPhone и iPad оба обновлены - в начале наблюдалась минутная задержка синхронизации, через минуту и в дальнейшем работает как и раньше почти мгновенно, без проблем.
Здесь [1] можно скачать мое приложение и проверить как работает синхронизация и восстановление данных после удаления приложения или восстановления данных из iCloud на новом устройстве.
Автор: Elis767
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/sinhronizatsiya-danny-h/400492
Ссылки в тексте:
[1] приложения для учета финансов: https://apps.apple.com/bg/app/wheres-money/id1501820564
[2] Источник: https://habr.com/ru/articles/853260/?utm_campaign=853260&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.