Consola en Xcode: conceptos clave, salida de datos y depuración

Autor: IT Sectr Publicado: 2026-05-06 Tiempo de lectura: 8 min

La Consola en Xcode es una herramienta de depuración para el desarrollo iOS que muestra la salida de NSLog, print, os_log y los registros de fallos de la aplicación en tiempo real. Según Apple Unified Logging, a partir de iOS 10 Apple recomienda usar os_log en lugar de NSLog para la recopilación centralizada de mensajes a través de Unified Logging System. La Consola combina la salida del depurador y los mensajes del sistema en una única ventana de Debug Area, accesible en cualquier momento del desarrollo.

Puntos clave

  • Consola Xcode — ventana de Debug Area para ver NSLog, os_log, print y registros de fallos de iOS
  • Unified Logging System — sistema moderno de registro de Apple con categorías, niveles y persistencia en disco
  • os_log — API recomendada para registro con soporte de configuración dinámica de niveles
  • Registros de fallos se muestran automáticamente en la Consola cuando la aplicación falla en un dispositivo o simulador
  • Registros de breakpoints — envían mensajes a la Consola sin detener la ejecución mediante Debugger Command

Qué es la Consola en Xcode

La Consola es parte del Debug Area en Xcode, ubicada en el panel inferior del editor (View → Debug Area → Activate Console, atajo Cmd + Shift + Y). La Consola muestra toda la salida de texto de la aplicación en ejecución: mensajes de NSLog, os_log, print, advertencias en tiempo de ejecución y volcados automáticos de excepciones cuando la aplicación falla.

La Consola funciona tanto en el simulador como en un dispositivo físico. En el simulador, los mensajes llegan instantáneamente a través de una tubería local; en un dispositivo, llegan mediante conexión USB con un retraso de 1–3 fotogramas. Para aplicaciones en producción, la Consola en el dispositivo no está disponible — los desarrolladores confían en Crashlytics o Unified Logging con recopilación remota mediante log collect.

A diferencia de la aplicación de sistema Console.app en Mac, la ventana de Consola en Xcode solo muestra registros de la aplicación actual en ejecución (con capacidad de filtrado). Console.app recopila registros de todos los procesos en Mac, incluidos los simuladores iOS. Sin embargo, para depurar aplicaciones iOS, los desarrolladores usan la Consola integrada de Xcode debido a su integración con el depurador LLDB.

API de registro: NSLog, os_log y print

Tres API principales están disponibles para el desarrollador iOS para la salida en la Consola: NSLog (obsoleto), os_log (recomendado) y print (solo Swift). Cada una tiene sus propias características en cuanto a rendimiento, formato y compatibilidad con Unified Logging System.

NSLog — Registro clásico

NSLog es una función de Foundation, disponible en Objective-C y Swift. NSLog muestra un mensaje con marca de tiempo, nombre del proceso y PID. Desventajas: NSLog escribe en el búfer del sistema de forma síncrona, bloqueando el hilo actual durante la escritura. Con llamadas frecuentes (por ejemplo, en un bucle), NSLog crea un retardo notable. Apple no recomienda NSLog para proyectos nuevos, pero sigue siendo compatible con código heredado y bibliotecas de terceros.

os_log — Estándar moderno

os_log es una API de os.framework, introducida en iOS 10. os_log es asíncrono: el mensaje se pone en cola y se escribe en el búfer sin bloquear el hilo de llamada. Según WWDC 2016, os_log es 50 veces más rápido que NSLog en escenarios de alta carga. os_log también admite control dinámico: los mensajes de nivel DEBUG solo se recopilan en compilaciones Debug, y en Release se ignoran sin sobrecarga.

print() — Salida solo Swift

print() es el método de salida más simple en Swift. print escribe en stdout (salida estándar), que Xcode redirige a la Consola. print no añade metadatos (hora, nivel), pero admite el almacenamiento en búfer de stdout. Para depuración rápida, print es una herramienta conveniente, pero para registro permanente se queda corto frente a os_log en funcionalidad y control.

swift
import os.log

// NSLog — obsoleto, bloqueante
NSLog("Application started")

// os_log — recomendado, asíncrono
let log = OSLog(
    subsystem: "com.myapp",
    category: "lifecycle"
)
os_log("Application started", log: log)

// print — salida Swift rápida
print("Application started")

Unified Logging: categorías, niveles y subsistemas

Unified Logging System (ULS) es la infraestructura de registro integral de Apple, introducida en iOS 10 y macOS Sierra. ULS recopila mensajes de todos los procesos del sistema en un único almacenamiento con capacidad de acceso remoto mediante la herramienta de línea de comandos log en Mac. Los desarrolladores usan os_log para escribir en ULS y la Consola para leer.

Subsistemas y categorías

Cada OSLog se identifica mediante un par de subsystem (por ejemplo, com.myapp.network) y category (por ejemplo, http, websocket). El subsistema es el dominio de la aplicación (una aplicación puede tener varios subsistemas para diferentes módulos). La categoría es un componente dentro del subsistema. La combinación subsistema + categoría permite filtrar registros de forma flexible en la Consola y log collect.

Niveles de registro de OSLog

NivelOSLogTypeVisualización en ConsolaRecopilación en Release
Default.defaultSiempre
Info.infoCon UI de os_log activada
Debug.debugSolo en compilación DebugNo
Error.errorSiempre con etiqueta roja
Fault.faultSiempre con etiqueta morada

log collect — Recopilación remota de registros

El comando log collect en Mac reúne registros archivados de un dispositivo iOS conectado en un archivo .logarchive. Este archivo se puede abrir en Console.app en Mac para un análisis detallado, incluidos mensajes de os_log, registros de fallos y diagnósticos del sistema. Para habilitar la recopilación en el dispositivo, es necesario activar el Modo Desarrollador y conectar el dispositivo por USB.

Trabajar con la Consola: depuración paso a paso y análisis de registros de fallos

El trabajo práctico con la Consola incluye tres escenarios principales: registro activo durante el desarrollo, análisis de registros de fallos después de un fallo y diagnóstico remoto mediante .logarchive. Cada escenario tiene un conjunto óptimo de herramientas y configuraciones.

Configuración de la Consola para el desarrollo

Se recomienda crear un OSLog separado para cada módulo de la aplicación con niveles: debug (depuración detallada), info (transiciones clave de estado), error (excepciones y fallos). En la Consola de Xcode, active el filtro por el subsistema de su aplicación para excluir los mensajes del sistema que crean ruido y distraen de la lógica de la aplicación.

Análisis de registros de fallos

Cuando la aplicación falla, Xcode detiene automáticamente la ejecución y muestra el hilo donde ocurrió el fallo, con un stack trace completo en la Consola. La primera línea del registro de fallo contiene el tipo de excepción (NSException, EXC_BAD_ACCESS) y el motivo. Estudie el stack trace de abajo arriba: el último método llamado es la ubicación del fallo. Para direcciones cifradas (en Release), se requiere symbolication mediante dSYM.

swift
// Ejemplo de configuración modular de OSLog
extension OSLog {
    static let uiLifecycle = OSLog(
        subsystem: "com.myapp.ui",
        category: "lifecycle"
    )
    static let network = OSLog(
        subsystem: "com.myapp.network",
        category: "http"
    )
    static let database = OSLog(
        subsystem: "com.myapp.data",
        category: "core-data"
    )
}

// Uso con niveles
os_log("View did load", log: .uiLifecycle, type: .debug)
os_log("HTTP 200 received", log: .network, type: .info)
os_log("Failed to save: \(error.localizedDescription)",
    log: .database, type: .error)

Funciones avanzadas: registros de breakpoints y formatos personalizados

La Consola de Xcode admite varias funciones avanzadas que van más allá del registro simple. Los registros de breakpoints permiten enviar mensajes a la Consola sin detener la ejecución, y los comandos LLDB en Debugger Command brindan control completo sobre el formato de la salida.

Registros de breakpoints sin detención

Puede configurar un breakpoint para que muestre un mensaje en la Consola y continúe la ejecución automáticamente. Coloque un breakpoint en la línea deseada, haga clic derecho → Edit Breakpoint → agregue Debugger Command: “po self” o “expr @import UIKit” + Debugger Command: “po self.view”. Marque Automatically continue after evaluating. Después de ejecutar, el breakpoint mostrará el resultado del comando en la Consola cada vez que se alcance la línea, sin interrumpir el hilo.

Comandos LLDB en la Consola

La Consola de Xcode admite la ejecución de comandos LLDB arbitrarios mientras se está detenido en un breakpoint. po (print object) muestra la descripción de un objeto, p (print) muestra valores primitivos, y expr ejecuta expresiones Swift/ObjC. Para salida con formato, use p/CGRectGetWidth. La salida de LLDB aparece en la Consola inmediatamente después de alcanzar el breakpoint.

swift
func processUserData(user: User) {
    // Breakpoint aquí con Debugger Command:
    // po "User name: \(user.name)"
    // expr user.age = 30
    print("Processing user: \(user.name)")
}

// Ejemplo de registro personalizado con secuencia
func trackMethodCall(
    file: String = #file,
    function: String = #function
) {
    os_log("[\(function)] called",
        log: .uiLifecycle, type: .debug)
}

Integración con Instruments

La Consola de Xcode está estrechamente integrada con Instruments — la herramienta de perfilado de Xcode. Al ejecutar la aplicación mediante Product → Profile con la plantilla Logging, todos los mensajes de os_log se registran en la traza de Instruments con marcas de tiempo. Esto permite ver simultáneamente registros, rendimiento y eventos del sistema en una sola línea de tiempo, lo cual es crítico para diagnosticar condiciones de carrera y regresiones de rendimiento.

Preguntas frecuentes

¿Cuál es la diferencia entre NSLog y os_log?

NSLog es síncrono, bloquea el hilo y siempre muestra el mensaje. os_log es asíncrono, 50 veces más rápido en escenarios de alta carga, admite categorías y desactiva dinámicamente los niveles de depuración en compilaciones Release sin pérdida de rendimiento.

¿Por qué la Consola no muestra os_log de la aplicación?

Verifique el nivel de registro: por defecto, la Consola solo muestra default y superior. Para ver info y debug, abra el menú de os_log en la Consola de Xcode y seleccione Include Info Messages e Include Debug Messages en la configuración del esquema (Edit Scheme → Run → Arguments → OS_ACTIVITY_MODE = debug).

¿Cómo guardar el registro de la Consola en un archivo para compartir?

Seleccione los mensajes deseados en la Consola, cópielos (Cmd + C) y péguelos en cualquier editor de texto. Para un volcado completo, use el comando de terminal: sudo log collect --device --output /tmp/app_logs.logarchive — guarda todos los registros del dispositivo iOS en un formato estructurado.

¿Cómo habilitar os_log en compilación Release?

os_log de tipo .default y .error funcionan en Release por defecto. Para .info y .debug en Release, debe agregar el argumento de inicio -OSLogPreferencesApp “$(PRODUCT_BUNDLE_IDENTIFIER):debug” en el esquema de Xcode. Sin este argumento, los mensajes de depuración no se recopilan en Release, lo que ahorra recursos del dispositivo.

¿Cómo encontrar un registro de fallo específico en el historial?

Abra Window → Organizer → Crashes en Xcode. El Organizador muestra todos los registros de fallos recopilados de los dispositivos de los testers, agrupados por tipo de excepción. La symbolication requiere un archivo .dSYM de la compilación en la que ocurrió el fallo — Xcode lo encuentra automáticamente si hay un archivo disponible.

Resumen

  • Consola Xcode — herramienta integrada para ver NSLog, os_log, print y registros de fallos en Debug Area
  • os_log — API recomendada con escritura asíncrona, categorías y soporte de Unified Logging System
  • Unified Logging proporciona subsistemas y categorías para la organización modular de registros
  • Registros de breakpoints muestran mensajes en la Consola sin detener la ejecución de la aplicación
  • Comandos LLDB po, p, expr brindan control completo sobre el formato de salida en la consola
  • Análisis de registros de fallos comienza con la excepción en la Consola y requiere symbolication mediante dSYM para Release
  • Integración con Instruments permite combinar registros con perfilado en una sola línea de tiempo

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también