Как получить проект по умолчанию с NSPersistentCloudKitContainer и запустить?
Я выполнил те же действия, что и в разделе "Использование базовых данных с CloudKit":
- Новый проект
- Включить Core Data + Cloud Kit
- Добавьте право iCloud/CloudKit + фоновый режим / право удаленных уведомлений.
- В симуляторе iPhone Xr я вошел в учетную запись iCloud, которую создал (а затем подтвердил на icloud.com!), И запустил приложение, создав несколько записей.
- Затем я вошел в ту же учетную запись iCloud в симуляторе iPhone Xs. Я запустил приложение, но записи не были объединены. Создание записей в этом симуляторе также не сливается с симулятором Xr.
Что мне не хватает?
1 ответ
Чтобы увидеть изменения в симуляторах, вы должны выйти из приложения и перезагрузить его (или собрать и запустить).
Имитаторам никогда не удавалось получать удаленные уведомления для запуска синхронизации iCloud, поэтому вам нужно вручную принудительно запустить синхронизацию, но я обнаружил, что синхронизацию нельзя запустить вручную из меню в моей бета-версии Xcode 11 (выдает ошибку).
Эндрю Бэнкрофт (Andrew Bancroft) опубликовал хорошую статью о некоторых других вещах, таких как установка для свойства AutomaticMergesChangesFromParent значения true, но это не имеет значения при использовании симуляторов (РЕДАКТИРОВАТЬ: да, но я не понял, так как просто собирал & бегаю каждый раз).
Сообщение Эндрю: https://www.andrewcbancroft.com/blog/ios-development/data-persistence/getting-started-with-nspersistentcloudkitcontainer/
Я нахожусь в одной лодке, так как я не могу позволить себе установить какое-либо бета-программное обеспечение (кроме XCode), поэтому мне придется придерживаться симуляторов. Но мой опыт преобразования существующего приложения в CloudKit был очень, очень позитивным. Мне просто нужно было сделать три вещи с моим существующим проектом:
- Добавить возможности фонового уведомления и CloudKit
- Убедитесь, что все атрибуты и связи базовых данных являются необязательными (или имеют значение по умолчанию, если ноль)
- Переименуйте NSPersistentContainer в NSPersistentCloudKit Container
...вот и все! Разум взорван.
Все мои вложенные отношения "многие ко многим", кажется, работают идеально.
Мне все еще нужно разобраться, как синхронизировать изображения, которые в настоящее время хранятся в виде JPG, в каталоге пользовательских документов, но я подозреваю, что их нужно будет хранить в базовых данных в виде больших двоичных объектов, чтобы включить преобразование в наборы CKA в фоновом режиме.
У Apple теперь есть пример кода под названием CoreDataCloudKitDemo. Это включает в себя все основные вещи, а также дополнительный код, который обрабатывает изменения, когда они поступают с другого устройства. Вам нужны линии
description.cloudKitContainerOptions = NSPersistentCloudKitContainerOptions( containerIdentifier: "iCloud.com.developerid.databasename")
чтобы ваша локальная база данных перешла в iCloud и создала схему. Вам необходимо использовать панель управления Cloudkit в Интернете, чтобы увидеть схему и т. Д.