Perché un agente di coding per iOS ha bisogno di un Mac vero
Un agente può scrivere Swift ovunque. Ma può compilare, avviare e vedere un’app iOS solo su un Mac. Questo divario è l’unico motivo per cui il lavoro iOS ha bisogno di un Mac nel ciclo. È anche il motivo per cui un agente con un Mac diventa molto più bravo. Può controllare il proprio lavoro. Questa pagina elenca cosa esiste solo su macOS. Poi mostra il ciclo che configuriamo per gli agenti sulle nostre macchine.
Cosa succede solo su macOS
- Compilare l’app. xcodebuild e Xcode esistono solo su macOS. Una macchina Linux può compilare pacchetti Swift e Swift lato server. Non può produrre un’app iOS.
- Avviarla. Il simulatore iOS fa parte di Xcode. Senza simulatore non c’è modo di avviare l’app che l’agente ha appena modificato.
- Vederla. Uno screenshot dell’app in esecuzione è il modo in cui un agente scopre che il layout si è rotto. Per farlo serve il simulatore.
- Test della UI. XCUITest pilota l’app su un simulatore o su un dispositivo. Solo su macOS.
- Firma e upload. La firma del codice, i profili di provisioning e gli upload su App Store Connect passano tutti dagli strumenti Apple su macOS.
Quindi un agente su Linux può modificare i tuoi file Swift e tirare a indovinare. Un agente su un Mac può modificare, compilare, avviare, guardare e correggere. Quello utile è il secondo.
Il ciclo, passo per passo
Configuralo una volta e metti i comandi nel file di istruzioni del tuo agente. Così li usa senza che tu debba dirglielo ogni volta. Per prima cosa, trova un simulatore e avvialo.
xcrun simctl list devices available xcrun simctl boot "iPhone 16"
Compila per quel simulatore. Sostituisci lo scheme con il tuo.
xcodebuild -scheme MyApp \ -destination 'platform=iOS Simulator,name=iPhone 16' \ -derivedDataPath build \ build
Installa e avvia la build.
xcrun simctl install booted build/Build/Products/Debug-iphonesimulator/MyApp.app xcrun simctl launch booted com.example.MyApp
Fai uno screenshot che l’agente può leggere.
xcrun simctl io booted screenshot /tmp/screen.png
Claude Code e Codex possono entrambi aprire un file immagine. Di’ all’agente di fare uno screenshot dopo ogni modifica alla UI. Deve descrivere cosa vede prima di decidere che ha finito. Questa sola istruzione intercetta quasi tutti gli errori di layout.
Esegui i test allo stesso modo
xcodebuild -scheme MyApp \ -destination 'platform=iOS Simulator,name=iPhone 16' \ -derivedDataPath build \ test
Il percorso dei derived data è importante. Se lo tieni dentro la cartella del progetto, la seconda build è incrementale e dura secondi invece di minuti. Un agente che aspetta quattro minuti per ogni build fa un quarto del lavoro.
Metti il ciclo nel file di istruzioni
Entrambi gli agenti leggono un file nella radice del repository per le istruzioni del progetto. Claude Code legge CLAUDE.md e Codex legge AGENTS.md. Metti lì il ciclo, così ogni sessione parte già con quello.
## 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.
Cosa fa inciampare gli agenti
- Xcode non selezionato. Dopo aver installato un nuovo Xcode, esegui xcode-select per puntarci. Altrimenti xcodebuild usa quello vecchio.
- Simulatore non avviato. Il comando di avvio dell’app fallisce con un errore vago. Avvia prima il simulatore e tienilo acceso.
- Runtime non installato. Un Xcode appena installato non ha nessun runtime iOS finché non ne scarichi uno. Il download pesa diversi gigabyte e va fatto prima che l’agente inizi.
- Nessuna sessione di login. Il simulatore è un’applicazione grafica. Su una macchina headless senza nessuno connesso non parte. L’utente dell’agente ha bisogno di una sessione desktop attiva. Per questo il login automatico conta su un Mac senza supervisione.
Cosa configuriamo per te
Su un nostro Mac per agenti, Xcode è installato con un runtime iOS già scaricato. L’utente dell’agente ha una sessione desktop sempre attiva. Claude Code e Codex aspettano il tuo login. Aggiungi il ciclo qui sopra al tuo file di istruzioni, e l’agente può compilare e vedere la tua app dal primo task. La guida alle funzionalità spiega cos’altro funziona sulla macchina e cosa no.
Domande frequenti
Claude Code può compilare un’app iOS su Linux?
+
No. Su Linux può modificare file Swift e compilare pacchetti Swift che non dipendono dai framework Apple. Compilare un’app iOS richiede Xcode, che gira solo su macOS.
L’agente ha bisogno di un iPhone fisico?
+
Non per la maggior parte del lavoro. Il simulatore copre build, avvio, screenshot e test della UI. Un dispositivo serve per cose come la fotocamera, le notifiche push e le prestazioni su hardware reale.
L’agente può fare screenshot del simulatore?
+
Sì, con il comando simctl screenshot, purché un simulatore sia avviato e l’utente dell’agente abbia una sessione desktop. Poi l’agente può aprire l’immagine e leggerla.
Quale versione di Xcode userà l’agente?
+
Quella a cui punta xcode-select. Fissala nel tuo file di istruzioni. Su una macchina con più versioni, di’ all’agente di controllare prima di compilare.