Native iOS · Nightly Build
Git-Push startet das Archive; den Upload übernimmt fastlane.
Registrieren Sie den Cloud-Mac als selbst gehosteten Runner für GitHub Actions, als GitLab Runner oder als Jenkins Agent. Nach einem Push auf den Release-Branch checken Sie zunächst einen festen Commit aus und erstellen dann ein Release-Archive und eine IPA. Der TestFlight-Upload ist ein separater Schritt. So lassen sich Build- und Upload-Fehler unabhängig voneinander erneut ausführen.
Diese drei Dinge zuerst vorbereiten
- Setzen Sie
WORKSPACEundSCHEMEundEXPORT_OPTIONSso, dass sie auf den Workspace, das Shared Scheme und die Exportkonfiguration verweisen. - Hinterlegen Sie das Signierzertifikat und das Provisioning-Profil für den aktuellen Build-Benutzer. Verwalten Sie sie bei Bedarf mit fastlane match und stellen Sie entschlüsselte Zugangsdaten über CI-Secrets bereit.
- Setzen Sie
ASC_API_KEY_JSONauf den Pfad zur JSON-Datei mit dem App Store Connect API-Schlüssel für fastlane. Speichern Sie den Schlüssel nicht im Code-Repository.
Das sollten Sie bei der Abnahme prüfen
das Archive unter build/App.xcarchive, die exportierte IPA, den Commit und die Xcode-Version. Prüfen Sie, ob TestFlight die entsprechende Version erhalten hat: Ein erfolgreicher Build-Befehl bedeutet nicht, dass der Upload abgeschlossen ist.
Warum dieser Tarif? Die 24 GB Unified Memory des Host M4 Plus eignen sich für tägliche Builds mit mehreren Targets. Bringen Sie den Ablauf zunächst seriell zum Laufen und erhöhen Sie die Parallelität erst, wenn Arbeitsspeicherdruck und DerivedData-Verbrauch dafür sprechen.
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"