Realm para iOS
-
Upload
erick-camacho -
Category
Technology
-
view
147 -
download
1
Transcript of Realm para iOS
![Page 1: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/1.jpg)
RealmErick Camacho @ecamacho
NSCoderMéxico15 julio 2015
![Page 2: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/2.jpg)
![Page 3: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/3.jpg)
CoreData es demasiado
grande / complejo
![Page 4: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/4.jpg)
Realm es una opción más
sencilla
![Page 5: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/5.jpg)
1. ¿Qué es?
![Page 6: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/6.jpg)
• Es una base de datos para móviles: un reemplazo para CoreData y SQLite. El core está construido en C++ (TightDB)
• NO es un ORM, NO está basado en SQLite
• Es una base de datos relacional, no es NoSQL, no es un Key-Value store: columnas, filas, queries, índices.
![Page 7: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/7.jpg)
• El desarrollo empezó en 2011, (en producción desde 2012), es público desde 2012
• Disponible para Objective-C, Java (Android) y Swift. Próximamente para .Net y JS
• El core hecho en C++ todavía no es opensource pero lo será
![Page 8: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/8.jpg)
2. ¿Quién lo usa?
![Page 9: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/9.jpg)
Groupon>100M usuarios
![Page 10: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/10.jpg)
DubsmashiOS & Android
#1 app en >40 países>10M instalaciones en
Android
![Page 11: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/11.jpg)
Wahoo#1 fitness app en >120
países
![Page 12: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/12.jpg)
En Nubleer lo usamos desde hace 11 meses en producción
![Page 13: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/13.jpg)
En 1 año• #1 -apps, Enterprise apps (Rite Aid, SAP, …), Bancos.. -
Corriendo en centenas de millones de dispositivos (la 2a base de datos con más instalaciones en el mundo)
![Page 14: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/14.jpg)
3. ¿Cómo lo uso?
![Page 15: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/15.jpg)
Demo Swift
![Page 16: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/16.jpg)
Relaciones Swift
class Person: Object { dynamic var name = "" dynamic var picture = NSData() let dogs = List<Dog>()}
realm.write { let person = Person() person.name = "Tim" person.dogs.append(mydog)}
![Page 17: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/17.jpg)
Migraciones Swift
setSchemaVersion(1, Realm.defaultPath, { migration, oldSchemaVersion in if oldSchemaVersion < 1 { // Nothing to do! // Realm will automatically detect new properties and removed properties // And will update the schema on disk automatically }})
![Page 18: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/18.jpg)
Models Objective-C
@interface Dog : RLMObject@property NSString *name;@property NSInteger age;@end
Dog *mydog = [[Dog alloc] init];
mydog.name = @"Rex"; NSLog(@"Name of dog: %@", mydog.name);
![Page 19: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/19.jpg)
Queries Objective-C
RLMResults *r = [Dog objectsWhere:@"age > 8"];
// Queries are chainabler = [r objectsWhere:@"name contains 'rex'"];
![Page 20: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/20.jpg)
Relationships Objective-C
@interface Person : RLMObject@property NSString *name;@property NSData *picture;@property RLMArray<Dog> *dogs;@end
[realm transactionWithBlock:^{ RLMPerson *person = [[RLMPerson alloc] init]; person.name = @"Tim"; [person.dogs addObject:mydog];}];
![Page 21: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/21.jpg)
Cifrado Swift
/ Generate a random encryption keylet key = NSMutableData(length: 64)!SecRandomCopyBytes(kSecRandomDefault, UInt(key.length), UnsafeMutablePointer<UInt8>(key.mutableBytes))
// Open the encrypted Realm filevar error: NSError?let realm = Realm(path: Realm.defaultPath, readOnly: false, encryptionKey: key, readOnly: false, error: &error)
![Page 22: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/22.jpg)
Desempeño
![Page 23: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/23.jpg)
![Page 24: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/24.jpg)
![Page 25: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/25.jpg)
![Page 26: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/26.jpg)
4. ¿Por qué no usar Realm?
![Page 27: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/27.jpg)
• SQLite es uno de los proyectos open source más probados en el mundo
• CoreData tiene un gran soporte en Xcode
• Soporte a valores nulos (se está trabajando en ello)
• Pasar objetos entre threads (se está trabajando en ello)
• Key-Value Observing, soporte a RXSwift y ReactiveCocoa (se está trabajando en ello)
• Datos poco estructurados, un schema-less store es mejor (Couchbase, NanoStore, Firebase)
![Page 28: Realm para iOS](https://reader031.fdocuments.ec/reader031/viewer/2022032122/55d126ebbb61ebce7f8b4622/html5/thumbnails/28.jpg)
Q&A