Depurar un iPhone desde Windows por USB: capturas y registros con Python
Por Nesim Razon, desarrollador Android independiente · 2026-11-14
En Android, adb facilita hacer una captura o leer un registro de un teléfono en tu mesa. No esperaba algo así para un iPhone en Windows, pero existe un camino: el paquete de controladores de Apple y una herramienta de Python de código abierto. Esta es la configuración que funcionó en un iPhone 7 con iOS 15.8, las trampas en el orden en que las encontré y un fallo real que resolví con ella.
Qué necesitas
- La app Apple Devices de la Microsoft Store. Trae el controlador USB para iPhone y winget puede instalarla.
- Python 3 y el paquete pymobiledevice3.
- Un teléfono con cable, la pantalla desbloqueada y el aviso de confianza aceptado en el teléfono.
El orden de instalación importa
Tras instalar Apple Devices, el iPhone seguía apareciendo en el Administrador de dispositivos con un estado de error, y la herramienta respondía que no podía conectar con el socket de usbmux. La solución fue abrir una vez la app Apple Devices con el teléfono conectado y desbloqueado, aceptar el aviso de confianza y dejar que terminara de instalar los controladores. Solo entonces el teléfono se listó bien.
La trampa de Python
En mi máquina el primer python de la ruta era un viejo Python 2.7, así que el comando pip a secas no instaló nada útil. En Windows el lanzador py elige el correcto: instala con py -3 -m pip install pymobiledevice3 y ejecuta siempre la herramienta como py -3 -m pymobiledevice3, porque el ejecutable que crea no está en la ruta.
Cuatro comandos que uso todo el rato
- usbmux list muestra el teléfono conectado con su modelo y su versión de iOS.
- mounter auto-mount descarga y monta una vez la imagen de disco de desarrollador. En iOS 15 no tuve que activar ningún modo de desarrollador.
- developer dvt launch seguido del identificador del paquete inicia la app.
- developer screenshot seguido de un nombre de archivo guarda lo que muestra la pantalla en ese momento.
Leer el registro sin ahogarse
syslog live imprime todo lo que el teléfono registra, que es muchísimo. Filtrar por el nombre del proceso deja solo tu app. Aun así, mi app produjo más de un megabyte de registro en treinta segundos, así que escribo la salida en un archivo y busco después en lugar de verla pasar.
Tus propios mensajes son los más fáciles de encontrar. En Swift una llamada a NSLog aparece en este registro, así que etiqueto mis líneas con el nombre de la app y busco esa etiqueta.
Un ejemplo real: ¿por qué estaba vacío el banner?
Mi juego no mostraba el banner de anuncios después de cambiar de la unidad de anuncios de demostración de Google a la real. El teléfono no mostraba ningún error visible. Añadí un pequeño delegado a la vista del banner que escribe con NSLog el resultado de la petición de anuncio, compilé, instalé por TestFlight y leí el registro por USB.
La respuesta fue una sola línea: no hay anuncio que mostrar. Eso significa que el servidor de anuncios no tenía con qué rellenar, lo normal en una unidad de anuncios nueva de una app que aún no está en la tienda. Sin el registro habría seguido buscando un fallo en mi código.
Límites y privacidad
Una captura recoge lo que haya en pantalla y un registro sin filtrar contiene líneas de otras apps. Si el teléfono se comparte, como el mío con otro proyecto, primero lanzo solo mi app y filtro el registro por el nombre de su proceso. La herramienta funciona sobre la confianza que das al ordenador, así que acepta el aviso de confianza solo en equipos tuyos.
Preguntas frecuentes
¿Puedo hacer capturas de un iPhone en Windows?
Sí. Con el controlador Apple Devices y la herramienta pymobiledevice3 puedes montar una vez la imagen de disco de desarrollador y luego guardar capturas desde la línea de comandos.
¿Necesito un Mac o Xcode para esto?
No. El controlador viene de la app Apple Devices y la herramienta es un paquete de Python, así que basta un portátil con Windows.
¿Por qué la herramienta dice que no puede conectar con usbmux?
El controlador USB de Apple aún no estaba en marcha. Abre una vez la app Apple Devices con el teléfono conectado y de confianza y vuelve a intentarlo.
¿Cómo leo solo el registro de mi propia app?
Usa syslog live con la opción de nombre de proceso, escribe la salida en un archivo y busca tus mensajes etiquetados.
Más del blog
- Por qué mi enlace de la App Store dio 404 y la página mostraba capturas de 2018
- Guía 2.1 de App Store «Information Needed»: lo que envié
- Capturas de App Store sin teléfono: Robolectric, un cargador de imágenes falso y un navegador sin interfaz
- Un código QR para dos tiendas de apps: una pequeña página de redirección
- Reescribir para Kotlin Multiplatform sin cambiar el comportamiento: el código antiguo como oráculo de pruebas
- Una lista remota sin servidor para «Más juegos»: un archivo JSON en GitHub Pages