Gym (Fastlane) è uno strumento per compilare e firmare applicazioni iOS in formato IPA tramite riga di comando. A differenza di Xcode, che richiede la selezione manuale dello schema e del profilo, Gym automatizza l'intero processo di esportazione e impacchettamento dell'app. Secondo la documentazione ufficiale di Fastlane (2026), Gym riduce i tempi di compilazione del 30% grazie all'ottimizzazione dei parametri xcodebuild e all'elaborazione parallela delle risorse.
Punti chiave
Gym (Fastlane) è un componente dell'ecosistema Fastlane che garantisce la compilazione di applicazioni iOS in formato IPA tramite un singolo comando terminale. Astrae il processo complesso di chiamata di xcodebuild con decine di flag e fornisce allo sviluppatore un'interfaccia semplice con valori predefiniti ragionevoli.
In Xcode, per compilare un IPA è necessario aprire il progetto, selezionare lo schema, configurare Archive ed Export, specificare il metodo di distribuzione e attendere il completamento. L'automazione della compilazione tramite Gym elimina i passaggi manuali e garantisce che ogni compilazione venga eseguita con gli stessi parametri — essenziale per la prevedibilità del pipeline CI/CD.
Secondo SwiftLee (2024), i team che utilizzano Gym per la compilazione impiegano il 40% in meno di tempo per configurare il processo di rilascio rispetto all'esportazione manuale tramite Xcode Organizer. Gym genera inoltre log di compilazione dettagliati con ogni fase di xcodebuild, facilitando il debug dei build falliti e l'analisi degli errori di compilazione.
Utilizza Gym in qualsiasi progetto iOS che richieda compilazioni regolari di IPA per test o pubblicazione — è l'unico modo per garantire una configurazione di compilazione identica su tutte le macchine del team.
La compilazione IPA tramite Gym comprende tre fasi sequenziali: archiviazione del progetto tramite xcodebuild, esportazione dell'archivio in pacchetto binario e impacchettamento in formato IPA con firma. Gym determina automaticamente il tipo di progetto (target singolo o workspace) e seleziona il metodo di compilazione corretto.
Nella fase di archiviazione, Gym esegue xcodebuild archive con i parametri di schema e configurazione specificati nel progetto. Dopo la creazione riuscita dell'archivio .xcarchive, Gym esegue xcodebuild -exportArchive con il metodo di esportazione scelto. L'esportazione IPA è il processo di conversione dell'archivio .xcarchive in file di installazione .ipa includendo tutte le risorse necessarie e le firme.
Il metodo di esportazione determina il tipo di Provisioning Profile che verrà utilizzato per firmare l'IPA. Gym supporta quattro metodi: development per il debug sui dispositivi degli sviluppatori, app-store per la pubblicazione sull'App Store, ad-hoc per i test beta su un numero limitato di dispositivi ed enterprise per la distribuzione aziendale.
I parametri aggiuntivi includono la specifica export_options_plist per una regolazione precisa dell'esportazione, la rimozione di Swift overlay per ridurre le dimensioni dell'IPA e la gestione del bitcode. Gym supporta anche la compilazione per simulatore tramite il flag --skip_package_ipa, utile per una verifica rapida del codice senza esportazione completa.
# Build di base dell'IPA tramite Gym
fastlane gym --workspace "MyApp.xcworkspace" --scheme "MyApp"
# Build con indicazione del metodo di esportazione
fastlane gym --export_method app-store
# Build solo dell'archivio senza esportazione IPA
fastlane gym --skip_package_ipa
Gymfile è un file di configurazione Fastlane che memorizza tutti i parametri di compilazione in un formato Ruby strutturato. A differenza della trasmissione di flag tramite riga di comando, Gymfile permette di fissare la configurazione nel repository e garantire che tutti gli sviluppatori e CI utilizzino parametri di compilazione identici.
# Gymfile — configurazione della build
workspace("MyApp.xcworkspace")
scheme("MyApp")
export_method(:app-store)
configuration("Release")
output_directory("./build")
output_name("MyApp.ipa")
include_symbols(true)
include_bitcode(false)
Il parametro export_method in Gymfile corrisponde ai tipi di profilo del portale Apple Developer. Per i rilasci App Store si utilizza :app-store, per i test — :development o :ad-hoc. Il parametro configuration determina la configurazione di compilazione: Release per le versioni finali o Debug per le versioni di debugging.
Il parametro include_bitcode controlla l'inclusione del bitcode nell'IPA. Apple richiedeva il bitcode per le app watchOS e tvOS, ma per iOS questo parametro può essere disattivato per ridurre le dimensioni del file binario. include_symbols include i file di simboli di debug .dSYM, necessari per la simbolizzazione dei log di crash provenienti da App Store Connect o servizi di monitoraggio di terze parti.
I parametri aggiuntivi di Gymfile includono export_options_plist per un file plist di esportazione personalizzato, silent per sopprimere l'output superfluo nei log e build_path per specificare la directory temporanea di compilazione. Questi parametri sono utili quando si integra Gym in pipeline CI/CD complessi con requisiti particolari sugli artefatti.
L'interfaccia a comandi Gym include parametri di base per scenari di compilazione tipici e flag avanzati per una regolazione precisa del comportamento. La maggior parte dei parametri può essere trasmessa sia tramite riga di comando che tramite Gymfile, con gli argomenti della riga di comando che hanno priorità sul file di configurazione.
Il comando fastlane gym senza parametri utilizza le impostazioni di Gymfile o rileva automaticamente il progetto nella directory corrente. Per progetti con più target, è necessario specificare --scheme e --workspace per la selezione corretta della configurazione di compilazione target.
Per una compilazione di debug rapida, si utilizza fastlane gym --export_method development — compila un IPA con profilo Development per l'installazione sui dispositivi degli sviluppatori. La compilazione IPA per l'App Store richiede il flag --export_method app-store e l'utilizzo di un certificato Distribution, che deve essere preconfigurato in Match o Keychain.
# Build per App Store con nome personalizzato
fastlane gym --export_method app-store --output_name "Release_1.0.ipa"
# Build con pulizia prima dell'archiviazione
fastlane gym --clean --configuration Debug
# Build per il simulatore senza IPA
fastlane gym --skip_package_ipa --destination "generic/platform=iOS Simulator"
Il flag --clean rimuove i file temporanei della compilazione precedente prima dell'esecuzione, impedendo l'utilizzo della cache obsoleta e garantendo un build pulito. Il flag --destination permette di specificare la piattaforma target per la compilazione: iOS Simulator, iOS Device o macOS Catalyst.
| Parametro Gym | Funzione | Esempio di valore |
|---|---|---|
| --scheme | Selezione dello schema Xcode per la compilazione | MyApp |
| --export_method | Metodo di esportazione del profilo | app-store, ad-hoc |
| --configuration | Configurazione di compilazione | Release, Debug |
| --clean | Pulizia prima della compilazione | flag |
| --output_name | Nome del file IPA di output | App_1.0.ipa |
L'integrazione di Gym con CI/CD è una pratica standard per i team di sviluppo iOS che puntano alla distribuzione continua. Gym viene eseguito nei pipeline GitHub Actions, GitLab CI, Bitrise o Jenkins dopo la fase di test e prima dell'invio a TestFlight o all'App Store.
Un pipeline CI/CD iOS tipico include: clonazione del repository, installazione delle dipendenze tramite CocoaPods o SPM, configurazione dei certificati tramite Match, compilazione IPA tramite Gym e caricamento tramite Pilot o Deliver. GitLab CI è un sistema di integrazione continua di GitLab che consente di avviare compilazioni a ogni push nel repository.
# Esempio di step di build in GitLab CI
fastlane gym --scheme "MyApp" \
--export_method app-store \
--output_directory "$CI_PROJECT_DIR/build"
# Salvataggio dell'IPA come artefatto di build
cp "build/MyApp.ipa" "$CI_PROJECT_DIR/artifacts/"
Per il corretto funzionamento di Gym in CI, è necessario configurare l'accesso di xcodebuild al Keychain contenente i certificati. Ciò viene fatto tramite il comando security unlock-keychain prima di eseguire Gym. Se si utilizza Match, i certificati vengono installati automaticamente e non è necessaria una configurazione separata del Keychain — Match crea autonomamente un portachiavi temporaneo per la compilazione.
Dopo una compilazione IPA riuscita, questa può essere trasmessa alle fasi successive del pipeline: caricamento su TestFlight tramite Pilot o invio ad App Store Connect tramite Deliver. Configura le variabili d'ambiente del sistema CI per memorizzare le credenziali Apple Developer, inclusi FASTLANE_APPLE_API_KEY e MATCH_PASSWORD, in modo che tutte le fasi del pipeline funzionino senza input interattivo.
Utilizzando Gym, gli sviluppatori incontrano spesso errori legati a una configurazione errata di xcodebuild, all'assenza di certificati o all'incompatibilità delle versioni di Xcode. La diagnosi degli errori Gym inizia con l'analisi del log di compilazione completo, che viene visualizzato nella console dopo ogni comando.
L'errore « error: No matching provisioning profiles found » indica l'assenza di un Provisioning Profile appropriato per il metodo di esportazione scelto. Soluzione: verifica che Match o Keychain contenga un profilo corretto per il export_method specificato. Il Provisioning Profile deve corrispondere all'identificatore dell'app e al tipo di certificato (Development o Distribution) per una firma IPA riuscita.
L'errore « error: Signing for requires a development team » si verifica quando nessun team di sviluppo è specificato nel progetto. Soluzione: aggiungi DEVELOPMENT_TEAM nella configurazione di compilazione del progetto o indica team_id in Gymfile tramite il parametro export_team_id. Ciò è particolarmente rilevante per progetti che lavorano con più account Apple Developer.
Quando si verifica l'errore « error: Multiple commands produce... », si ha un conflitto di file di output tra diversi target nel workspace. Soluzione: configura percorsi di output unici per ogni target nelle impostazioni di build del progetto Xcode o utilizza il nuovo sistema di build, attivo per impostazione predefinita in Xcode 14 e versioni successive. Gym supporta entrambe le opzioni tramite il flag --use_legacy_build_system.
Domande frequenti
Gym automatizza il processo xcodebuild ed elimina i passaggi manuali Archive ed Export. A differenza di Xcode, Gym garantisce parametri di compilazione identici su tutte le macchine, genera log dettagliati e si integra nei pipeline CI/CD senza necessità di aprire l'interfaccia grafica.
Gym supporta quattro metodi: development per il debug, app-store per la pubblicazione, ad-hoc per i test beta su un numero limitato di dispositivi ed enterprise per la distribuzione aziendale In-House. Il metodo viene impostato tramite il parametro --export_method o export_method in Gymfile.
Per ridurre le dimensioni dell'IPA, utilizza --export_options_plist con il parametro thinning per generare un binario universale, disattiva il bitcode tramite include_bitcode(false) e configura lo stripping dei simboli tramite il parametro --include_symbols false se i log di crash non sono necessari.
L'errore di Code Signing in CI è solitamente causato dall'assenza di certificati nel Keychain. Soluzione: configura Match per l'installazione automatica dei certificati o aggiungi il comando security unlock-keychain prima di eseguire Gym. Assicurati che la variabile MATCH_PASSWORD sia trasmessa nell'ambiente CI.
Sì, Gym supporta la compilazione di applicazioni macOS, tvOS e watchOS, non solo iOS. Per macOS, specifica la piattaforma tramite il parametro --platform macos o configura lo schema corrispondente in Xcode. Gym selezionerà automaticamente il formato di archivio corretto per la piattaforma target.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche