Schritt 3 · Signatur und Artefakt getrennt prüfen
match, gym und pilot mit einem Fastfile verbinden
Führen Sie im Projektstamm zuerst bundle install aus und committen Sie Gemfile.lock. Der folgende Ablauf setzt voraus, dass das Signatur-Repository eingerichtet, die App angelegt und die Umgebungsvariablen sicher in CI hinterlegt sind. Neue Signaturressourcen werden damit nicht erstellt.
Vorabprüfung auf dem Mac · Toolchain kontrollieren
xcode-select -p
xcodebuild -version
xcodebuild -showsdks
ruby --version
bundle --version
bundle exec fastlane --version
security find-identity -v -p codesigning
df -h "$HOME"
Hinterlegen Sie die URL des Signatur-Repositorys in MATCH_GIT_URL und das Entschlüsselungspasswort in MATCH_PASSWORD. Für Uploads verwenden Sie einen serverseitigen API-Schlüssel: Der Pfad zur Schlüsseldatei kommt aus ASC_KEY_PATH, Schlüssel-ID und Issuer-ID aus ASC_KEY_ID beziehungsweise ASC_ISSUER_ID. Die Schlüsseldatei sollte zur Laufzeit aus dem Secret Store von CI bereitgestellt und nicht im Projekt-Repository abgelegt werden.
Setzen Sie IOS_APP_IDENTIFIER, IOS_TEAM_ID, IOS_WORKSPACE und IOS_SCHEME. Der Verteilungstyp im Signatur-Repository muss zu appstore passen. Prüfen Sie zuerst das Shared Scheme und starten Sie danach die vollständige Pipeline.
fastlane/Fastfile · TestFlight-Pipeline für eine 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
Ausführen und Ergebnis prüfen · CI setzt die Umgebungsvariablen
bundle exec fastlane ios release
find build/artifacts -maxdepth 1 -type f -print
Ein erfolgreicher Upload bedeutet nicht, dass die Verarbeitung abgeschlossen ist. Dieses Beispiel wartet nach dem Upload nicht auf die Verarbeitung. Prüfen Sie den Verarbeitungsstatus im Distributionsportal und verwenden Sie für jeden Upload eine eindeutige Build-Nummer. readonly: true verhindert Änderungen von CI am Signatur-Repository. Laufen Zertifikate oder Provisioning-Profile ab, aktualisieren Sie sie in einer kontrollierten Umgebung und führen Sie den Ablauf erneut aus.