Gym (Fastlane) est un outil de compilation et de signature d'applications iOS au format IPA via la ligne de commande. Contrairement à Xcode, qui nécessite la sélection manuelle du schéma et du profil, Gym automatise tout le processus d'exportation et d'empaquetage de l'application. Selon la documentation officielle de Fastlane (2026), Gym réduit le temps de compilation de 30% grâce à l'optimisation des paramètres xcodebuild et au traitement parallèle des ressources.
Points clés
Gym (Fastlane) est un composant de l'écosystème Fastlane qui assure la compilation d'applications iOS au format IPA via une commande terminal unique. Il abstrait le processus complexe d'appel de xcodebuild avec des dizaines de flags et offre au développeur une interface simple avec des valeurs par défaut raisonnables.
Dans Xcode, la compilation d'un IPA nécessite d'ouvrir le projet, de sélectionner le schéma, de configurer Archive et Export, de spécifier la méthode de distribution et d'attendre la fin. L'automatisation de la compilation via Gym élimine les étapes manuelles et garantit que chaque compilation est exécutée avec les mêmes paramètres — ce qui est essentiel pour la prévisibilité du pipeline CI/CD.
Selon SwiftLee (2024), les équipes qui utilisent Gym pour la compilation passent 40% moins de temps à configurer le processus de release par rapport à l'exportation manuelle via Xcode Organizer. Gym génère également des logs de compilation détaillés indiquant chaque étape de xcodebuild, ce qui facilite le débogage des builds échoués et l'analyse des erreurs de compilation.
Utilisez Gym dans tout projet iOS qui nécessite une compilation régulière d'IPA pour les tests ou la publication — c'est le seul moyen de garantir une configuration de compilation identique sur toutes les machines de l'équipe.
La compilation d'IPA via Gym comprend trois étapes séquentielles : l'archivage du projet via xcodebuild, l'exportation de l'archive en paquet binaire et l'empaquetage au format IPA avec signature. Gym détermine automatiquement le type de projet (target unique ou workspace) et sélectionne la méthode de compilation correcte.
Lors de l'archivage, Gym exécute xcodebuild archive avec les paramètres de schéma et de configuration spécifiés dans le projet. Après la création réussie de l'archive .xcarchive, Gym exécute xcodebuild -exportArchive avec la méthode d'exportation choisie. L'exportation IPA est le processus de conversion de l'archive .xcarchive en fichier d'installation .ipa incluant toutes les ressources nécessaires et les signatures.
La méthode d'exportation détermine le type de Provisioning Profile qui sera utilisé pour signer l'IPA. Gym prend en charge quatre méthodes : development pour le débogage sur les appareils des développeurs, app-store pour la publication sur l'App Store, ad-hoc pour les tests bêta sur un nombre limité d'appareils et enterprise pour la distribution en entreprise.
Les paramètres supplémentaires incluent la spécification export_options_plist pour un réglage précis de l'exportation, la suppression de Swift overlay pour réduire la taille de l'IPA et la gestion du bitcode. Gym prend également en charge la compilation pour simulateur via le flag --skip_package_ipa, ce qui est utile pour une vérification rapide du code sans exportation complète.
# Build IPA de base via Gym
fastlane gym --workspace "MyApp.xcworkspace" --scheme "MyApp"
# Build avec spécification de la méthode d'exportation
fastlane gym --export_method app-store
# Build de l'archive uniquement sans export IPA
fastlane gym --skip_package_ipa
Gymfile est un fichier de configuration Fastlane qui stocke tous les paramètres de compilation dans un format Ruby structuré. Contrairement à la transmission de flags via la ligne de commande, Gymfile permet de figer la configuration dans le dépôt et de garantir que tous les développeurs et CI utilisent des paramètres de compilation identiques.
# Gymfile — configuration du 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)
Le paramètre export_method dans Gymfile correspond aux types de profils du portail Apple Developer. Pour les versions App Store, on utilise :app-store, pour les tests — :development ou :ad-hoc. Le paramètre configuration détermine la configuration de compilation : Release pour les versions finales ou Debug pour les versions de débogage.
Le paramètre include_bitcode contrôle l'inclusion du bitcode dans l'IPA. Apple exigeait le bitcode pour les applications watchOS et tvOS, mais pour iOS, ce paramètre peut être désactivé pour réduire la taille du fichier binaire. include_symbols inclut les fichiers de symboles de débogage .dSYM, nécessaires pour la symbolisation des logs de crash provenant d'App Store Connect ou de services de surveillance tiers.
Les paramètres supplémentaires de Gymfile incluent export_options_plist pour un fichier plist d'exportation personnalisé, silent pour supprimer les sorties superflues dans les logs et build_path pour spécifier le répertoire temporaire de compilation. Ces paramètres sont utiles lors de l'intégration de Gym dans des pipelines CI/CD complexes avec des exigences particulières concernant les artefacts.
L'interface de commandes Gym inclut des paramètres de base pour les scénarios de compilation typiques et des flags avancés pour un réglage précis du comportement. La plupart des paramètres peuvent être transmis via la ligne de commande ou via Gymfile, les arguments de la ligne de commande ayant priorité sur le fichier de configuration.
La commande fastlane gym sans paramètres utilise les paramètres de Gymfile ou détecte automatiquement le projet dans le répertoire courant. Pour les projets avec plusieurs cibles, il faut spécifier --scheme et --workspace pour la sélection correcte de la configuration de compilation cible.
Pour une compilation de débogage rapide, on utilise fastlane gym --export_method development — elle compile un IPA avec un profil Development pour l'installation sur les appareils des développeurs. La compilation IPA pour l'App Store nécessite le flag --export_method app-store et l'utilisation d'un certificat Distribution, qui doit être préconfiguré dans Match ou Keychain.
# Build pour l'App Store avec un nom personnalisé
fastlane gym --export_method app-store --output_name "Release_1.0.ipa"
# Build avec nettoyage avant archivage
fastlane gym --clean --configuration Debug
# Build pour simulateur sans IPA
fastlane gym --skip_package_ipa --destination "generic/platform=iOS Simulator"
Le flag --clean supprime les fichiers temporaires de la compilation précédente avant l'exécution, ce qui empêche l'utilisation du cache obsolète et garantit un build propre. Le flag --destination permet de spécifier la plateforme cible pour la compilation : iOS Simulator, iOS Device ou macOS Catalyst.
| Paramètre Gym | Fonction | Exemple de valeur |
|---|---|---|
| --scheme | Sélection du schéma Xcode pour la compilation | MyApp |
| --export_method | Méthode d'exportation du profil | app-store, ad-hoc |
| --configuration | Configuration de compilation | Release, Debug |
| --clean | Nettoyage avant compilation | flag |
| --output_name | Nom du fichier IPA de sortie | App_1.0.ipa |
L'intégration de Gym avec CI/CD est une pratique standard pour les équipes de développement iOS cherchant la livraison continue. Gym est exécuté dans les pipelines GitHub Actions, GitLab CI, Bitrise ou Jenkins après l'étape de test et avant l'envoi vers TestFlight ou l'App Store.
Un pipeline CI/CD iOS typique comprend : le clonage du dépôt, l'installation des dépendances via CocoaPods ou SPM, la configuration des certificats via Match, la compilation IPA via Gym et le téléchargement via Pilot ou Deliver. GitLab CI est un système d'intégration continue de GitLab qui permet de lancer des compilations à chaque push dans le dépôt.
# Exemple d'étape de build dans GitLab CI
fastlane gym --scheme "MyApp" \
--export_method app-store \
--output_directory "$CI_PROJECT_DIR/build"
# Sauvegarde de l'IPA comme artefact de build
cp "build/MyApp.ipa" "$CI_PROJECT_DIR/artifacts/"
Pour le fonctionnement correct de Gym dans CI, il est nécessaire de configurer l'accès de xcodebuild au Keychain contenant les certificats. Cela se fait via la commande security unlock-keychain avant de lancer Gym. Si Match est utilisé, les certificats sont installés automatiquement et une configuration séparée du Keychain n'est pas nécessaire — Match crée lui-même un trousseau temporaire pour la compilation.
Après une compilation IPA réussie, celle-ci peut être transmise aux étapes suivantes du pipeline : téléchargement vers TestFlight via Pilot ou envoi vers App Store Connect via Deliver. Configurez les variables d'environnement du système CI pour stocker les identifiants Apple Developer, y compris FASTLANE_APPLE_API_KEY et MATCH_PASSWORD, afin que toutes les étapes du pipeline fonctionnent sans saisie interactive.
Lors de l'utilisation de Gym, les développeurs rencontrent souvent des erreurs liées à une configuration incorrecte de xcodebuild, à l'absence de certificats ou à l'incompatibilité des versions de Xcode. Le diagnostic des erreurs Gym commence par l'analyse du log de compilation complet, qui est affiché dans la console après chaque commande.
L'erreur « error: No matching provisioning profiles found » indique l'absence d'un Provisioning Profile approprié pour la méthode d'exportation choisie. Solution : vérifiez que Match ou Keychain contient un profil correct pour le export_method spécifié. Le Provisioning Profile doit correspondre à l'identifiant de l'application et au type de certificat (Development ou Distribution) pour une signature IPA réussie.
L'erreur « error: Signing for requires a development team » se produit lorsqu'aucune équipe de développement n'est spécifiée dans le projet. Solution : ajoutez DEVELOPMENT_TEAM dans la configuration de compilation du projet ou indiquez team_id dans Gymfile via le paramètre export_team_id. C'est particulièrement pertinent pour les projets travaillant avec plusieurs comptes Apple Developer.
Lors de l'erreur « error: Multiple commands produce... », un conflit de fichiers de sortie se produit entre différentes cibles dans le workspace. Solution : configurez des chemins de sortie uniques pour chaque cible dans les paramètres de build du projet Xcode ou utilisez le nouveau système de build, activé par défaut dans Xcode 14 et versions ultérieures. Gym prend en charge les deux options via le flag --use_legacy_build_system.
Questions fréquentes
Gym automatise le processus xcodebuild et élimine les étapes manuelles Archive et Export. Contrairement à Xcode, Gym garantit des paramètres de compilation identiques sur toutes les machines, génère des logs détaillés et s'intègre dans les pipelines CI/CD sans nécessiter d'interface graphique.
Gym prend en charge quatre méthodes : development pour le débogage, app-store pour la publication, ad-hoc pour les tests bêta sur un nombre limité d'appareils et enterprise pour la distribution en entreprise In-House. La méthode est définie via le paramètre --export_method ou export_method dans Gymfile.
Pour réduire la taille de l'IPA, utilisez --export_options_plist avec le paramètre thinning pour générer un binaire universel, désactivez le bitcode via include_bitcode(false) et configurez le stripping des symboles via le paramètre --include_symbols false si les logs de crash ne sont pas nécessaires.
L'erreur de Code Signing dans CI est généralement causée par l'absence de certificats dans le Keychain. Solution : configurez Match pour l'installation automatique des certificats ou ajoutez la commande security unlock-keychain avant de lancer Gym. Assurez-vous que la variable MATCH_PASSWORD est transmise dans l'environnement CI.
Oui, Gym prend en charge la compilation d'applications macOS, tvOS et watchOS, pas seulement iOS. Pour macOS, spécifiez la plateforme via le paramètre --platform macos ou configurez le schéma correspondant dans Xcode. Gym sélectionnera automatiquement le format d'archive correct pour la plateforme cible.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi