Registro en aplicaciones Swift: mejores prácticas para principiantes
El registro es una de las herramientas más importantes en el arsenal de un desarrollador. Sin él, la depuración de errores complejos en producción se convierte en una adivinanza. En este artículo, analizaremos las mejores prácticas de registro para aplicaciones Swift en iOS y macOS, comenzando desde lo básico hasta técnicas avanzadas. Aprenderá no solo a mostrar texto en la consola, sino a construir un sistema que le ayude a encontrar y corregir errores rápidamente.
¿Por qué no debería usar print() en producción?
Muchos desarrolladores principiantes usan print() para mostrar información de depuración. Esto funciona en la etapa de desarrollo, pero en una aplicación terminada, este enfoque crea muchos problemas:
- Sin control de niveles: no puede filtrar solo errores o solo advertencias.
- Reducción del rendimiento:
print()bloquea el hilo de forma síncrona, lo que puede causar retrasos notables en la interfaz de usuario. - Falta de categorización: todos los mensajes se mezclan, es imposible saber de qué módulo proviene el mensaje.
- Sin persistencia: la salida de
print()no se guarda en el dispositivo del usuario, no podrá analizar los registros después de un fallo de la aplicación. - Problemas de seguridad: un
print()dejado accidentalmente puede mostrar datos sensibles en la consola.
En lugar de print(), use os_log del framework Unified Logging (disponible desde iOS 10 / macOS 10.12).
Configuración de OSLog: ejemplo básico
Para empezar, importe el framework os.log y cree un objeto logger para su módulo:
import os.log
let logger = Logger( subsystem: "com.yourapp.networking", category: "API")
func fetchUsers() { logger.info("Comenzando la carga de usuarios...") // Lógica de la solicitud logger.debug("Recibidos \\(usersCount) usuarios")}Desglose de parámetros:
subsystem— generalmente el identificador de su aplicación (bundle ID). Permite agrupar registros por aplicación.category— el nombre del módulo o componente (por ejemplo, "UI", "Network", "Database").
En Xcode, puede filtrar los registros por subsystem y category en la consola, lo que simplifica enormemente el análisis.
Niveles de registro: ¿cuándo usar cada uno?
Unified Logging admite 6 niveles de registro. Elegir el nivel correcto es la mitad del éxito:
debug— para depuración durante el desarrollo. No se guarda en el dispositivo del usuario (a menos que se active un perfilado especial).info— para eventos importantes que pueden ser útiles en el análisis (por ejemplo, apertura de una pantalla, solicitud exitosa).notice— nivel estándar. Se usa para eventos que no son errores, pero merecen atención.error— para errores manejables (por ejemplo, no se pudo cargar datos, pero la aplicación continúa funcionando).fault— para fallos críticos que provocan un cierre de la aplicación o pérdida de datos.critical— se usa raramente, para situaciones especialmente graves (por ejemplo, corrupción de la base de datos).
import os.log
let logger = Logger(subsystem: "com.yourapp", category: "general")
logger.debug("Solo para depuración: \\(someVariable)")logger.info("El usuario abrió la pantalla de perfil")logger.notice("Se detectó un escenario no estándar")logger.error("Error de red: \\(error.localizedDescription)")logger.fault("Error crítico: la aplicación se