Top Banner
INTRODUCCION A CLOUDKIT #NSCODERMAD_CLOUDKIT JUAN ANTONIO MARTIN - @BYJUANAMN
49

Introducción a CloudKit

Jun 14, 2015

Download

Software

Apple ya tiene su propio cloud y ofrece a los desarrolladores las capacidades que ya hemos visto en otros proveedores:
- Persistencia
- Notificaciones
etc...
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Introducción a CloudKit

I N T R O D U C C I O N A

C L O U D K I T

# N S C O D E R M A D _ C L O U D K I T

J U A N A N T O N I O M A R T I N - @ B Y J U A N A M N

Page 2: Introducción a CloudKit

A G E N D A

• Introducción

• Activar CloudKit en nuestra App

• Framework CloudKit

• Limitaciones y comparaciones

Page 3: Introducción a CloudKit

I N T R O D U C C I Ó N# N S C O D E R M A D _ C L O U D K I T

Page 4: Introducción a CloudKit

I N T R O D U C C I Ó N

• CloudKit es una tecnología construida sobre iCloud

• Hasta ahora manejábamos información basada en documentos

• CloudKit está pensada para trabajar con datos estructurados (registros)

• Ahora decidimos cuando movemos datos “de” o “hacia” iCloud

Page 5: Introducción a CloudKit

I N T R O D U C C I Ó N

• CloudKit es una tecnología orientada al transporte de información ¿? …. No persiste en local datos

• CloudKit proporciona mecanismos para informarnos cuando suceden cambios en nuestros datos…

• Pero está en el lado del desarrollador la responsabilidad de acceder a la información. Seremos responsables de:

• Decidir cuando obtenemos los datos

• Decidir cuando los guardamos

• Decidir como gestionamos los errores que puedan producirse

Page 6: Introducción a CloudKit

I N T R O D U C C I Ó N

• La gestión de identidades/accesos/permisos en CloudKit está basada en iCloud accounts

• nuestros usuarios deben ser usuarios de iCloud

• CloudKit está soportado en OS X e iOS

• Tenemos Bases de datos publicas y privadas

• Datos estructurados y ficheros..

Page 7: Introducción a CloudKit

C L O U D K I T F R A M E W O R K# N S C O D E R M A D _ C L O U D K I T

Page 8: Introducción a CloudKit

C L O U D K I T F R A M E W O R K

• Framework de CloudKit de un vistazo:

• Containers

• DataBases

• Records

• Record Zones

• Rercord Identifiers

• References

• Assets

Page 9: Introducción a CloudKit

I N T R O D U C C I Ó N

!

• Todo empieza por CK

Page 10: Introducción a CloudKit

C O N TA I N E R S# N S C O D E R M A D _ C L O U D K I T

Page 11: Introducción a CloudKit

C O N TA I N E R S

• CKContainer es la clase que implementa esta parte de CloudKit

• Como en otras tecnología de iCloud, CloudKit organiza toda la información en Containers

• Un container es la representación local de una App tal y como estaría en iCloud

• Cada App tiene un container

Page 12: Introducción a CloudKit

C O N TA I N E R S

• Un container está dividido en dos partes: Publica/privada

• Los datos almacenados en la parte privada solo estarán disponibles por el usuario propietario de estos datos

• Los datos públicos estarán disponibles para todos los usuarios de la App

Page 13: Introducción a CloudKit

C O N TA I N E R S

• Los datos públicos estarán disponibles aunque el dispositivo no tenga una cuenta de iCloud

• Si necesitamos guardar información SI es necesario que el usuario tenga una cuenta de iCloud activada

• CKContainer nos proporciona acceso a las bases de datos del container

• publicCloudContainer o privateCloudContainer

Page 14: Introducción a CloudKit

C O N TA I N E R S

!

• CKContainer nos proporciona un método para detectar si el usuario tiene iCloud activo:

• - accountStatusWithCompletionHandler

• También podemos pedir o consultar permisos

• requestApplicationPermission:completionHandler

• statusForApplicationPermission:completionHandler

Page 15: Introducción a CloudKit

D E M O C O N TA I N E R S

Page 16: Introducción a CloudKit

D ATA B A S E S# N S C O D E R M A D _ C L O U D K I T

Page 17: Introducción a CloudKit

D ATA B A S E S

!

• CKDataBase es la clase que implementa CK para acceder a la base de datos pública o privada del contenedor

• No podemos crear objetos CKDataBase, para acceder usaremos el objeto CKContainer

• Esta clase nos ofrece los mecanismos para interactuar con los datos, realizar querys, guardar registros, etc..

Page 18: Introducción a CloudKit

D ATA B A S E S

!

• ¿ Cómo accedemos a las bases de datos?

• CKDataBase pubDb = [[CKContainer defaultContainer] publicCloudDataBase];

• CKDataBase privaDb = [[CKContainer defaultContainer]privateCloudDatabase];

Page 19: Introducción a CloudKit

D ATA B A S E S

P Ú B L I C A P R I VA D A

T I P O S D E D AT O S

C O M PA R T I D O S U S U A R I O A C T I V O

C U E N TAN E C E S A R I A S O L O PA R A E S C R I T U R A

C U E N TA D E U S U A R I O

O B L I G AT O R I AP E R M I S O S O S P O R D E F E C T O

T O D O E L M U N D O L E C T U R A

S O L O L E C T U R A E L U S U A R I O

C U O TA D E V E L O P E R U S U A R I O

P E R M I S O S D E E D I C I Ó N

B A S A D O S E N R O L E S ( I D R )

N / A

Page 20: Introducción a CloudKit

R E C O R D S# N S C O D E R M A D _ C L O U D K I T

Page 21: Introducción a CloudKit

R E C O R D S

• La clase de CK para manejar registros es CKRecord

• Un registro es un diccionario de keys-values

• Cada registro tiene un tipo, esto sirve para diferenciar del resto de tipos usados. Es una cadena que identifica la clase de información que manejará

• Cada key-value representan un campo de un registro y su valor. Los tipos de datos que admite CK están clasificados como simples o complejos

Page 22: Introducción a CloudKit

R E C O R D S

• Simples:

• strings, numbers, dates

• Complejos

• localizaciones

• referencias a otros registros

• ficheros

• Y arrays de todos estos

Page 23: Introducción a CloudKit

R E C O R D S

• Responsabilidades… porque nada es automático

• Nuestra App debe encargarse de recoger los registros que necesite de manera explicita

• Para hacer un Fetch debemos conocer el ID del Record que necesitamos

• Y si no sabemos el ID??? pues no hay problema, usaremos queries

Page 24: Introducción a CloudKit

R E C O R D S

• Responsabilidades…

• Debemos trazar una estrategia de diseño de como usaremos nuestros registros, como accederemos, etc.

• Tipos de relaciones, jugando con las relaciones podemos tener borrado en cascada, cosa que no es sencilla cuando estamos fuera de un modelo relacional

• Mejor que queries usar suscripciones

Page 25: Introducción a CloudKit

R E C O R D S

• Esto no es solo para los registros, pero ya que estamos lo contamos… Tenemos dos maneras de usar este framework:

• A través de operation objects (basados en NSOperation)

• Métodos de conveniencia

Page 26: Introducción a CloudKit

R E C O R D S

• CKContainer y CKDataBase tienen las dos posibilidades, no tenemos obligación a la hora de elegir de elegir uno u otro ….pero si lo haces con NSOperation mejor

• Jugando con Operations podemos operar con multiples registros a la vez, y podemos definir dependencias para asegurar p.e. que los registros sean salvados en el orden correcto

Page 27: Introducción a CloudKit

R E C O R D S

• CKContainer y CKDataBase tienen las dos posibilidades, no tenemos obligación a la hora de elegir de elegir uno u otro ….pero si lo haces con NSOperation mejor

• Jugando con Operations podemos operar con multiples registros a la vez, y podemos definir dependencias para asegurar p.e. que los registros sean salvados en el orden correcto

Page 28: Introducción a CloudKit

R E C O R D S

• Para usar un CKRecord usaremos:

• initWithRecordType

• initWithRecordType:zoneID

• itWithRecordType:recordID

Page 29: Introducción a CloudKit

R E C O R D S

• Para acceder a sus atributos:

• CKRecord *miRecord = [CKRecord ……

• [miRecord setObject:@“eldato” forKey:@“lakey”];

• miRecord[@“lakey”] = @“eldato”;

Page 30: Introducción a CloudKit

R E C O R D S

• Para almacenar un registro usaremos el método saveRecord:completionHandler de un objeto CKDataBase

Page 31: Introducción a CloudKit

R E C O R D S

• RecordZone

• una Zona nos permite agrupar un conjunto de datos relacionado, por defecto tenemos 2 zonas (publica/privada)

• En la bbdd privada podemos crear nuestras propias zonas

• Muy útiles para realizar una escritura multiple de varios registros (simulando una transacción)

• Podemos usar relaciones dentro de una zona…pero no entre zonas

Page 32: Introducción a CloudKit

R E C O R D S

• RecordID: este objeto sirve para crear identificadores únicos para los registros

• conociendo el ID podemos hacer un fetch para obtener el objeto

• Muy importante combinado con suscripciones

Page 33: Introducción a CloudKit

R E C O R D S

• CKQuery & NSPredicate

• La alternativa a los fetchXX pero pagando peajes

• El rendimiento es más pesado

• CloudKit soporta un subconjunto de NSPredicate

Page 34: Introducción a CloudKit

R E C O R D S

Page 35: Introducción a CloudKit

R E C O R D S

• ¿Cómo creamos una query?

• Creamos un predicado

• Creamos un objeto CKQuery:

• CKQuery *q = [CKQuery alloc]initWithRecordType:predicate];

Page 36: Introducción a CloudKit

R E C O R D S

• y por último ejecutamos la query :

• [pubDataBase performQuery:inZoneWithID:completionHandler: ^{NSArray *results, NSError *error){ …}];

Page 37: Introducción a CloudKit

R E C O R D S

• Assets o como podemos almacenar otros datos en un CKRecord.

• CKAsset nos permite almacenar BLOBs

• ficheros….

• Como está asociado a un registro, este será su propietario

• El sistema de subida y bajada está bastante optimizado

Page 38: Introducción a CloudKit

R E C O R D S

• Mientras que un registro tiene un limite de 1MB máximo, los Asset no tienen limite y no computan dentro del tamaño máximo del registro

Page 39: Introducción a CloudKit

R E C O R D S

• CloudKit no es un sistema relacional pero tiene una clase que simula muy bien este aspecto: CKReference

Page 40: Introducción a CloudKit

R E C O R D S

• Suscripciones: la idea es que nuestros registros tengan suscripciones y solo cuando se produzcan cambios en los datos pidamos a iCloud que nos los entregue…….¿cómo?

• Notificaciones Push

• a través de la notificación recibiremos el ID del registro que ha cambiado y obtenerlo será tan simple como hacer un fetch

Page 41: Introducción a CloudKit

R E C O R D S

• CKSubscrition es el encargado de crear suscripciones

• Asignaremos un tipo de registro y un predicado para crear la condición

• Añadiremos un CKNotificationInfo a la suscripción

• En ultimo lugar guardaremos en la bbdd la suscripción

Page 42: Introducción a CloudKit

R E C O R D S

• Ahora solo debemos incluir código para recibir suscripciones y….

Page 43: Introducción a CloudKit

D E M O R E C O R D S

Page 44: Introducción a CloudKit

D A S H B O A R D# N S C O D E R M A D _ C L O U D K I T

Page 45: Introducción a CloudKit

D E M O C O N S O L A

Page 46: Introducción a CloudKit

L I M I TA C I O N E S# N S C O D E R M A D _ C L O U D K I T

Page 47: Introducción a CloudKit

L I M I TA C I O N E S# N S C O D E R M A D _ C L O U D K I T

Page 48: Introducción a CloudKit

L I M I TA C I O N E S

• Cuentas iCloud si o si

• No hay posibilidades de usar otros proveedores

• Solo iOS y OS X, no podemos pensar en otras plataformas

• No hay código de servidor

Page 49: Introducción a CloudKit

{ “me”: {“speaker” : “Juan A. Martin”, “company”: “CloudOnMobile”, “contact”: { "mail":"[email protected]”, "twitter":"@byjuanamn", "skype":"by-juanamn" }

}

Muchas Gracias