Guia

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.

Guias relacionados