Статьи

Работа с iCloud: Введение

Синхронизация данных приложения между устройствами является сложной и сложной задачей. К счастью, именно поэтому Apple создала iCloud. Из этой серии Tuts + Premium вы узнаете, как работает iCloud и как ваши приложения могут беспрепятственно обмениваться данными между несколькими устройствами.


  1. Работа с iCloud: Введение
  2. Работа с iCloud: хранилище ключей-значений
  3. Работа с iCloud: Хранение документов
  4. Работа с iCloud: интеграция основных данных

Одной из самых рекламируемых функций iOS 5 был iCloud. Несмотря на то, что iCloud имеет много общего с сервисом Apple MobileMe, iCloud намного больше, чем когда-либо был MobileMe. Как и многие другие компании, Apple осознала, что облако является обязательным компонентом мобильного пространства. Некоторые скептики видят в iCloud вторую попытку Apple создать сервис синхронизации, но iCloud — более амбициозное предприятие с огромным потенциалом.


Это первая статья из серии о iCloud Storage. Прежде чем погрузиться в iCloud Storage, я хотел бы уделить минуту краткому обзору того, что вы можете ожидать от этой серии.

В этом учебнике не будет примеров кода. Моя цель этого руководства — познакомить вас с iCloud на концептуальном уровне и продемонстрировать, как iCloud может помочь вам как разработчику.

Во второй части этой серии я покажу, как включить хранилище iCloud для приложения. Мы также создадим наше первое приложение с поддержкой iCloud, используя iCloud Key-Value Storage.

Последние две части будут посвящены хранилищу документов iCloud. Третья часть будет посвящена новому классу UIDocument и обсудит, как его использование может сделать вашу жизнь проще. Часть четвертая будет посвящена UIManagedDocument, конкретному подклассу UIDocument, интегрированному с Core Data. Благодаря тесной интеграции Core Data и iCloud, вы увидите, что ваше приложение может получить огромную выгоду от использования как Core Data, так и iCloud в ваших приложениях!


Для потребителя iCloud — это бесплатный сервис, который хранит данные пользователя в облаке, а данные — это музыка, фотографии, электронная почта, календари, контакты и т. Д. Данные, хранящиеся в iCloud, доступны для любого устройства, настроенного с учетной записью iCloud пользователя. (например, MacBook, iPhone, iPad). В то время как у MobileMe всегда была довольно высокая цена, Apple с самого начала сделала iCloud бесплатной. Есть причина, по которой Apple приняла это решение. Для успеха iCloud важно, чтобы его использовали как можно больше людей. У Apple большие планы на iCloud, и со временем она должна стать еще более важным компонентом операционных систем iOS и OS X.


Наиболее полезным компонентом для разработчиков является то, что Apple называет iCloud Storage. Это часть iCloud, которая предназначена для данных приложений.

Вместе с iCloud Apple представила набор API-интерфейсов, позволяющих разработчикам использовать iCloud Storage в своих собственных приложениях. Apple подчеркивает, что их собственные приложения, такие как набор приложений iWork, используют одни и те же API для взаимодействия с iCloud. API iCloud прост, прост в использовании и удивительно гибок. Ясно, что Apple вложила много усилий, усилий и ресурсов в создание iCloud для интеграции со сторонними разработчиками.


Синхронизировать данные приложений на разных устройствах нелегко (просто спросите Apple, Dropbox или Google!). Для этого требуется не только надежная внутренняя инфраструктура, но и одна из самых сложных задач — выполнение самой синхронизации данных. Многочисленные сценарии могут привести к потере или повреждению данных. В частности, обработка конфликтов является одним из наиболее сложных аспектов синхронизации данных. Чем сложнее модель данных, тем более сложным должен быть алгоритм конфликта для обработки всех граничных случаев.

Вместо создания отдельной инфраструктуры iCloud, Apple расширила некоторые из существующих структур с помощью API-интерфейсов iCloud. NSFileManager — прекрасный пример класса, который получил значительную поддержку API для интеграции iCloud.

Одним из наиболее заметных преимуществ iCloud является его бесшовная интеграция с iOS. На каждом устройстве iOS работает демон iCloud в фоновом режиме. Этот демон отслеживает изменения в iCloud, даже если ваше приложение не запущено.

Другая оптимизация iCloud — синхронизация между равноправными узлами. Как и Dropbox, iCloud будет синхронизировать изменения по локальной сети, если обнаружит, что устройство с той же учетной записью iCloud находится в той же локальной сети.

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


Если вы думаете о внедрении iCloud в свое приложение, я предлагаю вам уделить время, чтобы лучше понять внутреннюю работу iCloud и осознать его ограничения. Приложения с поддержкой iCloud имеют изолированную программную среду iCloud, очень похожую на изолированную программную среду приложения на iOS. Песочница имеет ряд явных преимуществ безопасности. Однако безопасность обходится дорого. Недостатком изолированной программной среды iCloud является то, что доступ к данным ваших приложений из других установленных приложений является обременительным.

Разработчики, впервые знакомые с iCloud, могут подумать, что это черный ящик, в котором Apple решает, что происходит с вашими данными и как ими управляют. Это не правда, однако. Всякий раз, когда документ изменяется на устройстве A, изменения передаются в iCloud. Затем iCloud уведомляет любые дополнительные устройства, например устройства B и C, об этих изменениях. Ваше приложение решает, как оно будет реагировать при внесении изменений. То же самое относится и к разрешению конфликтов. Как я упоминал ранее, обработка конфликтов является одним из наиболее сложных аспектов синхронизации данных. iCloud сообщит вам, когда произошли изменения и возникли ли конфликты. Это зависит от вас, чтобы реализовать алгоритм конфликта для обработки любых конфликтов, которые могут возникнуть.

Стоит также отметить, что Core Data тесно интегрирована с iCloud. С момента своего появления на платформе Mac много лет назад, Core Data стала удивительно мощной средой. Его интеграция с iCloud делает его еще более привлекательным. Например, управление конфликтами изящно обрабатывается Core Data благодаря тесной интеграции с iCloud.


Существует два способа использования хранилища iCloud в приложении: (1) хранилище ключей-значений iCloud и (2) хранилище документов iCloud. Оба ориентированы на конкретные случаи использования.

iCloud Key-Value Storage имеет много общего с NSUserDefaults и работает аналогичным образом. С iCloud Key-Value Storage ваше приложение может хранить пары ключ-значение, так же, как вы можете с NSUserDefaults или простым NSDictionary. Разница в том, что эти пары ключ-значение существуют локально (на устройстве) и в iCloud. Через определенные промежутки времени локальные пары ключ-значение синхронизируются с iCloud.

Синхронизация пользовательских настроек между устройствами является возможным вариантом использования iCloud Key-Value Storage. Он идеально подходит для приложений, обрабатывающих ограниченный объем данных. Другими словами, приложения, которые не загружают данные и хранят только небольшие объемы информации, лучше всего подходят для хранения ключей-значений.

Хранилище ключей-значений iCloud имеет ряд ограничений. Первое ограничение заключается в том, что могут храниться только типы данных списка свойств (NSString, NSNumber, NSDate, NSData и т. Д.). Пользовательские объекты модели должны быть сериализованы, прежде чем они могут быть сохранены с использованием хранилища ключей-значений iCloud.

Второе ограничение связано с объемом дискового пространства, выделенного для хранилища ключей-значений. Каждое приложение может хранить 1 МБ или 1024 пары ключ-значение. Как я упоминал ранее, хранилище ключей не подходит для приложений, интенсивно использующих данные.

Основным преимуществом хранилища Key-Value является простота использования. Его чрезвычайно легко настроить и использовать в вашем приложении, что требует очень ограниченного времени на разработку.

Как следует из названия, этот тип хранилища предназначен для приложений на основе документов. Хранение документов iCloud можно использовать для хранения файлов, а также для работы с пакетами.

Одним из преимуществ модели хранения документов iCloud является то, что пространство, доступное для вашего приложения, ограничено только емкостью учетной записи iCloud пользователя.

Эти два типа хранилища iCloud очень разные, и не должно быть трудным решить, какой тип наиболее подходит для вашего приложения.


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

Приложение по умолчанию не настроено на использование iCloud. Чтобы включить iCloud, войдите на портал обеспечения под своей учетной записью разработчика и включите iCloud для своего приложения на портале идентификаторов приложений. Это все, что вам нужно сделать для предоставления iCloud для использования в вашем приложении.


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



Если вас смущают некоторые из концепций iCloud, которые я обсуждал, возможно, вы захотите следить за следующей версией этой серии Tuts + Premium. В следующий раз я проведу вас через процесс настройки приложения с поддержкой iCloud, и мы создадим приложение, которое использует хранилище ключей-значений iCloud для синхронизации данных пользователя на нескольких устройствах. Будьте на связи!