Cómo dejar de torturar a Xcode y empezar a vivir con DebugSwift
¿Te suena familiar: estás probando una app en un dispositivo físico lejos de tu escritorio, y de repente — un bug. O una solicitud de red devuelve 500, pero no puedes ver el cuerpo del error. Tienes que volver a tu computadora, conectar el cable, lanzar Xcode e intentar reproducir el problema. ¿Y si es un bug intermitente? En momentos como estos, desearías tener una consola de desarrollador justo en tu bolsillo.
Hoy analizaremos DebugSwift — un potente toolkit que convierte tu app iOS en un completo laboratorio de depuración. No es solo "otro logger", sino una herramienta integral que te da acceso a solicitudes de red, jerarquía de vistas e incluso la base de datos directamente dentro de la app en ejecución.

Qué es DebugSwift y por qué lo necesitas
DebugSwift es una biblioteca de código abierto para desarrolladores Swift que incrusta un menú de depuración oculto en tu app. Piensa en Chrome DevTools, pero para iOS. El proyecto tomó las mejores ideas de herramientas como CocoaDebug y DBDebugToolkit, pero con enfoque en Swift 6 moderno y soporte nativo para Apple Silicon.
Lo principal aquí es la autonomía. Puedes entregar una compilación a un tester o cliente, y si algo sale mal, pueden verificar los logs, inspeccionar el tráfico de red o incluso tomar una captura de pantalla de la jerarquía de vistas por su cuenta sin tu ayuda.
Cinco razones para añadir DebugSwift a tu proyecto
1. Inspector de red con esteroides
El monitoreo de tráfico es la base. DebugSwift intercepta todas las solicitudes y respuestas HTTP, formatea bellamente el JSON y resalta la sintaxis. Pero también hay "funcionalidades asesinas":
- Inspector de WebSocket: Rastrea automáticamente los frames sin configuración adicional.
- Descifrado en tiempo real: Si tu backend entrega datos cifrados (AES-256/128), puedes registrar una clave en DebugSwift, y el inspector te mostrará el texto limpio.
- Filtrado: Puedes ocultar solicitudes de analytics para que no saturen el log.

2. Auditoría visual del interfaz
A veces necesitas entender por qué una vista se desplazó un par de píxeles. DebugSwift tiene un inspector de jerarquía 3D integrado (similar al de Xcode, pero funcionando directamente en la app).
- Superposición de cuadrícula: Superpone una cuadrícula para verificar la alineación.
- Animaciones lentas: Ralentiza las animaciones para examinar cada fotograma de transición.
- Rastreo de renderizado en SwiftUI: Una funcionalidad experimental que resalta los componentes de SwiftUI que se vuelven a renderizar. Esto es invaluable para la optimización del rendimiento.

3. Caza de fugas de memoria
Un strong reference olvidado en un closure — un clásico. DebugSwift monitorea ViewControllers y Views en tiempo real. Si un objeto debería haber sido eliminado de la memoria pero se quedó ahí, la herramienta lanza una alarma. También hay un widget de rendimiento que muestra FPS, carga de CPU y uso de memoria superpuesto en tu interfaz.
4. Acceso a los entresijos de la app
Ya no necesitas escribir print(UserDefaults.standard.dictionaryRepresentation()).
En la sección Resources, puedes:
- Ver y editar
UserDefaultsyKeychain. - Explorar archivos en Sandbox y App Groups.
- Inspeccionar bases de datos SQLite y Realm.
- Copiar el token APNS con un botón (¡cuánto tiempo hemos ahorrado en esto!).
5. Acciones personalizadas
Esta es mi parte favorita. Puedes añadir tus propios botones al menú de depuración. Por ejemplo: "Limpiar caché", "Cambiar servidor a Dev/Stage" o "Llenar carrito con productos de prueba".
DebugSwift.App.shared.customAction = {
[
.init(title: "Инструменты разработки", actions: [
.init(title: "Сбросить состояние") {
// Ваша логика сброса
}
])
]
}
Cómo funciona bajo el capó
El proyecto está escrito en Swift y requiere iOS 14+. Curiosamente, los desarrolladores prestaron mucha atención al soporte de Apple Silicon. Si alguna vez has luchado con errores de arquitectura en el simulador de Xcode en chips M1/M2, puedes olvidarte de eso aquí — la biblioteca se distribuye como un XCFramework adecuado.
Para interceptar el tráfico de red, utiliza logging de URLSession. Si creas configuraciones de sesión de antemano, DebugSwift ofrece métodos convenientes para inyectar tu propio protocolo:
let config = URLSessionConfiguration.default
DebugSwift.Network.shared.injectIntoConfiguration(config)
let session = URLSession(configuration: config)
Casos de uso prácticos
Caso #1: Pruebas remotas. Envías una compilación de TestFlight a un tester. Encuentran un bug en la lógica de descuentos. En lugar de pedir logs a través de la consola de Mac, el tester simplemente agita el teléfono (Shake to Toggle), abre DebugSwift, va al log de red y te envía una captura de pantalla de la respuesta JSON del servidor.
Caso #2: Depuración de push. Necesitas probar cómo la app maneja un payload específico de notificación push. DebugSwift tiene un simulador de push: simplemente pegas el JSON, y la app lo procesa como si viniera de Apple.

Cómo empezar
La instalación es directa a través de Swift Package Manager o CocoaPods. En AppDelegate, solo toma un par de líneas:
import DebugSwift
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
private let debugSwift = DebugSwift()
func application(_ application: UIApplication, didFinishLaunchingWithOptions ...) -> Bool {
#if DEBUG
debugSwift.setup()
debugSwift.show()
#endif
return true
}
}
Consejo: Siempre envuelve la llamada en #if DEBUG para asegurar que las herramientas de depuración no terminen accidentalmente en el App Store.
Veredicto: ¿Vale la pena probar?
Si estás cansado de los reinicios constantes de print() y las reconstrucciones de proyecto solo para verificar un valor en la base de datos o los encabezados de solicitud — definitivamente sí. DebugSwift ahorra horas de tiempo, especialmente durante el desarrollo activo y la integración de APIs.
El proyecto se desarrolla activamente, la comunidad está viva, y el soporte de Swift 6 sugiere que la herramienta seguirá siendo relevante durante mucho tiempo.
Prueba el proyecto aquí: https://github.com/DebugSwift/DebugSwift
¿Qué herramientas de depuración usas? ¡Comparte en los comentarios!
Proyectos relacionados