Advertisement
  1. Code
  2. iOS SDK

Base de datos de Realm Mobile para iOS

by
Read Time:12 minsLanguages:

Spanish (Español) translation by Xiomara Reynoso (you can also view the original English article)

Final product imageFinal product imageFinal product image
What You'll Be Creating

Introducción

En este tutorial, te mostraré cómo usar una solución de base de datos en el dispositivo potente pero elegante para tus aplicaciones de iOS: Realm Mobile Database. Una alternativa a Apple Core Data o SQLite con mapeo relacional de objetos (ORM), Realm Mobile Database ofrece a los desarrolladores una forma más fácil y natural de almacenar y consultar datos.

¿Qué es Realm Mobile Database?

Anunciado como una verdadera base de datos de objetos, Realm se diferencia de otras bibliotecas similares al tratar los objetos de datos como objetos en vivo, lo que significa que los objetos se actualizan automáticamente. Reaccionan con capacidad de respuesta a los cambios y son fáciles de persistir. Aún mejor, no tienes la curva de aprendizaje empinada que tendrías con core data o sqlite scripting. En su lugar, puedes trabajar de una manera verdaderamente orientada a objetos. Realm Mobile Database también ha sido de código abierto a partir de 2016, y está disponible de forma gratuita para los desarrolladores.

Además de Realm Mobile Database, la compañía también ofrece Realm Mobile Platform, su PAAS insignia para complementar Realm Mobile Database con una solución del lado del servidor.

Realm Mobile Platform, extiende ese núcleo con sincronización de datos en tiempo real y manejo de eventos en el lado del servidor, todo conectado a la perfección a las aplicaciones. Los desarrolladores usan la plataforma para crear aplicaciones con funcionalidades eficaces como mensajería, colaboración y funcionalidades sin conexión. La plataforma también es ideal para movilizar las API existentes, lo que facilita la creación de aplicaciones atractivas y con alta capacidad de respuesta conectadas a sistemas y servicios heredados. (realm.io)

Por lo tanto, Realm Mobile Platform funciona en el lado del servidor de la misma manera perfecta que Realm Mobile Database, proporcionando sincronización automática de datos y manejo de eventos entre el cliente y el servidor, y en el proceso abstrae las complejidades que surgen cuando se trata de la sincronización de datos. Realm Mobile Platform está más allá del alcance de este tutorial, pero volveré a él en una publicación futura.

¿Por qué Realm Mobile Database?

Más allá de ahorrar a los desarrolladores el dolor de cabeza y la curva de aprendizaje empinada de Core Data, Realm Mobile Database proporciona ventajas distintivas desde el principio.

Rendimiento y seguridad para subprocesos

En cuanto al rendimiento, se ha demostrado que Realm Mobile Database ejecuta consultas y sincroniza objetos significativamente más rápido que Core Data, y acceder a los datos simultáneamente no es un problema. Es decir, varios orígenes pueden tener acceso al mismo objeto sin necesidad de administrar bloqueos ni preocuparse por las incoherencias de los datos.

Encriptación

Realm Mobile Database proporciona sus propios servicios de cifrado para proteger las bases de datos en disco utilizando AES-256+SHA2 a través del cifrado de 64 bytes.

Esto hace que todos los datos almacenados en el disco se cifren y descifran de forma transparente con AES-256 según sea necesario, y se verifiquen con un HMAC SHA-2. Se debe proporcionar la misma clave de cifrado cada vez que obtengas una instancia de Realm.

Multiplataforma

A diferencia de Core Data, Realm Mobile Database es realmente una multiplataforma, compatible con iOS, Android, aplicaciones web de JavaScript y Xamarin. 

Naturaleza reactiva

Debido a la forma en que funcionan los objetos en vivo, puedes conectar los elementos de la interfaz de usuario a los modelos de datos y la interfaz de usuario se actualizará de forma reactiva a medida que cambien los datos. No se necesita ningún código de sincronización complicado o lógica de cableado, como lo haría con Core Data.

Cuando se combina con Realm Mobile Platform y Realm Object Server, los desarrolladores obtendrán el beneficio adicional de sincronizar sus datos con la nube simplemente configurando el enlace de Realm Object.

Incluso usando Realm Mobile Platform, no tienes que preocuparte por las conexiones interrumpidas, ya que Realm tiene capacidades sin conexión integradas y pondrá en cola cualquier cambio de datos que se envíes al servidor.

Clientes

Realm tiene numerosos clientes distinguidos que han adoptado abiertamente Realm Mobile Database, incluidos Netflix y Starbucks.

Alternativas a la base de datos de Realm Mobile

Por supuesto, Realm Mobile Database no es la única solución de almacenamiento de aplicaciones. Ya mencioné los propios Core Data de Apple, y aunque es inherentemente más complicado de aprender, el hecho de que pertenezca a Apple significa que será la solución de base de datos de facto para muchos desarrolladores de iOS, y seguirá teniendo una gran comunidad de desarrolladores y material de soporte.

Una solución que es algo similar a Realm Mobile Database es Firebase de Google, aunque esta es una solución combinada del lado del cliente y del lado del servidor. Firebase es igualmente fácil de usar y es gratis para comenzar, pero los costos se escalarán a medida que lo uses. Un inconveniente con Firebase es que estás estrechamente acoplado a tu plataforma, mientras que con Realm eres libre de usar tu propio back-end, ¡o ningún back-end en absoluto!

Tu primera aplicación Realm

Conocimiento asumido

En este tutorial se supone que tienes un conocimiento práctico de Swift, pero no se necesita ningún conocimiento previo de datos básicos o de base de datos.

Además de Realm, usaremos las siguientes partes de iOS:

  • UIKit: para demostrar nuestros datos visualmente
  • CocoaPods: una biblioteca de dependencias de terceros que se utilizará para instalar Realm Mobile Database

Objetivos de este tutorial

Al final de este tutorial, habrás desarrollado una aplicación sencilla de hacer escrita en Swift y haciendo uso de Realm Mobile Database para conservar los datos localmente. Podrás crear una aplicación de trabajo totalmente funcional con tecnología realm, y en el camino aprenderás los siguientes conceptos:

  1. Configurar la biblioteca de Realm en un nuevo proyecto, a través de CocoaPods
  2. Configurar el delegado de la aplicación para importar la biblioteca de dominio de kerberos
  3. Crear los objetos del modelo 'Live-Object'
  4. Crear los controladores de vista y el guion gráfico en la interfaz de usuario de la aplicación
  5. Conectar el modelo de datos a los controladores de vistas y a las vistas

Puedes descargar el código fuente completo desde el repositorio de GitHub tutorial.

Configurar el proyecto

Bien, comencemos a crear nuestra aplicación Realm: RealmDo. Vamos a crear un nuevo proyecto Xcode, así que adelante y crea una aplicación Master-Detail.

Create a new projectCreate a new projectCreate a new project

A continuación, si no has instalado CocoaPods en tu máquina, deberás hacerlo ahora. Así que salta a la terminal y escribe lo siguiente:

$ sudo gem install cocoapods

A continuación, debes obtener una confirmación de que cocoapods es de hecho instalado. Mientras todavía estás en el terminal, ve al proyecto Xcode que acabas de crear y escribe lo siguiente, para inicializar un nuevo Podfile:

$ pod init

Deberías ver un nuevo archivo denominado Podfile ubicado en el directorio del proyecto. Este archivo básicamente establece las bibliotecas que queremos usar en nuestro proyecto. Puedes consultar la documentación oficial de CocoaPods para obtener más información sobre cómo funcionan los Podfiles.

A continuación, necesitamos agregar la biblioteca cocoapod para Realm, así que abre el Podfile en un editor de texto, y agrega lo siguiente debajo de # Pods para RealmDo:

Guarda el archivo, sal y escribe:pod install

Después de que CocoaPods se termine de instalar la biblioteca, nos pedirá que cerremos nuestro proyecto Xcode y abramos el espacio de trabajo. Haz eso, y estamos listos para proceder con la codificación. Comenzaremos con el AppDelegate.

Configura el delegado de la aplicación para importar la biblioteca de Realm

En nuestro AppDelegate vamos a importar la biblioteca Realm, así que agrega lo siguiente al archivo AppDelegate.swift:

Deja la clase tal cual por ahora, para que podamos centrar nuestro foco en el objeto de modelo.

Modelos de objetos en vivo

Definir modelos en Realm es muy simple; simplemente crea una clase de modelo lógico. En nuestro proyecto, vamos a almacenar recordatorios, así que vamos a crear una clase llamada recordatorio.swift, con el siguiente código:

Para este tutorial, solo necesitamos este modelo de recordatorio, ¡así que ya hemos terminado! Es así de simple, y crear instancias de un modelo es igual de fácil, como descubriremos más adelante.

Configurar los controladores de vista y el guion gráfico

Ahora centramos nuestra atención en los controladores de vista, pero antes de ir a la clase MasterViewController.swift, abramos Main.storyboard y agreguemos un botón de barra en la parte superior derecha, llamado Agregar, como se muestra a continuación:

The app main storyboardThe app main storyboardThe app main storyboard

El proyecto fue inicializado por Xcode con el origen de datos y el delegado conectado al controlador de vista, por lo que todo lo que necesitamos hacer es agregar el botón que acabamos de crear al controlador de vista como un IBOutlet. Mantén presionado y arrástralo desde el botón hasta el controlador de vista en modo de vista dividida, para generar el vínculo.

Link the button to the view controllerLink the button to the view controllerLink the button to the view controller

Inicializar el Realm

Ahora, pasando al archivo MasterViewController.swift, declaramos las variables que vamos a necesitar, que deberían tener un aspecto similar al siguiente:

Primero, en línea (1), declaramos la variable Realm a la que vamos a hacer referencia para llegar a nuestro almacén de datos. A continuación, cargamos de forma diferida el remindersList llamando a los objetos de Realm para obtener una lista de todos los objetos de Reminder. Finalmente, creamos una instancia de la variable Realm que declaramos al principio. ¡Nada demasiado complicado hasta ahora!

Configura el delegado de vista y el origen de datos

A continuación, configuramos nuestros métodos del delegado tableView y origen de datos, de la siguiente manera:

En línea (4), obtenemos un recuento de la lista de objetos remindersList, que establecerá el recuento para el número de filas en nuestra tableView de una sección.

Luego, para cada celda, obtenemos la propiedad del objeto en vivo de Reminder para establecer la etiqueta, así como marcar si el elemento está marcado como hecho o no.

Escribe los cambios en la base de datos

Queremos que nuestros usuarios puedan alternar un elemento como hecho (y no hecho), lo que indicamos cambiando el color de la etiqueta. También queremos hacer que la vista de tabla sea editable (los usuarios podrán quitar celdas deslizando de derecha a izquierda), lo que logramos agregando el siguiente código:

En línea (6), esta es la primera vez que volvemos a escribir en nuestra base de datos, lo que simplemente haces dentro de un bloque self.realm.write. Ten en cuenta que todo lo que necesitas hacer con un objeto de instancia es establecer su valor, nada más. Así que en este caso alternamos el valor hecho haciendo item.done = !item.done.

La línea (7) es nuestro segundo ejemplo de volver a escribir en nuestra base de datos: eliminamos un objeto de la base de datos simplemente eliminando el objeto de instancia.

Agregando nuevos objetos

¡Estamos haciendo un gran progreso, y de hecho estamos casi terminados! Ahora podemos cargar, editar y eliminar nuestros recordatorios, pero nos falta una acción importante: agregar un nuevo recordatorio. Para implementar esto, crea un nuevo método @IBAction y conecta el botón agregar de la barra de herramientas del guion gráfico al método.

Vamos a crear un AlertViewController simple en nuestro ejemplo, pero como un ejercicio independiente, intente refinar la aplicación actualizando esto a un nuevo controlador de vista en su lugar.

Por ahora, sigue adelante y agrega el siguiente código:

En línea (8), creamos una nueva instancia de recordatorio y establecemos sus propiedades. Luego, en línea (9) agregamos el recordatorio a través de self.realm.add(item).

Prueba la aplicación

Así que vamos a probar la aplicación, mediante la construcción y ejecución de ella en simulador. Sigue adelante y agrega dos recordatorios, y establece uno de ellos como hiciste tocando en él. Si sale de la aplicación y la abres de nuevo, los elementos deben seguir estando allí.

The completed appThe completed appThe completed app

Navegador de Realm

¡Y eso es todo! Con poca o ninguna curva de aprendizaje, y al pasar por alto cualquiera de las complejidades de Core Data, tenemos un back-end completamente horneado en el dispositivo. Esta es la base de datos de Realm Mobile. También puedes verificar que los datos están en el dispositivo descargando Realm Browser, una aplicación de macOS que nos permite ver, depurar y editar objetos de datos de Realm.

Descarga la aplicación desde la Mac App Store y abre la base de datos de Realm, que se encuentra en tu CoreSimulator / Devices / appID / data / ... Carpeta. El archivo que estás buscando es db.realm.

Finding the Realm databaseFinding the Realm databaseFinding the Realm database

Al abrirlo, deberías poder no solo ver tus datos, sino también editar y agregar nuevos datos. ¡Adelante y pruébalo!

Editing the database with Realm BrowserEditing the database with Realm BrowserEditing the database with Realm Browser

Conclusión

En este tutorial, aprendiste sobre Realm Mobile Database y por qué es una herramienta poderosa para el desarrollador de iOS. También hablamos brevemente de su contraparte de servidor, Realm Mobile Platform, que cubriremos en un tutorial separado.

Luego creamos una aplicación de recordatorios simple que funciona con Realm Mobile Database. En solo unas pocas docenas de líneas de código, pudimos:

  1. Configurar un modelo de objetos dinámicos para el recordatorio
  2. Conectar nuestro controlador de vista al modelo de datos
  3. Declarar, crear instancias, cargar, agregar y eliminar de la base de datos Realm

Finalmente, viste cómo usar Realm Browser para depurar y ver tus datos.

Esta ha sido una introducción muy básica de Realm Mobile Database, pero puedes usarla como punto de partida para embarcarte en temas más avanzados. Como próximos pasos, podrías mirar a:

Asegúrate de explorar algunos de los temas avanzados de la documentación anterior, como trabajar con relaciones de datos, probar objetos de Realm, subprocesos y cifrado.

Y mientras estás aquí, ¡asegúrate de revisar algunas de nuestras otras publicaciones sobre el desarrollo de aplicaciones de iOS!

  • Desarrollo móvil
    Back-End como servicio para aplicaciones móviles
    Bala Durage Sandamal Siripathi
  • Swift
    Sugerencia rápida: Enumeraciones en Swift
    Bart Jacobs
  • Plantillas para aplicaciones
    Las 15 mejores plantillas de aplicaciones para Swift
    Davis Allie
  • Core Data
    Core Data y Swift: Core Data Stack
    Bart Jacobs
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.