En este post se explica cómo utilizar Couchbase Lite como base de datos incrustada para compartir datos entre tu iOS App y iOS App Extension. Extensiones de aplicaciones implementan una tarea o funcionalidad específica que puede ser expuesta a otras aplicaciones en el dispositivo o al sistema operativo. En este post, vamos a ver un ejemplo de cómo se puede utilizar una Today Extension con una base de datos incrustada de Couchbase Lite en modo autónomo.
NOTA: Estaremos discutiendo Couchbase Mobile v1.4 que es la versión de producción actual. Pero todo lo que discutimos aquí se aplica a la más reciente Vista previa para desarrolladores de la versión 2.0 de Couchbase Mobile
Fondo
Apple admite muchos tipos de Extensiones de aplicaciones cada una de las cuales habilita funcionalidades relevantes para un subsistema concreto del dispositivo. En este post, vamos a discutir cómo Couchbase Lite se puede utilizar con una extensión Today. Este tipo de extensión, también conocida como "Widget", aparece en la vista Today del Centro de Notificaciones y permite a los usuarios obtener actualizaciones rápidas. Puedes aprender más sobre cómo funcionan las Extensiones de App en la sección Documentos para desarrolladores de Apple.
Asumiré que estás familiarizado con el desarrollo de aplicaciones iOS en Swift y que tienes una comprensión básica de la integración de Couchbase Lite en tu aplicación iOS. Esta guía de introducción es un buen lugar para empezar. Si quieres leer más sobre Couchbase, consulta los recursos al final de este post.
Couchbase Lite
Couchbase Lite es una base de datos integrada que se ejecuta en dispositivos. Se puede utilizar en varios modos de despliegue. Se puede utilizar como una base de datos incrustada independiente o puede ser utilizado en conjunción con una puerta de enlace de sincronización remota que le permitiría sincronizar los datos a través de dispositivos. En este post, utilizaremos Couchbase Lite en modo de despliegue autónomo. En este post, no vamos a repasar los detalles de la integración con Couchbase Lite. El sitio Primeros pasos con Couchbase Lite es un buen lugar para empezar.
Aplicación de demostración
- Descargue el proyecto de demostración de Xcode de la página Repo de Github . Utilizaremos esta aplicación como ejemplo en el resto del blog.
1 |
git clonar git@github.com:couchbaselabs/couchbase-móvil-ios-aplicación-extensión.git |
- Siga las instrucciones del LÉAME para instalar y ejecutar la aplicación
Se trata de una sencilla aplicación de lista de tareas que permite a los usuarios añadir, editar y eliminar tareas. El usuario puede marcar las tareas como completadas. La aplicación incluye una extensión "Hoy" que muestra las 2 tareas principales en el centro de notificaciones sin necesidad de abrir la aplicación. El usuario puede marcar tareas como completadas directamente desde el centro de notificaciones.
Todas las tareas se almacenan en una base de datos local de Couchbase Lite. Esto implica que tanto la app contenedora como la extensión necesitarán acceso a la base de datos.
Arquitectura de aplicaciones
Las extensiones de aplicaciones no son aplicaciones independientes. Están incluidas en una aplicación, denominada "Aplicación de contenedores". Aunque las extensiones de aplicación se incluyen en la aplicación contenedora, se ejecutan independientemente de ésta en un proceso separado. Las extensiones de aplicación se inician mediante otras aplicaciones que necesitan la funcionalidad de la extensión. La aplicación que ejecuta la extensión se denomina "Aplicación anfitriona". La interfaz de usuario de la extensión se muestra en el contexto de la aplicación anfitriona.
Aunque la aplicación contenedora y la extensión correspondiente son procesos independientes que se ejecutan en su propio espacio aislado, pueden compartir datos a través de un archivo Contenedor compartido.
El contenedor compartido puede configurarse registrando un único grupo de aplicaciones y habilitándolo tanto para la aplicación contenedora como para la extensión. Aprenderá a configurar esto en la siguiente sección.
Configuración de grupos de aplicaciones
Consulte el Documentos para desarrolladores de Apple para obtener más información sobre la configuración de grupos de aplicaciones en tu aplicación para iOS
Abra el CBLiteApp.xcworkspace del proyecto de aplicación de demostración que ha descargado.
- Abra la pestaña "Capacidades" del objetivo CBLiteApp Container App . Debería ver el grupo de aplicaciones group.com.example.CBLiteSharedData habilitado.

Activación del grupo de aplicaciones
- Abra la pestaña "Capacidades" del objetivo CBLiteTaskExtension. Debería ver el mismo grupo de aplicaciones, group.com.example.CBLiteSharedData habilitado.

Configuración del grupo de aplicaciones en la extensión
La activación de las capacidades del grupo de aplicaciones para un destino lo añade a los archivos de derechos para la aplicación contenedora y su extensión.
- Además, tendrá que añadir la función Grupos de aplicaciones a su App Id registrado en el portal para desarrolladores de Apple.

Configuración del grupo de aplicaciones en el portal para desarrolladores de Apple
Guía de la aplicación
Cree y ejecute la aplicación seleccionando el objetivo de la aplicación "CBLiteApp". Ahora cambia a la vista Hoy del Centro de Notificaciones
- Añada su nuevo Widget de Extensión a la Vista Hoy como se muestra a continuación
- Cambie a la aplicación y añada un par de tareas pulsando el botón "+". Cambia al widget "Hoy" correspondiente. Verás que las tareas que has añadido se muestran en el widget.
- Marque una tarea como "Completada" pulsando sobre ella. Ahora vuelve a la aplicación Contenedor. Verás que el estado de finalización de las tareas se actualiza para corresponderse con las acciones realizadas desde el widget "Hoy".
- Del mismo modo, edita o elimina una tarea en la aplicación Contenedor deslizando el dedo sobre la entrada de la tarea. Cambia al widget Hoy. Verás la lista de tareas actualizada.
- Si su dispositivo es compatible con 3D Touch, puede hacer un toque de fuerza en el icono de la aplicación en la pantalla de inicio para revelar la extensión Top Tareas allí mismo desde el icono y se puede interactuar con él. ¡Genial!
- Por último, finalice la aplicación Container. Cambie al widget Hoy y actualice el estado Completado de una tarea. Vuelva a iniciar la aplicación. Las tareas aparecerán con el estado actualizado.
Guía de códigos
Las tareas se almacenan en una base de datos local integrada en Couchbase Lite. Esto implica que tanto la app contenedora como la extensión Today necesitan acceder a la base de datos. Como se discutió anteriormente, la forma de compartir datos entre la app contenedora y la extensión es a través del Contenedor Compartido. Esto implica que la base de datos de Couchbase Lite debe estar localizada en el Contenedor Compartido.
El código para activarlo es sencillo.
Abra el GestorBaseDatos.swift archivo.
El DatabaseManager es una clase singleton que se encarga de las funciones básicas de gestión de bases de datos.
- Localice appGroupContainerURL función
Esta función construye la ruta a la carpeta del contenedor compartido.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 1. Obtener URL a contenedor de grupo compartido deje gestor de archivos = Gestor de archivos.por defecto guardia deje groupURL = gestor de archivos .containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.CBLiteSharedData") si no { devolver nil } deje storagePathUrl = groupURL.appendingPathComponent("CBLite") deje storagePath = storagePathUrl.ruta // 2: Cree una carpeta en la ubicación del contenedor compartido con el nombre "CBLite". si !gestor de archivos.archivoExiste(enRuta: storagePath) { do { pruebe gestor de archivos.crearDirectorio(enRuta: storagePath, conDirectoriosIntermedios: falso, atributos: nil) } captura deje error { imprimir("error al crear ruta de archivo: \(error)") devolver nil } } devolver storagePathUrl |
- Devuelve la URL del contenedor de grupo compartido. Los contenedores de grupo se almacenan en ~/Library/Group Containers/
- Cree una carpeta llamada CBLite en el contenedor del grupo compartido.
- Localice configureCBManagerForSharedData función
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
do { // 1. Establecer el modo de protección de archivos para la carpeta de base de datos Couchbase Lite deje opciones = CBLManagerOptions(readOnly: falso, fileProtection: Datos.Opciones de escritura.completeFileProtectionUnlessOpen) deje cblpoptions = UnsafeMutablePointer<CBLManagerOptions>.asignar(capacidad: 1) cblpoptions.inicializar(a: opciones) si deje url = auto.appGroupContainerURL() { // 2. Inicializar el CBLManager con el directorio del contenedor compartido _cbManager = pruebe CBLManager.init(directorio: url.relativePath, opciones: cblpoptions) } devolver verdadero } captura { devolver falso } |
- Crea el objeto de opciones CBLManagerOptions con las protecciones de archivo apropiadas. Un valor de completeFileProtectionUnlessOpen implica que el acceso de lectura/escritura al archivo está restringido a menos que el archivo esté abierto
- Inicializa el CBLManager con la ruta al contenedor compartido. Cuando se cree la base de datos, se creará en el contenedor compartido.¡Ya está! La base de datos de Couchbase Lite está ahora en el contenedor compartido que tanto la aplicación como la extensión pueden leer y escribir.
¿Y ahora qué?
Explore el resto del código de ejemplo de la demostración para comprender cómo se añaden, editan y eliminan los documentos. En concreto, eche un vistazo a TaskPresenter.swift archivo. Aquí es donde se manejan todas las interacciones con la base de datos Couchbase Lite.
Si tiene alguna pregunta, no dude en ponerse en contacto conmigo en Twitter. Si desea sugerir mejoras, envíe un pull request a la sección GitHub repo. Puede obtener más información sobre la integración con Couchbase Lite en este enlace Primeros pasos con Couchbase Lite blog. En Foros de Couchbase son otro buen lugar para publicar sus preguntas.
Aunque este post trata sobre el uso de Couchbase Lite en modo autónomo, permanece atento a un próximo post que mejorará la capacidad para incluir la sincronización con la nube.