Por que um agente de código para iOS precisa de um Mac de verdade
Um agente consegue escrever Swift em qualquer lugar. Mas só consegue compilar, rodar e ver um app de iOS em um Mac. Essa lacuna é o motivo de o trabalho com iOS precisar de um Mac no ciclo. É também o motivo de um agente com um Mac ficar tão melhor. Ele consegue conferir o próprio trabalho. Esta página lista o que só existe no macOS e depois mostra o ciclo que configuramos para os agentes nas nossas máquinas.
O que só acontece no macOS
- Compilar o app. O xcodebuild e o Xcode só existem no macOS. Uma máquina Linux compila pacotes Swift e Swift de servidor. Ela não consegue gerar um app de iOS.
- Rodar o app. O Simulador do iOS faz parte do Xcode. Sem simulador, não há como rodar o app que o agente acabou de mudar.
- Ver o app. Um screenshot do app rodando é como o agente descobre que o layout quebrou. Isso precisa do simulador.
- Testes de interface. O XCUITest controla o app em um simulador ou dispositivo. Só no macOS.
- Assinar e enviar. A assinatura de código, os perfis de provisionamento e os envios para o App Store Connect passam todos pelas ferramentas da Apple no macOS.
Então um agente no Linux consegue editar seus arquivos Swift e adivinhar. Um agente em um Mac consegue editar, compilar, rodar, olhar e corrigir. O segundo é o que serve.
O ciclo, passo a passo
Configure isso uma vez e coloque os comandos no arquivo de instruções do seu agente, para ele usar sem você precisar pedir toda vez. Primeiro, encontre um simulador e inicie.
xcrun simctl list devices available xcrun simctl boot "iPhone 16"
Compile para esse simulador. Troque o scheme pelo seu.
xcodebuild -scheme MyApp \ -destination 'platform=iOS Simulator,name=iPhone 16' \ -derivedDataPath build \ build
Instale e abra o build.
xcrun simctl install booted build/Build/Products/Debug-iphonesimulator/MyApp.app xcrun simctl launch booted com.example.MyApp
Tire um screenshot que o agente consiga ler.
xcrun simctl io booted screenshot /tmp/screen.png
O Claude Code e o Codex conseguem abrir um arquivo de imagem. Peça ao agente para tirar um screenshot depois de cada mudança na interface e descrever o que vê antes de decidir que terminou. Essa única instrução pega a maioria dos erros de layout.
Rode os testes do mesmo jeito
xcodebuild -scheme MyApp \ -destination 'platform=iOS Simulator,name=iPhone 16' \ -derivedDataPath build \ test
O caminho dos derived data importa. Mantê-lo dentro da pasta do projeto faz o segundo build ser incremental e levar segundos em vez de minutos. Um agente que espera quatro minutos por build faz um quarto do trabalho.
Coloque o ciclo no arquivo de instruções
Os dois agentes leem um arquivo na raiz do repositório com as instruções do projeto. O Claude Code lê o CLAUDE.md e o Codex lê o AGENTS.md. Coloque o ciclo lá para toda sessão começar com ele.
## Building and checking this app - Build: xcodebuild -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 16' -derivedDataPath build build - Run: xcrun simctl install booted build/Build/Products/Debug-iphonesimulator/MyApp.app && xcrun simctl launch booted com.example.MyApp - Look: xcrun simctl io booted screenshot /tmp/screen.png, then open the image - After any UI change, build, run, and look before saying it is done. - Tests: same xcodebuild command with test instead of build.
O que costuma atrapalhar os agentes
- Xcode não selecionado. Depois de instalar um Xcode novo, rode o xcode-select para apontar para ele. Senão o xcodebuild usa o antigo.
- Simulador não iniciado. O comando de abrir falha com um erro vago. Inicie o simulador antes e deixe ele ligado.
- Runtime não instalado. Um Xcode novo não tem runtime de iOS até você baixar um. Esse download tem vários gigabytes e precisa acontecer antes de o agente começar.
- Sem sessão de login. O simulador é um aplicativo gráfico. Em uma máquina sem tela e sem ninguém logado, ele não inicia. O usuário do agente precisa de uma sessão de área de trabalho ativa. Por isso o login automático importa em um Mac sem supervisão.
O que configuramos para você
Em um Mac para agentes nosso, o Xcode vem instalado com um runtime de iOS já baixado. O usuário do agente tem uma sessão de área de trabalho sempre ativa. O Claude Code e o Codex esperam o seu login. Adicione o ciclo acima ao seu arquivo de instruções e o agente consegue compilar e ver o seu app desde a primeira tarefa. O guia de recursos mostra o que mais funciona na máquina e o que não funciona.
Perguntas frequentes
O Claude Code consegue compilar um app de iOS no Linux?
+
Não. Ele consegue editar arquivos Swift no Linux e compilar pacotes Swift que não dependem dos frameworks da Apple. Compilar um app de iOS exige o Xcode, que só roda no macOS.
O agente precisa de um iPhone físico?
+
Não para a maior parte do trabalho. O simulador cobre compilar, rodar, screenshots e testes de interface. Um aparelho é necessário para coisas como câmera, notificações push e desempenho em hardware real.
O agente consegue tirar screenshots do simulador?
+
Sim, com o comando simctl screenshot, desde que um simulador esteja iniciado e o usuário do agente tenha uma sessão de área de trabalho. Depois o agente pode abrir a imagem e ler.
Qual versão do Xcode o agente vai usar?
+
A que o xcode-select indicar. Fixe a versão no seu arquivo de instruções e, em uma máquina com várias versões, peça ao agente para conferir antes de compilar.