Mantener los datos de la aplicación sincronizados entre dispositivos es una tarea compleja y desalentadora. Afortunadamente, esa es exactamente la razón por la que Apple construyó iCloud. En esta serie Tuts + Premium, aprenderá cómo funciona iCloud y cómo sus aplicaciones pueden compartir datos a la perfección en múltiples dispositivos.
Una de las características más promocionadas de iOS 5 ha sido iCloud. Aunque iCloud comparte una serie de similitudes con el servicio MobileMe de Apple, iCloud es mucho más de lo que fue MobileMe. Al igual que muchas otras empresas, Apple se ha dado cuenta de que la nube es un componente indispensable del espacio móvil. Algunos escépticos ven a iCloud como el segundo intento de Apple de crear un servicio de sincronización, pero iCloud es una empresa más ambiciosa con un potencial tremendo.
Este es el primer artículo de una serie sobre iCloud Storage. Antes de sumergirme en iCloud Storage, me gustaría tomarme un minuto para ofrecer una visión general rápida de lo que puede esperar de esta serie..
Este tutorial no tendrá ningún ejemplo de código en él. Mi objetivo para este tutorial es familiarizarte con iCloud en un nivel conceptual y demostrar cómo iCloud puede ayudarte como desarrollador..
En la segunda entrega de esta serie, le mostraré cómo habilitar el almacenamiento de iCloud para una aplicación. También construiremos nuestra primera aplicación habilitada para iCloud haciendo uso de iCloud Key-Value Storage.
Las dos últimas cuotas se centrarán en el almacenamiento de documentos de iCloud. La tercera parte se enfocará en la nueva clase de UIDocument y discutirá cómo usarla puede hacer su vida más fácil. La cuarta parte se centrará en UIManagedDocument, una subclase concreta de UIDocument integrada con Core Data. Gracias a la estrecha integración de Core Data y iCloud, verá que su aplicación puede beneficiarse enormemente de la adopción de Core Data y iCloud en sus aplicaciones.!
Para el consumidor, iCloud es un servicio gratuito que almacena los datos del usuario en la nube, con datos como música, fotos, correo electrónico, calendarios, contactos, etc. Los datos almacenados en iCloud están disponibles para cualquier dispositivo configurado con la cuenta de iCloud del usuario (por ejemplo, Macbooks, iPhones, iPads). Si bien MobileMe siempre ha tenido un precio bastante alto, Apple liberó a iCloud desde el principio. Hay una razón por la que Apple tomó esta decisión. Para que iCloud sea un éxito, es vital que sea utilizado por tantas personas como sea posible. Apple tiene grandes planes para iCloud, y con el tiempo debería convertirse en un componente aún más importante de los sistemas operativos iOS y OS X.
El componente más útil para los desarrolladores es lo que Apple denomina almacenamiento de iCloud. Esta es la parte de iCloud que está diseñada para datos de aplicaciones.
Junto con iCloud, Apple ha introducido una colección de API que permite a los desarrolladores adoptar iCloud Storage en sus propias aplicaciones. Apple enfatiza que sus propias aplicaciones, como el conjunto de aplicaciones iWork, utilizan las mismas API para interactuar con iCloud. La API de iCloud es simple, fácil de usar y sorprendentemente flexible. Está claro que Apple ha puesto mucho pensamiento, esfuerzo y recursos en la creación de iCloud con respecto a la integración de terceros.
Mantener los datos de la aplicación sincronizados en todos los dispositivos no es una tarea fácil (¡solo pregunte a Apple, Dropbox o Google!). No solo requiere una infraestructura de back-end confiable, sino que uno de los desafíos más abrumadores es realizar la sincronización de datos. Numerosos escenarios pueden llevar a la pérdida de datos o la corrupción. El manejo de conflictos, en particular, es uno de los aspectos más desafiantes de la sincronización de datos. Cuanto más complejo sea el modelo de datos, más sofisticado debe ser el algoritmo de conflicto para manejar todos los casos de borde.
En lugar de crear un marco de iCloud separado, Apple ha mejorado algunos de sus marcos existentes con las API de iCloud.. NSFileManager
es un buen ejemplo de una clase que ha ganado un importante soporte de API para la integración de iCloud.
Uno de los beneficios más destacados de iCloud es su perfecta integración con iOS. Cada dispositivo iOS tiene un demonio de iCloud ejecutándose en segundo plano. Este demonio supervisa los cambios en iCloud incluso si su aplicación no se está ejecutando.
Otra optimización de iCloud es la sincronización de igual a igual. Al igual que Dropbox, iCloud sincronizará los cambios en la red local si detecta que un dispositivo con la misma cuenta de iCloud está en la misma red local.
Por último, pero no menos importante, iCloud fue diseñado por una empresa con muchos años de experiencia en la entrega y administración de datos en la nube. La facilidad con que los desarrolladores pueden adoptar iCloud en sus aplicaciones muestra que Apple ha implementado una solución confiable que beneficiará a miles de desarrolladores. Para la gran mayoría de las aplicaciones, ya no valdrá la pena desarrollar una solución de sincronización de datos personalizada.
Si está pensando en adoptar iCloud en su aplicación, le sugiero que se tome el tiempo para comprender bien el funcionamiento interno de iCloud y sea consciente de sus limitaciones. Las aplicaciones habilitadas para iCloud tienen un sandbox de iCloud muy parecido al sandbox que una aplicación tiene en iOS. El sandboxing tiene una serie de claras ventajas de seguridad. Sin embargo, la seguridad tiene un costo. La desventaja de la caja de arena de iCloud es que acceder a los datos de sus aplicaciones desde otras aplicaciones instaladas es engorroso..
Los desarrolladores nuevos en iCloud podrían pensar que es una caja negra con Apple decidiendo qué pasa con sus datos y cómo se administran. Esto no es cierto, sin embargo. Cada vez que un documento cambia en el dispositivo A, los cambios se envían a iCloud. iCloud luego notifica a cualquier dispositivo adicional, digamos dispositivos B y C, de estos cambios. Depende de su aplicación decidir cómo responderá cuando se realicen cambios. Lo mismo es cierto para la resolución de conflictos. Como mencioné anteriormente, el manejo de conflictos es uno de los aspectos más desafiantes de la sincronización de datos. iCloud le notificará cuando se hayan producido cambios y si han surgido conflictos. Depende de usted implementar un algoritmo de conflicto para manejar cualquier conflicto que pueda surgir.
También vale la pena mencionar que Core Data está estrechamente integrado con iCloud. Desde su introducción en la plataforma Mac hace muchos años, Core Data se ha convertido en un marco increíblemente poderoso. Su integración con iCloud lo hace aún más atractivo. La gestión de conflictos, por ejemplo, se maneja con gracia por Core Data gracias a su estrecha integración con iCloud.
Hay dos formas de utilizar iCloud Storage en una aplicación, (1) iCloud Key-Value Storage y (2) iCloud Document Storage. Ambos están dirigidos a casos de uso específicos..
iCloud Key-Value Storage comparte muchas similitudes con NSUserDefaults y funciona de manera similar. Con iCloud Key-Value Storage, su aplicación puede almacenar pares clave-valor, al igual que puede hacerlo con NSUserDefaults o un simple NSDictionary. La diferencia es que estos pares clave-valor existen localmente (en el dispositivo) y en iCloud. A intervalos específicos, los pares clave-valor locales se sincronizan con iCloud.
Mantener la configuración del usuario sincronizada entre dispositivos es un posible caso de uso para iCloud Key-Value Storage. Es perfectamente adecuado para aplicaciones que manejan una cantidad limitada de datos. En otras palabras, las aplicaciones que no tienen gran cantidad de datos y que solo almacenan pequeñas cantidades de información son las más adecuadas para el almacenamiento de Key-Value.
iCloud Key-Value Storage tiene una serie de limitaciones. La primera limitación es que solo se pueden almacenar los tipos de datos de la lista de propiedades (NSString, NSNumber, NSDate, NSData, etc.). Los objetos de modelos personalizados deben ser serializados antes de que puedan almacenarse utilizando el almacenamiento de valor clave de iCloud.
Una segunda limitación está relacionada con la cantidad de espacio en disco asignado a Key-Value Storage. Cada aplicación puede almacenar 1MB o 1,024 pares clave-valor. Como mencioné anteriormente, Key-Value Storage no es una opción para aplicaciones de uso intensivo de datos..
El principal beneficio de Key-Value Storage es la facilidad de uso. Es extremadamente fácil de configurar y utilizar en su aplicación, ya que requiere un tiempo de desarrollo muy limitado..
Como su nombre lo indica, este tipo de almacenamiento está dirigido a aplicaciones basadas en documentos. iCloud Document Storage se puede usar para almacenar archivos y también para hacer frente a los paquetes.
Una de las ventajas del modelo de almacenamiento de documentos de iCloud es que el espacio disponible para su aplicación solo está limitado por la capacidad de la cuenta de iCloud del usuario.
Estos dos tipos de almacenamiento de iCloud son muy diferentes, y no debería ser difícil decidir cuál es el más adecuado para su aplicación.
Configurar una aplicación para usar con iCloud es fácil y requiere solo dos pasos. En la segunda entrega de esta serie, hablaré sobre el proceso de configuración en más detalle, y le guiaré a través del proceso paso a paso. En este artículo, proporcionaré una breve descripción de cada paso..
Una aplicación no está configurada de forma predeterminada para usar iCloud. Para habilitar iCloud, inicie sesión en el portal de aprovisionamiento con su cuenta de desarrollador y habilite iCloud para su aplicación en el portal de ID de aplicaciones. Eso es todo lo que necesita hacer para aprovisionar iCloud para su uso en su aplicación.
El siguiente paso es crear los derechos correctos para su aplicación. Cada aplicación que quiera hacer uso de iCloud debe estar firmada con derechos específicos de iCloud. Los derechos definen qué aplicaciones tienen acceso a los datos de su aplicación y, por lo tanto, estos derechos proporcionan una capa de seguridad para los datos del usuario..
Si está confundido por algunos de los conceptos de iCloud de los que hablé, es posible que desee estar atento a la próxima entrega de esta serie Tuts + Premium. La próxima vez, lo guiaré a través del proceso de configuración de una aplicación habilitada para iCloud, y construiremos una aplicación que adopte el almacenamiento de valor clave de iCloud para mantener los datos del usuario sincronizados en múltiples dispositivos. Manténganse al tanto!