Accediendo base de datos SQLite de Core Data

Cuando trabajamos con Core Data, por defecto, Xcode utiliza SQLite para persistir los datos en disco. Core Data proporciona las herramientas necesarias para gestionar los datos en la base de datos. Sin embargo, en ocasiones, es necesario visualizar la base de datos directamente para comprender cómo se almacenan los datos o validar que el grafo de entidades se crea en SQLite según nuestras necesidades.

Método uno: Imprimir logs de Core Data en la consola

Para imprimir registros detallados de Core Data, debemos agregar el argumento com.apple.CoreData.SQLDebug al iniciar la aplicación.

Para hacerlo, incluimos el siguiente texto en el esquema de nuestra aplicación: -com.apple.CoreData.SQLDebug 3, como se muestra en la siguiente imagen:

Imagen de cómo luce la configuración del schema con el argumento

Para ver los detalles de un esquema, selecciónalo en la barra superior de Xcode y presiona "Editar Esquema" ó "Edit Scheme".

En este caso, hemos pasado el valor 3; sin embargo, también podemos usar 0, 1 o 2. Cuanto mayor sea el valor, más detalles se mostrarán en la consola.

Al principio de los registros generados, encontraremos un texto similar a este:

CoreData: annotation: Connecting to sqlite database file at ".../CoreSimulator/Devices/
D2BA215A-77F6-4BEB-88D9-E0198F5B9413/data/Containers/Data/Application/A4818E31-8BB6-468D-BC3E-1E28A9E4E01F/
Library/Application Support/EasyReminder.sqlite"

Método dos: Utilizando StoreDescription

Para emplear este método, necesitamos agregar una línea de código que imprima en consola la URL donde se encuentra la base de datos SQLite. Busquemos el código que configura el Core Data Stack; una opción es buscar la siguiente línea de código:

container.loadPersistentStores(completionHandler: { (storeDescription, error) in
...

Esta línea se encarga de cargar el destino de almacenamiento (o destinos), en nuestro caso, una base de datos SQLite. El código que debemos agregar se vería así:

container.loadPersistentStores(completionHandler: { (storeDescription, error) in
debugPrint(storeDescription.url)
...

Este debugPrint imprimirá en consola el contenido de la propiedad url de storeDescription, que es donde se encuentra nuestra base de datos.

Esta es solo una de las formas de acceder a un storeDescription. Lo importante es saber que contiene una propiedad url que podemos usar para saber dónde está la base de datos.

Interactuando con SQLite

Si accedemos a la ruta utilizando la terminal, encontraremos algo como esto:

Imagen de una terminal mostrando el listado de archivos en la ruta

Es posible que veas archivos adicionales, uno terminado en "sqlite-shm" que se utiliza para mejorar el rendimiento mediante el uso de memoria compartida, y otro terminado en "sqlite-wal" utilizado por SQLite para mejorar la consistencia y durabilidad transaccional mediante logs.

Si usas macOS, deberías tener instalado SQLite. Puedes utilizar los siguientes comandos en la terminal para obtener más información:

Ejecuta sqlite3 NombreBaseDeDatos.sqlite para acceder a la base de datos.

Notarás que Core Data agrega una "Z" delante de los nombres de las entidades que creamos para evitar conflictos.

Luego de acceder a la base de datos:

  • Para listar las tablas de la base de datos, escribe .tables y presiona enter.
  • Para obtener información sobre el esquema de una tabla en específico, usa .schema NombreDeLaTabla.
  • Puedes utilizar los típicos comando SQL, como select, insert into y delete.
Ejemplo de una terminal ejecutando los comandos

Si necesitas acceder a una base de datos de SwiftData puedes utilizar estos mismos pasos, solo que la base de datos termina en .store en vez de .sqlite.

Comparte este artículo

Subscríbete a nuestro Newsletter

Mantente al día en el mundo de las aplicaciones móviles con nuestro blog especializado.

Artículos semanales

Todas las semanas artículos nuevos sobre el mundo de las aplicaciones móviles.

No spam

No te enviaremos spam, solo contenido de calidad. Puedes darte de baja cuando quieras.

Contenido de calidad

Nada de contenido generado de manera automática usando ChatGPT.

Recomendaciones

Tips indispensables sobre mejores prácticas y metodologías.

© 2024 AsyncLearn