Depurar um iPhone no Windows por USB: capturas de tela e logs com Python
Por Nesim Razon, desenvolvedor Android independente · 2026-11-14
No Android, o adb facilita tirar uma captura de tela ou ler um log de um celular na sua mesa. Eu não esperava nada assim para um iPhone no Windows, mas existe um caminho: o pacote de drivers da própria Apple e uma ferramenta Python de código aberto. Esta é a configuração que funcionou em um iPhone 7 com iOS 15.8, as armadilhas na ordem em que as encontrei e um erro real que resolvi com ela.
O que você precisa
- O app Apple Devices da Microsoft Store. Ele traz o driver USB para iPhones e o winget pode instalá-lo.
- Python 3 e o pacote pymobiledevice3.
- Um celular com cabo, a tela desbloqueada e o aviso de confiança aceito no celular.
A ordem da instalação importa
Depois de instalar o Apple Devices, o iPhone ainda aparecia no Gerenciador de Dispositivos com status de erro, e a ferramenta respondia que não conseguia conectar ao socket do usbmux. A solução foi abrir o app Apple Devices uma vez, com o celular conectado e desbloqueado, aceitar o aviso de confiança e deixá-lo terminar a instalação dos drivers. Só então o celular foi listado corretamente.
A armadilha do Python
Na minha máquina o primeiro python do caminho era um velho Python 2.7, então o comando pip simples não instalou nada útil. No Windows o lançador py escolhe o certo: instale com py -3 -m pip install pymobiledevice3 e sempre execute a ferramenta como py -3 -m pymobiledevice3, porque o executável que ela cria não está no caminho.
Quatro comandos que uso o tempo todo
- usbmux list mostra o celular conectado com seu modelo e versão do iOS.
- mounter auto-mount baixa e monta uma vez a imagem de disco de desenvolvedor. No iOS 15 não precisei ativar nenhum Modo de Desenvolvedor.
- developer dvt launch seguido do identificador do pacote inicia o app.
- developer screenshot seguido de um nome de arquivo salva o que a tela mostra naquele momento.
Ler o log sem se afogar
syslog live imprime tudo o que o celular registra, que é muita coisa. Filtrar pelo nome do processo deixa só o seu app. Mesmo assim meu app gerou mais de um megabyte de log em trinta segundos, então escrevo a saída em um arquivo e procuro depois em vez de ver rolar.
Suas próprias mensagens são as mais fáceis de achar. No Swift uma chamada a NSLog aparece neste log, então marco minhas linhas com o nome do app e procuro essa marca.
Um exemplo real: por que o banner estava vazio?
Meu jogo não mostrava o banner de anúncios depois que troquei a unidade de anúncios de demonstração do Google pela real. O celular não mostrava nenhum erro visível. Adicionei um pequeno delegado à visualização do banner que escreve com NSLog o resultado do pedido de anúncio, compilei, instalei pelo TestFlight e li o log por USB.
A resposta foi uma só linha: não há anúncio para mostrar. Isso significa que o servidor de anúncios não tinha com o que preencher, o que é normal para uma unidade de anúncios novinha em um app que ainda não está na loja. Sem o log eu teria continuado procurando um erro no meu código.
Limites e privacidade
Uma captura de tela pega o que estiver na tela e um log sem filtro contém linhas de outros apps. Se o celular é compartilhado, como o meu com outro projeto, primeiro abro só o meu app e filtro o log pelo nome do processo. A ferramenta funciona sobre a confiança que você dá ao computador, então aceite o aviso de confiança apenas em máquinas suas.
Perguntas frequentes
Posso tirar capturas de tela de um iPhone no Windows?
Sim. Com o driver Apple Devices e a ferramenta pymobiledevice3 você monta uma vez a imagem de disco de desenvolvedor e depois salva capturas pela linha de comando.
Preciso de um Mac ou do Xcode para isso?
Não. O driver vem do app Apple Devices e a ferramenta é um pacote Python, então um notebook com Windows basta.
Por que a ferramenta diz que não consegue conectar ao usbmux?
O driver USB da Apple ainda não estava em execução. Abra o app Apple Devices uma vez com o celular conectado e confiável e tente de novo.
Como leio apenas o log do meu próprio app?
Use syslog live com a opção de nome do processo, escreva a saída em um arquivo e procure suas mensagens marcadas.
Mais do blog
- Por que meu link da App Store deu 404 e a página mostrava capturas de 2018
- Diretriz 2.1 da App Store "Information Needed": o que enviei
- Capturas de tela da App Store sem celular: Robolectric, um carregador de imagens falso e um navegador sem interface
- Um código QR para duas lojas de apps: uma pequena página de redirecionamento
- Reescrever para Kotlin Multiplatform sem mudar o comportamento: o código antigo como oráculo de testes
- Uma lista remota sem servidor para "Mais jogos": um arquivo JSON no GitHub Pages