01 / LIVE
Cada petición, en tiempo real.
La lista en directo de las peticiones de tu app, agrupadas por la pantalla en curso cuando salieron. Busca y filtra por clase de estado y por método.
Grábalo una vez. Reprodúcelo siempre.
Un depurador de red dentro de tu app: dos líneas en tu AppDelegate, sin proxy ni certificados que instalar. Tu SSL pinning sigue funcionando.
01
Capturar
Cada petición, en el momento en que tu app la hace.
02
Inspeccionar
Agrupadas por la pantalla que las envió.
03
Compartir
Un único archivo cifrado para tu equipo.
04
Reproducir
Mismas respuestas, mismo bug, en cualquier lugar.
El problema
Bien en dev. Roto en UAT.
QA encuentra un bug en su teléfono. En el tuyo, todo funciona. Otra cuenta, otros datos u otro backend: el bug nunca aparece para ti. A menos que se haya grabado.
| Entorno | Estado | Resultado |
|---|---|---|
| Backend UAT · teléfono de QA | 422 | Bug |
| Backend dev · tu simulador | 200 | No reproducible |
| Replay · tu simulador | 422 | Reproducido |
Preproducción, UAT, feature flags, cuentas de prueba: el bug solo vive donde tú no estás.
Con DiagnosticSDK
Replay trae a tu simulador exactamente las respuestas grabadas.
VPN, lista de IP permitidas, cuenta de prueba caducada, datos que han cambiado.
Con DiagnosticSDK
El archivo de sesión es tu backend: cada petición grabada se responde desde él. Las demás van a la red como siempre.
La API todavía no existe o el servidor está caído, y el equipo de la app espera.
Con DiagnosticSDK
Crea mocks en Session Studio (formulario o cURL pegado), carga el archivo en la app y lanza Replay: cada petición simulada recibe su respuesta, como si el backend estuviera ahí.
Replay
Las peticiones que coinciden reciben las respuestas grabadas. Todo lo demás va a la red, sin cambios.
01
Todo ya está grabado, agrupado por pantalla.
02
Como JSON simple o cifrada con Safe export.
JSON simple
Legible por quien lo reciba.
Dx_4f2a9c1.json · 84 kB
Se abre en cualquier sitio: un editor de texto, Session Studio, tus propias herramientas. Para consultarlo y reproducirlo en la app, impórtalo desde la pantalla History del SDK.
Safe export
Cifrado con contraseña (AES-256-GCM).
Dx_4f2a9c1_S.json · 84 kB
Tras importarla, la sesión queda bloqueada: no se puede ver ni reproducir hasta introducir la contraseña para descifrarla.
03
Mismas respuestas, mismo bug, en tu simulador o dispositivo de prueba.
1 petición que no estaba grabada fue a la red
Coincidencia: Strict (método, ruta, parámetros) o Ignore query (método, ruta).
Una sesión. Todas las respuestas.
No es una simple lista de URL: la pantalla que hizo cada petición, lo que pasó después y la sesión exacta que vivió tu usuario.
01 / LIVE
La lista en directo de las peticiones de tu app, agrupadas por la pantalla en curso cuando salieron. Busca y filtra por clase de estado y por método.
02 / SCREEN MAP
Cada visita a un UIViewController que lanza peticiones se convierte en su propio capítulo. La cronología de navegación se conserva, incluso si una pantalla se visita dos veces.
03 / HISTORIAL DE SESIONES
Las sesiones se guardan automáticamente cuando la app pasa a segundo plano. Abre cualquier sesión anterior en la misma vista que Live.
05 / ENVÍO SEGURO
Exporta una sesión como JSON simple, o cífrala con AES-256-GCM y una contraseña que eliges tú. Sin esa contraseña, el archivo no se puede abrir: ni en la app ni en Session Studio.
Escuchamos. Nunca tocamos.
La mayoría de los depuradores capturan tu petición y la reenvían desde su propia sesión. Nosotros observamos la URLSession de tu app: los desafíos de autenticación, los certificados, las cookies y la política TLS siguen funcionando.
Interceptor típico
Reenviada desde una segunda sesión: el pinning, los certificados y las cabeceras de sesión se quedan atrás.
DiagnosticSDK
Misma petición, mismo delegado. Observada al pasar, nunca reenviada.
Una integración mínima
Paso 1 · Añadir el paquete
En Xcode: File → Add Package Dependencies…
import DiagnosticSDK @mainfinal class AppDelegate: UIResponder, UIApplicationDelegate { private lazy var networkInterceptor = NetworkInterceptor() func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { #if DEBUG networkInterceptor.start() #endif return true }}Listo cuando tú lo estés