iOS natif · build nocturne
Déclenchez l’archive à chaque push Git et confiez l’envoi à fastlane.
Enregistrez le Mac dans le cloud comme runner auto-hébergé GitHub Actions, GitLab Runner ou agent Jenkins. Après un push sur la branche de release, récupérez un commit précis, puis générez l’archive Release et l’IPA. L’envoi vers TestFlight est une étape distincte : vous pouvez ainsi relancer séparément un build ou un envoi en échec.
Préparez ces trois éléments
- Définissez
WORKSPACE,SCHEMEetEXPORT_OPTIONSpour indiquer respectivement le workspace, le scheme partagé et la configuration d’export. - Configurez le certificat de signature et le profil de provisionnement pour l’utilisateur qui lance le build. Vous pouvez les gérer avec fastlane match et injecter les identifiants déchiffrés via les secrets de la CI.
- Définissez
ASC_API_KEY_JSONpour indiquer le fichier JSON de la clé API App Store Connect utilisée par fastlane. Ne stockez pas cette clé dans votre dépôt de code.
Que vérifier à la validation
L’archive build/App.xcarchive, l’IPA exporté, l’identifiant du commit et la version de Xcode. Vérifiez que TestFlight a bien reçu la version correspondante : une commande de build terminée avec succès ne garantit pas la fin de l’envoi.
Pourquoi ce modèle : les 24 Go de mémoire unifiée du Host M4 Plus conviennent aux builds quotidiens avec plusieurs targets. Commencez par les exécuter en série, puis augmentez le parallélisme en fonction de la pression mémoire et de l’espace occupé par DerivedData.
set -euo pipefail
: "${WORKSPACE:?Set WORKSPACE}"
: "${SCHEME:?Set SCHEME}"
: "${EXPORT_OPTIONS:?Set EXPORT_OPTIONS}"
: "${ASC_API_KEY_JSON:?Set ASC_API_KEY_JSON}"
mkdir -p build
xcodebuild -version
xcodebuild \
-workspace "$WORKSPACE" -scheme "$SCHEME" \
-configuration Release \
-destination 'generic/platform=iOS' \
-archivePath build/App.xcarchive archive
xcodebuild -exportArchive \
-archivePath build/App.xcarchive \
-exportPath build/export \
-exportOptionsPlist "$EXPORT_OPTIONS"
IPA_PATH="$(find build/export -type f -name '*.ipa' -print -quit)"
test -n "$IPA_PATH"
bundle exec fastlane pilot upload \
--ipa "$IPA_PATH" \
--api_key_path "$ASC_API_KEY_JSON"