Testare iOS da Windows o Linux si riduce a un fatto: l'iOS Simulator e Safari Web Inspector sono solo per macOS. Tutto il resto è fattibile. Questa guida propone una strategia di testing senza Mac, dal browser a un iPhone reale, e mostra dove Build Capgo e Live Update dimentica l'attesa.
La scala dei test
| Livello | Cosa testi | Dove viene eseguito | Serve un Mac |
|---|---|---|---|
| 1 | Web layer: logica, layout, responsive design | Browser desktop con viewport iPhone | No |
| 2 | plugin Capacitor, native bridge, permessi | Emulatore o dispositivo Android | No |
| 3 | Comportamento iOS reale: WebKit, safe areas, tastiera, push, plugin iOS | iPhone tramite TestFlight | No, con Capgo Build |
| 4 | Build QA ad hoc per dispositivi specifici | iPhone tramite IPA Ad Hoc | No, con Capgo Build |
| 5 | Debugging nativo step-through in Xcode | Mac | Sì |
La maggior parte dei bug viene rilevata ai livelli 1 e 2. Il livello 3 intercetta quelli specifici per iOS. Il livello 5 è raro per un'app Capacitor, e se accade, affittare un Mac per un'ora costa meno che comprarne uno.
Livello 1: il browser con viewport iPhone
Apri il dev server in Chrome o Edge, attiva l'emulazione del dispositivo e scegli un profilo iPhone. Capacitor espone info sulla piattaforma per gestire i rami della UI:
import { Capacitor } from '@capacitor/core';
if (Capacitor.getPlatform() === 'ios') {
// iOS-only behavior
}
Cosa non rileva: differenze di rendering WebKit, safe area insets, la tastiera iOS che sposta il viewport e qualsiasi cosa riguardi un plugin nativo.
Livello 2: prima Android, dato che il web layer è condiviso
Capacitor esegue lo stesso web bundle su entrambe le piattaforme. Il wiring dei plugin, i prompt dei permessi e le chiamate al bridge possono essere validati su Android da Windows o Linux con Chrome DevTools su chrome://inspect. Se una chiamata al plugin funziona su Android, la parte JavaScript è corretta; resta da testare l'implementazione nativa iOS al livello 3.
Guide alla configurazione: Windows e Linux.
Livello 3: un iPhone reale tramite TestFlight
Questo è il percorso principale per testare iOS senza un Mac. Workflow:
- Genera e sincronizza il progetto iOS localmente.
- Richiedi un cloud build con le credenziali di App Store Connect salvate.
- Apri TestFlight sull'iPhone.
bun run build
bunx cap sync ios
bunx @capgo/cli@latest build request com.example.app --platform ios --build-mode release
Capgo compila e firma l'app su macOS, poi la carica su App Store Connect. Apple elabora il build e TestFlight lo mostra ai tester interni in pochi minuti. I tester interni (membri del tuo team App Store Connect) non necessitano della Beta App Review, quindi l'installazione è immediata.
Credentials setup is a one-time job; bunx @capgo/cli@latest build init --platform ios lo guida, e il certificato può essere creato senza un Mac usando OpenSSL o il generatore di certificati iOS.
Cosa ottieni sul dispositivo: WebKit reale, safe areas reali, tastiera reale, push notification reali, comportamento reale dei plugin. Ecco la lista di cose che il browser non potrebbe mai dirti.
Livello 4: build ad hoc per dispositivi specifici
Quando un tester è esterno al tuo team App Store Connect, o se vuoi saltare l'elaborazione di Apple, usa un profilo Ad Hoc che elenca l'UDID del dispositivo:
bunx @capgo/cli@latest build request com.example.app \
--platform ios \
--ios-distribution ad_hoc \
--output-upload \
--output-record build.json
Il CLI restituisce un link di download temporaneo e un QR code per l'IPA. La durata è configurabile da 1 ora a 7 giorni con --output-retention. I profili ad hoc non richiedono una chiave API di App Store Connect, solo il certificato e il profilo.
Per raccogliere il UDID di un tester da Windows o Linux, chiedigli di aprire Impostazioni > Generali > Info sull'iPhone e leggere il campo, oppure usa un tool web per il UDID. Aggiungi il dispositivo nel portale Apple e rigenera il profilo.
Itera senza un nuovo build: Live Updates
Una volta installato il build di TestFlight, non ricostruire l'app per ogni modifica. Invia invece il web bundle:
bun run build
bunx @capgo/cli@latest bundle upload --channel beta
I tester sul beta channel ricevono il nuovo bundle al prossimo avvio. Per un team su Windows o Linux, questo trasforma il feedback loop di iOS da "attesa del cloud build e dell'elaborazione Apple" a "pochi secondi". I Native Build sono necessari solo se cambia un plugin, un permesso o la versione di Capacitor.
Punta la build di TestFlight verso un canale dedicato, così i beta tester non scaricheranno mai i bundle di produzione. Il guida ai canali spiega la configurazione.
Debug di iOS senza Safari Web Inspector
L'inspector di Safari funziona solo da macOS. Alternative valide su qualsiasi OS:
- Logging strutturato verso un sink remoto. Invia
console.errore inoltra gli errori a Sentry o a uno strumento simile. Il Guida a Firebase Crashlytics per Capacitor descrive la configurazione nativa di SDK. - Pannello di debug in-app. Mostra le ultime N righe di log in una view nascosta attivata da un gesto. Semplice ed efficace sulle build TestFlight.
- Log di build. I problemi di compilazione nativa compaiono nel log di build di Capgo trasmesso al terminale. Aggiungi
--ai-analyticscosì una build fallita viene spiegata automaticamente. - Riproduci su Android. Per tutto ciò che riguarda il web layer condiviso, Chrome DevTools su Android offre il debugger completo.
Per un vero crash nativo che richiede il debugger di Xcode, noleggia un Mac per un'ora o chiedi a un collega. È un caso raro in un'app Capacitor; la maggior parte dei problemi sta nel web layer o nella configurazione dei plugin.
Un workflow settimanale realistico
- Giornaliero: browser e dispositivo Android da Windows o Linux. Live Updates sul
betacanale per i tester iPhone. - Quando arrivano modifiche native: un Capgo Build su TestFlight. Pochi minuti di attesa, senza Mac.
- Rilascio: Capgo Build con distribuzione App Store, poi promuovi il bundle channel.
Riassunto
Non puoi simulare iOS su Windows o Linux, ma puoi testarlo su un iPhone senza un Mac. Capgo Build invia l'app firmata su TestFlight o tramite un link ad hoc con un solo comando, e Live Updates velocizza l'iterazione una volta installata. Tieni il Mac solo per le rare sessioni di debugging native.