Как получить проект по умолчанию с NSPersistentCloudKitContainer и запустить?

Я выполнил те же действия, что и в разделе "Использование базовых данных с CloudKit":

  1. Новый проект
  2. Включить Core Data + Cloud Kit
  3. Добавьте право iCloud/CloudKit + фоновый режим / право удаленных уведомлений.
  4. В симуляторе iPhone Xr я вошел в учетную запись iCloud, которую создал (а затем подтвердил на icloud.com!), И запустил приложение, создав несколько записей.
  5. Затем я вошел в ту же учетную запись 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 в Интернете, чтобы увидеть схему и т. Д.

Другие вопросы по тегам