Introducción a CloudKit

byjuanamn 1,840 views 49 slides Sep 24, 2014
Slide 1
Slide 1 of 49
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49

About This Presentation

Apple ya tiene su propio cloud y ofrece a los desarrolladores las capacidades que ya hemos visto en otros proveedores:
- Persistencia
- Notificaciones
etc...


Slide Content

INTRODUCCION
A
CLOUDKIT
#NSCODERMAD_ CLOUDKIT
JUAN ANTONIO MARTIN - @BYJUANAMN

AGENDA
•Introducción
•Activar CloudKit en nuestra App
•Framework CloudKit
•Limitaciones y comparaciones

INTRODUCCIÓN
#NSCODERMAD_ CLOUDKIT

INTRODUCCIÓ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

INTRODUCCIÓ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

INTRODUCCIÓ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..

CLOUDKIT FRAMEWORK
#NSCODERMAD_ CLOUDKIT

CLOUDKIT FRAMEWORK
•Framework de CloudKit de un vistazo:
•Containers
•DataBases
•Records
•Record Zones
•Rercord Identifiers
•References
•Assets

INTRODUCCIÓN
!
•Todo empieza por CK

CONTAINERS
#NSCODERMAD_ CLOUDKIT

CONTAINERS
•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

CONTAINERS
•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

CONTAINERS
•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

CONTAINERS
!
•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

DEMO CONTAINERS

DATABASES
#NSCODERMAD_ CLOUDKIT

DATABASES
!
•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..

DATABASES
!
•¿ Cómo accedemos a las bases de datos?
•CKDataBase pubDb = [[CKContainer
defaultContainer] publicCloudDataBase];
•CKDataBase privaDb = [[CKContainer
defaultContainer]privateCloudDatabase];

DATABASES PÚBLICA PRIVADA
TIPOS DE
DATOS
COMPARTIDOS USUARIO ACTIVO
CUENTA
NECESARIA SOLO
PARA ESCRITURA
CUENTA DE
USUARIO
OBLIGATORIA
PERMISOSOS
POR DEFECTO
TODO EL MUNDO
LECTURA
SOLO LECTURA EL
USUARIO
CUOTA DEVELOPER USUARIO
PERMISOS DE
EDICIÓN
BASADOS EN
ROLES (IDR)
N/A

RECORDS
#NSCODERMAD_ CLOUDKIT

RECORDS
•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

RECORDS
•Simples:
•strings, numbers, dates
•Complejos
•localizaciones
•referencias a otros registros
•ficheros
•Y arrays de todos estos

RECORDS
•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

RECORDS
•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

RECORDS
•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

RECORDS
•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

RECORDS
•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

RECORDS
•Para usar un CKRecord usaremos:
•initWithRecordType
•initWithRecordType:zoneID
•itWithRecordType:recordID

RECORDS
•Para acceder a sus atributos:
•CKRecord *miRecord = [CKRecord ……
•[miRecord setObject:@“eldato” forKey:@“lakey”];
•miRecord[@“lakey”] = @“eldato”;

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

RECORDS
•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

RECORDS
•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

RECORDS
•CKQuery & NSPredicate
•La alternativa a los fetchXX pero pagando peajes
•El rendimiento es más pesado
•CloudKit soporta un subconjunto de NSPredicate

RECORDS

RECORDS
•¿Cómo creamos una query?
•Creamos un predicado
•Creamos un objeto CKQuery:
•CKQuery *q = [CKQuery
alloc]initWithRecordType:predicate];

RECORDS
•y por último ejecutamos la query :
•[pubDataBase
performQuery:inZoneWithID:completionHandler:
^{NSArray *results, NSError *error){ …}];

RECORDS
•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

RECORDS
•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

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

RECORDS
•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

RECORDS
•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

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

DEMO RECORDS

DASHBOARD
#NSCODERMAD_ CLOUDKIT

DEMO CONSOLA

LIMITACIONES
#NSCODERMAD_ CLOUDKIT

LIMITACIONES
#NSCODERMAD_ CLOUDKIT

LIMITACIONES
•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

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