Разработка для CloudKit

CloudKit является способом переместить структурированные данные между Вашим приложением и iCloud. Принимая во внимание, что основанное на документе хранение воздействует на файлы, CloudKit воздействует на записи. Запись является словарем пар ключ/значение с каждым ключом, представляющим поле записи. Значение каждого поля обычно является простым типом данных, таким как строка, число или дата, но можно также хранить все файлы или произвольные блоки данных. Поля могут также сохранить ссылки на другие записи, позволив определить отношения между записями.

Когда переместить данные от Вашего приложения до iCloud и от iCloud до Вашего приложения, с CloudKit Вы решаете. Несмотря на то, что CloudKit предоставляет услуги для информирования Вас, когда изменения происходят, необходимо все еще выбрать те изменения явно. Поскольку Вы решаете, когда выбрать и сохранить данные, Вы ответственны за обеспечение, что данные выбираются в правильные времена и в правильном порядке, и Вы ответственны за обработку любых возникающих ошибок.

Для получения дальнейшей информации о классах платформы CloudKit, посмотрите Ссылку Платформы CloudKit. Поскольку, как включить CloudKit в Вашем проекте XCode и доступе Инструментальная панель CloudKit, считайте Быстрый запуск CloudKit.

Включение CloudKit

Прежде чем можно будет использовать CloudKit, приложение должно включить возможность iCloud приложения, как описано в Запрашивают Доступ к iCloud Используя Возможности XCode. Конфигурирование службы CloudKit добавляет надлежащие права на Ваше приложение и конфигурирует Ваше приложение с контейнером по умолчанию на основе его пакета ID.

Контейнеры и базы данных

Как другие технологии iCloud, CloudKit организует данные с помощью контейнеров. Контейнер служит локальным представлением хранения iCloud Вашего приложения. При запуске проекта Вы запрашиваете права на каждый из их контейнеров. Во время выполнения можно выполнить задачи против определенного контейнера с помощью a CKContainer объект.

Каждый контейнер разделен на общедоступные и частные базы данных, каждая из которых представлена a CKDatabase объект. Любые данные, записанные в частную базу данных, видимы только текущему пользователю и хранятся в учетной записи iCloud того пользователя. Данные, записанные в общедоступную базу данных, видимы всем пользователям приложения и хранятся в хранении iCloud приложения.

Для рабочего приложения CloudKit общедоступная база данных контейнера всегда читаема, даже когда нет никакой активной учетной записи iCloud, сконфигурированной на устройстве. Сохранение записей на общедоступную базу данных и доступ к частной базе данных всегда требуют присутствия активной учетной записи iCloud на устройстве. Если Ваше приложение действительно больше, чем считывает данные из общедоступной базы данных, проверьте на активную учетную запись iCloud при запуске и скорректируйте свой интерфейс соответственно. Например, если никакая учетная запись iCloud не доступна, отключите любой UI для сохранения записей и уведомьте пользователя, что сохранение записей требует активной учетной записи iCloud.

Для получения информации о том, как проверить на доступность iCloud, считают и реагируют на изменения к текущему счету, видят, Подготавливают Ваше Приложение для Использования iCloud.

Управление данными в CloudKit

В общедоступных и частных базах данных Вы организуете данные своего приложения с помощью записей и используете их для перемещения данных между приложением и iCloud. Записи являются словарями пар ключ/значение, представленных CKRecord класс. Каждая запись имеет тип записи, который является строкой, которую Вы используете для дифференциации между записями с различными типами информации. Каждая пара ключ/значение представляет поле записи и что соответствующее значение поля. Поля могут содержать простые типы, такие как строки, числа, и даты или более составные типы, такие как расположения, ссылки на другие записи или все файлы.

Приложения должны выбрать записи, они должны выполнить и сохранить изменения в тех записях явно. Ничто не автоматически. Можно инициировать выборку и сохранить операции с помощью или объектов операции или удобных методов CKContainer и CKDatabase классы. Объекты операции могут воздействовать на многократные записи сразу и могут быть сконфигурированы с зависимостями, чтобы гарантировать, что записи сохраняются в надлежащем порядке. Объекты операции основываются NSOperation класс и может быть интегрирован с другими потоками операций Вашего приложения легко. Операции выборки требуют, чтобы Вы уже знали ID записи, которую Вы хотите.

Если Вы не знаете ID записи, CloudKit предоставляет возможность для поиска записей с помощью предиката. Основанный на предикате поиск позволяет Вам определить местоположение записей, поля которых содержат определенные значения. Вы используете этот предикат с a CKQuery объект указать и критерии поиска и опции сортировки для возвращенных записей. Вы тогда выполняете запрос с помощью a CKQueryOperation объект.

Когда определенные части базы данных изменяются, другой параметр поиска должен позволить серверу уведомить Вас. Подписки действуют как персистентный запрос на сервер. Вы конфигурируете a CKSubscription объект во многом как Вы делает a CKQuery объект, но вместо того, чтобы выполнить тот запрос явно, Вы сохраняете подписку к серверу только один раз. После этого сервер отправляет уведомления нажатия Вашему приложению каждый раз, когда изменение происходит, который соответствует Ваши критерии поиска. Например, можно использовать подписки, чтобы обнаружить создание или удаление записей или обнаружить когда поле записи, измененной на определенное значение. После получения уведомления нажатия от сервера можно выбрать измененную запись и обновить приложение.

Для получения дальнейшей информации о том, как использовать записи, объекты операции и другие классы платформы CloudKit, видят Ссылку Платформы CloudKit.

Среды разработки и продуктивные среды

CloudKit обеспечивает отдельную разработку и продуктивные среды для Ваших типов записи и данных. Среда разработки является более гибкой средой, которая доступна только элементам Вашей группы разработчиков. Когда Ваше приложение добавляет новое поле к записи и сохраняет ту запись в среде разработки, сервер обновляет информацию о схеме автоматически. Можно использовать эту функцию для внесения изменений в схему во время разработки, экономящей время. Один протест состоит в том, что после добавления поля к записи тип данных, связанный с тем полем, не может быть изменен программно. Для изменения типа поля необходимо удалить поле в Инструментальной панели CloudKit и добавить его снова с новым типом.

До развертывания Вашего приложения Вы перемещаете свою схему и данные к использованию продуктивной среды Инструментальная панель CloudKit. При выполнении против продуктивной среды сервер препятствует тому, чтобы приложение изменило схему программно. Вы можете все еще внести изменения с Инструментальной панелью CloudKit, но пытаетесь добавить поля к записи в результате продуктивной среды по ошибкам.

Во время разработки XCode автоматически указывает на Ваше приложение на среду разработки. Прежде чем Вы поставите свое приложение, сконфигурируете Ваше приложение с помощью потока операций распределения. В этом потоке операций XCode позволяет Вам выбрать, хотите ли Вы предназначаться для среды разработки или продуктивной среды, и добавляет com.apple.developer.icloud-container-environment право на Ваше приложение со значением Вы выбрали. До поставки, убедиться сконфигурировать Ваше приложение для продуктивной среды. Приложения, предназначающиеся для среды разработки, будут отклонены App Store.

Основной поток операций CloudKit

В Вашем приложении Вы используете CloudKit, чтобы получить данные от iCloud, внести изменения и записать те изменения обратно. Процесс для получения данных от базы данных CloudKit следующие:

  1. Доберитесь CKContainer объект, соответствующий контейнеру iCloud, к данным которого Вы хотите получить доступ.

  2. Доберитесь CKDatabase объект, соответствующий базе данных (общедоступный или частный), который содержит записи.

  3. Идентифицируйте записи, которые Вы хотите выбрать:

    • Если Вы уже знаете IDs записей, Вы хотите, создаете a CKFetchRecordsOperation объект получить их.

    • Если Вы не знаете рекордный IDs, создайте a CKQuery объект с критериями поиска, соответствующий записи, которые Вы хотите. Тогда создайте a CKQueryOperation объект выполнить тот запрос.

  4. Присвойте блоки надлежащим обработчикам завершения Вашего объекта операции. Используйте свои блоки для обработки результатов.

  5. Передайте свой объект операции addOperation: метод Вашего CKDatabase объект. Вызов этого метода ставит в очередь работу для выполнения. Объект операции тогда поставляет результаты асинхронно к Вашим блокам завершения.

Для сохранения записи, которую Вы создали или изменили создайте a CKModifyRecordsOperation объект с записью, которую Вы хотите сохранить. Выполните тот объект операции таким же образом, Вы сделали при выборке записей путем вызова addOperation: метод надлежащего CKDatabase объект. Как с операциями выборки, работа сохранения выполняется асинхронно и сообщает о состоянии блокам обработчика завершения, которые Вы указываете. Используйте те блоки, чтобы обработать результаты и управлять любыми ошибками.

Это - Ваша ответственность решить, когда выбрать записи, Вам нужно и когда сохранить Ваши изменения; Ваша роль также включает обеспечение законности данных, которые Вы сохраняете. CloudKit сохраняет каждую запись атомарно. Если необходимо сохранить группу записей в единственной атомарной транзакции, сохранить их к пользовательской зоне, которая можно создать использование CKRecordZone класс. Зоны являются полезным способом расположить дискретную группу записей, но поддерживаются только в частных базах данных. Зоны не могут создаваемый в общедоступной базе данных.

Подсказки для определения типов записи Вашего приложения

При определении типов записи приложения это помогает понять, как Вы используете те типы записи в своем приложении. Вот некоторые подсказки, чтобы помочь Вам сделать лучший выбор во время процесса проектирования:

Соответствуя требованиям завтрашнего дня Ваши записи

Поскольку Вы разрабатываете типы записи для своего приложения, удостоверьтесь, что те записи удовлетворяют Ваши потребности, но не ограничивают Вас во внесении изменений в будущем. Просто добавить новые поля к записи, однако, поле не может быть удалено, или его типы данных изменяются после развертывания записей на продуктивную среду. Существуют некоторые способы, которыми можно сделать обновление приложения проще в будущем: