Вступление
CloudKit — это фреймворк Apple, который был представлен вместе с iOS 8 в 2014 году. Его цель — предоставить простое решение для хранения данных вашего приложения в облаке с помощью iCloud, сделав его доступным для всех устройств. Вот некоторые из ключевых особенностей CloudKit:
- до 1 ПБ хранилища активов (изображения, аудиофайлы и т. д.)
- до 10 ТБ хранилища базы данных (строки, числа, массивы и т. д.)
- аутентификация пользователя iCloud
- уведомления
В этом руководстве я научу вас настраивать CloudKit и взаимодействовать с ним в приложении для iOS, создав образец приложения под названием CloudBug . CloudBug отображает список ошибок с заголовком и описанием, которые хранятся в iCloud с помощью CloudKit.
Требования
Это руководство требует, чтобы вы работали с Xcode 6+ и имели учетную запись разработчика iOS. Вам также необходимо скачать стартовый проект с GitHub .
1. Конфигурация проекта
Первое, что вам нужно сделать после открытия стартового проекта, — это изменить идентификатор и команду целевого комплекта . Выберите проект CloudBug в Навигаторе проектов и выберите цель CloudBug из списка целей.
Измените идентификатор пакета на уникальную строку, используя обратную нотацию службы доменных имен . Далее выберите подходящую команду для вашей учетной записи разработчика.
Откройте вкладку « Возможности » вверху и включите iCloud , переключая переключатель справа. Это покажет настройки iCloud для цели CloudBug .
В настройках iCloud установите флажок CloudKit, чтобы включить CloudKit для цели CloudBug.
Создайте и запустите приложение на физическом устройстве в iOS Simulator, чтобы увидеть, все ли работает без ошибок.
2. Создание типа записи об ошибке
Нажмите кнопку CloudKit Dashboard в нижней части настроек iCloud. Это откроет панель управления CloudKit в вашем браузере. После входа в систему с учетной записью разработчика должна появиться панель управления CloudKit. Прежде чем продолжить, позвольте мне пройтись по пунктам на боковой панели слева.
схема
- Типы записей функционируют аналогично обычному определению класса. Записи создаются как экземпляры классов из этих типов.
- Роли безопасности предоставляют возможность различным пользователям получать доступ к данным по-разному. Например, роль безопасности можно использовать, чтобы разрешить только пользователям уровня администратора чтение и запись данных.
- Типы подписок используются для управления различными подписками, которые есть в вашем приложении, если они были реализованы.
Публичные данные
- Записи пользователей работают так же, как обычные записи, за исключением того, что они специально связаны с типом записей пользователей , который нельзя удалить.
- Зона по умолчанию — это место, где будут храниться все ваши публичные записи и другие данные.
Частные данные
- Зона по умолчанию работает так же, как и общедоступная зона по умолчанию, за исключением того, что она доступна только пользователю, вошедшему в систему в данный момент.
Администратор
- Команда, в которой вы можете просматривать других разработчиков, сотрудничающих над проектом, и редактировать их разрешения.
- Развертывание, где вы можете посмотреть, какие изменения будут внесены в схему элементы, когда ваш проект попадает в производственную среду.
В этом уроке вы сосредоточитесь только на типах записей и общедоступной зоне по умолчанию. Следующим шагом является создание вашего первого типа записи.
Если вы выберете « Типы записей» на боковой панели слева, вы заметите, что тип с именем « Пользователи» уже существует.
Давайте создадим новый тип записи с именем Bug, который будет содержать заголовок и описание. Нажмите кнопку «плюс» вверху, чтобы создать новый тип записи.
Измените имя нового типа записи на Bug и добавьте два атрибута, Title и Description . Создайте оба атрибута типа String, отметив только опцию индекса запроса . Вот как должен выглядеть новый тип записи.
Нажмите Сохранить в правом нижнем углу, чтобы создать тип записи об ошибке.
3. Создание записей в CloudKit Dashboard
Когда вы выбираете Зону по умолчанию в Общедоступных данных , тип записи об ошибке уже должен быть выбран. Создайте новую запись, нажав « Новая запись» или кнопку «плюс» вверху.
Введите все, что вы хотите для описания записи и Поля заголовка .
Нажмите Сохранить в правом нижнем углу, чтобы создать запись. Вы увидите, что вашей записи была присвоена уникальная запись Идентификатор , Дата создания, Дата изменения , Идентификатор созданного и Идентификатор измененного . Независимо от того, на каком типе записи основана запись, она всегда будет иметь эти пять атрибутов.
4. Загрузка записей
Вернитесь к Xcode и откройте MasterViewController.swift . Вверху добавьте оператор импорта для импорта платформы CloudKit.
1
|
import CloudKit
|
Обновите метод viewDidLoad
, добавив следующий фрагмент кода.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
let container = CKContainer.defaultContainer()
let publicData = container.publicCloudDatabase
let query = CKQuery(recordType: «Bug», predicate: NSPredicate(format: «TRUEPREDICATE», argumentArray: nil))
publicData.performQuery(query, inZoneWithID: nil) { results, error in
if error == nil { // There is no error
for bug in results {
let newBug = Bug()
newBug.title = bug[«Title»] as!
newBug.description = bug[«Description»] as!
self.objects.append(newBug)
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.tableView.reloadData()
})
}
}
else {
println(error)
}
}
|
Давайте посмотрим, что происходит в этом фрагменте кода.
- Сначала мы получаем ссылку на контейнер по умолчанию для вашего приложения. Этот контейнер содержит типы записей и записи, которые мы создали на информационной панели CloudKit. Вы можете создать больше контейнеров с уникальным идентификатором в Target Inspector> Capabilities .
- Во-вторых, мы получаем ссылку на публичную базу данных контейнера. Формат такой же для частной базы данных.
- Затем мы создаем запрос для типа записи об
NSPredicate
экземплярNSPredicate
. Этот предикат можно использовать для фильтрации результатов запроса, например, только выборки записей, созданных или измененных после определенной даты. Для этого примера мы выбираем каждую запись типа Bug . - Далее мы сообщаем базе данных выполнить запрос, который запускает асинхронный запрос. Когда запрос завершен, блок завершения выполняется, передавая нам массив
results
и объектerror
. - Если объект
error
равенnil
, мы перебираем элементы массиваresults
и создаем локальный экземплярBug
для каждой записи. Каждый экземплярBug
добавляется в источник данных табличного представления, а табличное представление перезагружается в главном потоке.
Создайте и запустите ваше приложение, чтобы увидеть, загружена ли запись, созданная нами на панели мониторинга CloudKit, в CloudBug.
Если вы видите ошибку в консоли Xcode, похожую на приведенную ниже, убедитесь, что вы вошли в правильную учетную запись iCloud на своем тестовом устройстве. Это также верно, если вы используете CloudBug в iOS Simulator.
Нажатие на ошибку в табличном представлении должно представить контроллер подробного представления с описанием ошибки.
5. Создание записей
В то время как загрузка данных из iCloud через CloudKit может быть очень полезной, CloudBug также нужна возможность, позволяющая пользователям создавать новые записи. В MasterViewController.swift добавьте следующий фрагмент кода в метод receiveBug(_:)
.
01
02
03
04
05
06
07
08
09
10
11
|
let container = CKContainer.defaultContainer()
let publicData = container.publicCloudDatabase
let record = CKRecord(recordType: «Bug»)
record.setValue(bug.title, forKey: «Title»)
record.setValue(bug.description, forKey: «Description»)
publicData.saveRecord(record, completionHandler: { record, error in
if error != nil {
println(error)
}
})
|
Первые две строки должны быть знакомы. Мы получаем ссылку на контейнер по умолчанию и публичную базу данных. Мы создаем экземпляр CKRecord
, устанавливаем значения для ключей Title и Description и сохраняем запись в iCloud.
Обратите внимание, что объект record
возвращаемый из iCloud в обработчике завершения saveRecord(_:completionHandler:)
включает в себя значения, которые вы устанавливаете вручную, а также пять атрибутов по умолчанию, которые мы видели ранее на панели мониторинга CloudKit.
Создайте и запустите свое приложение, а также опубликуйте новую ошибку, нажав кнопку «плюс» в правом верхнем углу, заполнив поля заголовка и описания. Нажмите « Опубликовать» и сохраните новую запись в iCloud в базе данных CloudKit.
Еще раз зайдите на панель мониторинга CloudKit и перейдите в зону по умолчанию в разделе « Общие данные» . Если все прошло хорошо, Вы должны увидеть две записи об ошибках в базе данных.
6. Удаление записей
Давайте закончим этот урок, позволив пользователям удалять ошибки. Добавьте следующий фрагмент кода в tableView(_:commitEditingStyle:forRowAtIndexPath:)
метод чуть выше objects.removeAtIndex(indexPath.row)
.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
let container = CKContainer.defaultContainer()
let publicData = container.publicCloudDatabase
let bug = self.objects[indexPath.row]
let query = CKQuery(recordType: «Bug», predicate: NSPredicate(format: «(Title == %@) AND (Description == %@)», argumentArray: [bug.title, bug.description]))
publicData.performQuery(query, inZoneWithID: nil, completionHandler: { results, error in
if error == nil {
if results.count > 0 {
let record: CKRecord!
println(record)
publicData.deleteRecordWithID(record.recordID, completionHandler: { recordID, error in
if error != nil {
println(error)
}
})
}
}
else {
println(error)
}
})
|
Чтобы удалить запись, мы создаем запрос, как мы делали ранее. Однако для удаления записи мы создаем предикат, соответствующий заголовку и описанию ошибки. Обработчик завершения возвращает результаты запроса, который мы используем для удаления соответствующей записи из общедоступной базы данных.
Создайте и запустите приложение и удалите одну из ошибок, проведя вправо или нажав кнопку « Изменить» .
Еще раз зайдите на панель управления CloudKit, чтобы увидеть, действительно ли выбранная вами ошибка была удалена.
Вывод
В этом руководстве вы создали свое первое приложение CloudKit, связав его с iCloud. Вы узнали, как создавать типы записей и записи на панели инструментов CloudKit и как загружать их в свое приложение. Помимо добавления и удаления записей в инструментальной панели CloudKit, мы также рассмотрели добавление и удаление записей с использованием инфраструктуры CloudKit. Если у вас есть какие-либо комментарии или вопросы, оставьте их в комментариях ниже.