iOS
April 17

Чиним синхронизацию Swift Data

В моем iOS-приложении для подсчета дней используется Swift Data и в проекте все настроено для автоматической синхронизации данных между всеми девайсами пользователя в iCloud. Сегодня я починил эту синхронизацию (она давно не работала).

Проблемный сценарий

На одном девайсе создаю запись в приложении, жду, сворачиваю/разворачиваю приложение, проверяю на другом девайсе через минуту - там эта запись не появляется.

Решение

Открываем https://icloud.developer.apple.com/

Жмем CloudKit Database
Выбираем справа сверху настроенный для приложения контейнер и вариант Production
Открываем логи

Находим запись с ошибкой, например так:

Фильтруем по OverallStatus = USER_ERROR и жмем справа синюю кнопку Query

Проверяем схему (типы записей) в development и production

Жмем сюда для development и production по очереди, чтобы убедиться в наличии нестыковок

Нестыковки найти очень легко: в моем случае в production-схеме буквально не было нужного типа записи с полями из iOS-приложения.

Вот как у меня было в прод-схеме - только один тип записи "Users"

Если найдены нестыковки, и development-схема содержит более актуальные данные, нужно ... опубликовать эти изменения в прод.

Вот как у меня было в дев-схеме (есть нужный мне тип записи "CD_Item"), и тут же выделил слева внизу кнопку для публикации изменений
Перед деплоем можно посмотреть изменения - тут в общем все поля моей модели данных, которая используется в "Счётчике дней" на iOS

После нажатия "Deploy" можно подождать пару минут и повторить тест на проблемном сценарии. У меня проблема была решена через 2 минуты после деплоя актуальной схемы в прод.

Заключение

Когда я в первый раз настраивал Swift Data, то вообще не заглядывал в консоль icloud.developer, не проверял ничего связанного со схемами, и даже статей на эту тему не искал и не читал. Оказалось, настроить синхронизацию с облаком несложно, нужно только знать как это делается 😅

Спасибо интернету! И нейросетям 😉