Étape 3 · Valider séparément la signature et les artefacts
Un Fastfile pour orchestrer match, gym et pilot
À la racine du projet, exécutez bundle installet validez Gemfile.lock. Le processus ci-dessous suppose que le dépôt de signature est initialisé, que l’app existe et que la CI injecte les variables d’environnement de manière sécurisée. Il ne crée pas de nouveaux éléments de signature.
Vérifications préalables à distance · contrôler les outils
xcode-select -p
xcodebuild -version
xcodebuild -showsdks
ruby --version
bundle --version
bundle exec fastlane --version
security find-identity -v -p codesigning
df -h "$HOME"
Définissez l’adresse du dépôt de signature dans MATCH_GIT_URLet le mot de passe de déchiffrement dans MATCH_PASSWORD. Pour l’API de téléversement, utilisez une clé d’API côté serveur : le chemin du fichier de clé est indiqué par ASC_KEY_PATH , l’identifiant de la clé et celui de l’émetteur par ASC_KEY_IDetASC_ISSUER_ID . La CI doit stocker le fichier de clé sous forme de secret et le créer à l’exécution. Ne le validez pas dans le dépôt du projet.
Définissez IOS_APP_IDENTIFIER,IOS_TEAM_ID,IOS_WORKSPACE et IOS_SCHEME. Le type de distribution du dépôt de signature doit correspondre à appstore . Vérifiez d’abord le scheme partagé, puis exécutez le pipeline complet.
fastlane/Fastfile · pipeline TestFlight pour une seule app
default_platform(:ios)
platform :ios do
desc "Archive a signed build and upload it to TestFlight"
lane :release do
setup_ci
api_key = app_store_connect_api_key(
key_id: ENV.fetch("ASC_KEY_ID"),
issuer_id: ENV.fetch("ASC_ISSUER_ID"),
key_filepath: ENV.fetch("ASC_KEY_PATH"),
in_house: false
)
match(
type: "appstore",
readonly: true,
git_url: ENV.fetch("MATCH_GIT_URL"),
app_identifier: ENV.fetch("IOS_APP_IDENTIFIER"),
team_id: ENV.fetch("IOS_TEAM_ID"),
api_key: api_key
)
gym(
workspace: ENV.fetch("IOS_WORKSPACE"),
scheme: ENV.fetch("IOS_SCHEME"),
configuration: "Release",
clean: true,
export_method: "app-store",
output_directory: "build/artifacts",
output_name: "release.ipa"
)
pilot(
api_key: api_key,
ipa: "build/artifacts/release.ipa",
skip_waiting_for_build_processing: true
)
end
end
Exécution et vérification · variables injectées par la CI
bundle exec fastlane ios release
find build/artifacts -maxdepth 1 -type f -print
Un téléversement réussi ne signifie pas que le traitement est terminé.Cet exemple ne patiente pas après le téléversement. Vérifiez le traitement du build dans le portail de distribution et attribuez un numéro de build unique à chaque téléversement.readonly: true empêche la CI de modifier le dépôt de signature. Si un certificat ou un profil de provisioning expire, mettez-le à jour dans un environnement contrôlé, puis relancez le pipeline.