Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 Контент вільний від AI. Цей пост на 100% написаний людиною, як і все на моєму блозі. Насолоджуйтесь!

28.04.2024

Синхронізація бази через iCloud: магії тут занадто


По-перше, це мій застосунок для iOS, але запущений на macOS. SwiftUI! 🧙 По друге, дані в ньому зʼявилися з iCloud.

Повернувся до розробки таймтрекера. Взагалі я сьогодні нарешті доробив надійний експорт та імпорт, бо в застосунку сидять мої реальні дані, та страшно було робити структурні зміни. Проте там нічого цікавого, тому вирішив також налаштувати синхронізацію бази, що також розблокує версію для macOS (а версію для macOS хотілося б мати хоча б для того, щоб там зʼявлялися пінги, коли сидиш за компʼютером.) Взагалі, синхронізація бази через iCloud називається CloudKit та є потужною перевагою платформи Apple.

Я вам запропоную дві інструкції. Перша — від Apple - розповідає про якісь дикі речі, які не стикуються з кодом ініціалізації, який генерується із застосунком. Друга — від популярного блогу — каже що “it just works”, та коду взагалі не потрібно.

Де ж правда? Правда в тому, що замість синхронізації в логах була помилка Invalid bundle ID for container; питань на форумах про це вистачає, а розвʼязки є варіантами тропу “спробуйте видалити та створити заново”.

Тут випливає, певно, найнеприємніший аспект розробки для Apple: надто багато аспектів приховані або абстраговані. Наприклад, оця помилка ніби свідчить про відсутність доступів у застосунку до бази; проте доступи зазвичай повинен видати сам XCode. А сидять доступи в сервісі “Certificates, Identifiers & Profiles” у розробницькій панелі керування. Причому ззовні все всюди написано правильно. А всередині щось розʼїхалось, та щоб це виправити немає краще шляху, ніж щось (ID застосунку, профіль розгортування, ID контейнер тощо) видалити та спробувати створити наново.

Зате зрештою все розвʼязалося, синхронізація працює, дані є. Дійсно не треба було ані дописувати код, ані налаштовувати базу — все автоматично-магічно. До речі, архітектура iCloud дуже цікава, ось стаття.