Die Einrichtung einer CI/CD-Pipeline für Capacitor-Anwendungen kann komplex und zeitaufwändig sein. Hier sind die wichtigsten Informationen:
Empfohlen für Neubauten: Verwenden Sie Capgo Build
Wir empfehlen nun die Verwendung von Capgo Build mit der Capgo CLI für native Capacitor-Bauwerke. Dieser Fastlane-Leitfaden wird für Teams aufrechterhalten, die bestehende GitHub-Actions-Pipelines weiterhin unterhalten, aber neue iOS-Bauwerke sollten die Capgo CLI verwenden, damit Sie Fastlane, Xcode-Runner, Zertifikate und Upload-Skripte nicht selbst pflegen müssen.
Capgo-Bauwerk für CI/CD durch Capgo
Vermeiden Sie die Pflege von Fastlane, Xcode-Runner, Zertifikaten, Berechtigungsprofilen und Upload-Skripten. Capgo-Bauwerk führt signierte native iOS-Bauwerke aus Ihrem bestehenden CI/CD-Pipeline aus:
- Arbeitet mit Ihrer Pipeline: Auslösen Sie Capgo-Bauwerk von GitHub-Actions, GitLab CI, Jenkins oder lokalen Skripten nach Ihrem Web-Bauwerk und
npx cap sync. - Signieren von CI-Secrets: Halten Sie App Store Connect-Schlüssel, Zertifikate, Berechtigungsprofile, Passwörter und Team-IDs in Ihren eigenen CI-Secrets.
- Keine native Runner-Pflege: Capgo-Bauwerk bietet aufrechterhaltene Apple-Bauumgebungen, sodass Sie macOS-Runner, Xcode-Bilder oder Fastlane-Linien nicht selbst verwalten müssen.
- Artikel und Einreichung: Herunterladen von signierten Artefakten für die QA oder Einreichen von Release-Builds über den Capgo CLI.
Pricing
- Capgo plans start at $12/month
- __CAPGO_KEEP_0__-Pläne beginnen bei 12 $/Monat
- Umfasst OTA-Updates und etwa 15 native Builds pro Monat
__CAPGO_KEEP_0__ Build in CI/CD einrichten
Manueller Setup-Leitfaden
Continuous Delivery for iOS using Fastlane and GitHub Actions and certificate
Fortlaufende Lieferung für iOS mit Fastlane und __CAPGO_KEEP_0__-Aktionen und Zertifikat
Voraussetzungen
- Sicherstellen, dass Sie Fastlane installiert haben, auf Ihrem Entwicklungsrechner.
- Stellen Sie sicher, dass Sie Mitglied des iOS-Entwicklerprogramms sind.
Wichtige Informationen zur Preisgestaltung

https://github.com/features/actions
Der Service ist ‘bis zur Grenze kostenlos, je nach gewähltem Rechner. Wir werden ein
macOS System verwenden. Sie können in dem Screenshot den Preis und die Grenzen (Preise zum Zeitpunkt der Erstellung dieses Tutorials, sie könnten sich in Zukunft ändern) sehen.
Nachdem Sie über Anforderungen und Preise informiert wurden, können wir fortfahren.
Hinweis: In diesem Beitrag gehe ich davon aus, dass Sie bereits eine App in App Store Connect erstellt haben. Die wichtigen Informationen werden von Fastlane kopiert!
Was werden Sie in diesem Tutorial lernen?
Schritte, die Sie in diesem Beitrag befolgen müssen.
- Die Verwendung von App Store Connect API mit Fastlane.
- Anforderungen:
- Erstellung eines App Store Connect API-Schlüssels.
- Verwendung eines App Store Connect API-Schlüssels.
- Anforderungen:
- Kopieren von Fastlane-Dateien.
- Konfigurieren von GitHub-Aktionen.
1. Die Verwendung von App Store Connect API mit Fastlane.
Ab Februar 2021 ist für alle Benutzer eine zweifaktorische Authentifizierung oder eine zweistufige Überprüfung erforderlich, um sich bei App Store Connect anzumelden. Diese zusätzliche Sicherheitsebene für Ihren Apple-ID hilft sicherzustellen, dass Sie der einzige Person sind, die Zugriff auf Ihr Konto hat.
Von Apple-Support
Anforderungen
Damit Fastlane App Store Connect API verwenden kann, um Ihre App hochzuladen, müssen Sie die folgenden drei Dinge bereitstellen: Dinge Zu erstellen
- Zu erstellen
- Zu erstellen
- Zu erstellen
Obtaining an App Store Connect API Key
Zu erstellen
-
Anmelden bei App Store Connect.
-
Wählen Sie Benutzer und Zugriff.

3 — Wählen Sie die Integrationsoption.

- Click Generate API Key or the Add (+) button.

- Geben Sie einen Namen für den Schlüssel an. Der Name dient nur Ihrer Referenz und ist nicht Teil des Schlüssels selbst.

6 — Unter Zugriff wählen Sie die Rolle für den Schlüssel aus. Die Rollen, die auf Schlüssel angewendet werden, sind dieselben Rollen, die auf Benutzer auf Ihrem Team angewendet werden. Weitere Informationen finden Sie unter RollenberechtigungenWir empfehlen, App-Manager.
- Klicken Sie auf Generieren.
Ein API-Schlüssel kann nicht auf bestimmte Apps beschränkt werden.
Der Name des neuen Schlüssels, die Schlüssel-ID, ein Download-Link und weitere Informationen erscheinen auf der Seite.

Hier können Sie alle drei notwendigen Informationen abrufen.
1. Issue-ID. (APPLE_ISSUER_ID geheim)
2. Schlüssel-ID. (APPLE_KEY_ID geheim)
Klicken Sie auf <3> "Download API Schlüssel" zum Herunterladen Ihres API privaten Schlüssels. Der Download-Link erscheint nur, wenn der private Schlüssel noch nicht heruntergeladen wurde. Apple hält keinen Kopie des privaten Schlüssels. Daher können Sie ihn nur einmal herunterladen.
🔴 Speichern Sie Ihren privaten Schlüssel an einem sicheren Ort. Sie sollten Ihre Schlüssel niemals teilen, Schlüssel in einem code Repository speichern oder Schlüssel in Client-Seiten code einbeziehen.
Verwendung eines App Store Connect API Schlüssels
Das API Schlüssel-File (p8-Datei, die Sie herunterladen), die Schlüssel-ID und die Aussteller-ID sind erforderlich, um den JWT-Token für die Autorisierung zu erstellen. Es gibt mehrere Möglichkeiten, diese Informationen in Fastlane einzugeben. Ich habe mich dafür entschieden, die neue Aktion von Fastlane zu verwenden app_store_connect_api_key. Sie können andere Möglichkeiten in der Fastlane-Dokumentationerfahren. Ich zeige diese Methode, weil ich glaube, dass sie die einfachste Möglichkeit ist, um mit den meisten CI auszukommen, bei denen Sie Umgebungsvariablen setzen können.
Bitte konvertieren Sie die p8-Datei, die Sie heruntergeladen haben, in Base64 und speichern Sie sie als Geheimnis (APPLE_KEY_CONTENT).
base64 -i APPLE_KEY_CONTENT.p8 | pbcopy
Jetzt können wir App Store Connect mit Fastlane über den API Schlüssel verwalten, großartig!
2. Zertifikate
Öffnen Sie XCode und gehen Sie zu Einstellungen > Accounts > Apple ID > Teams und wählen Sie Ihr Team. __CAPGO_KEEP_0__ Signierungsidentitäten

Zertifikate verwalten Wenn Sie noch kein Zertifikat erstellt haben, können Sie ein neues Zertifikat erstellen..
Klicken Sie auf
Zertifikate verwalten + Wählen Sie und wählen Sie Apple Distribution

Dann müssen Sie zum Schlüsselkasten gehen, um das Zertifikat als Datei herunterzuladen. .p12 Um dies zu tun, müssen Sie zum Schlüsselkasten gehen, auf das Login-Schlüsselkasten umschalten und dann auf die Registerkarte
Login Schlüsselkasten Schlüsselkasten Dann können Sie das Zertifikat auswählen, das Sie herunterladen möchten. (Suchen Sie nach dem Datum des Zertifikats).

select
select Exportieren.
Wählen Sie die Dateiformat Persönliche Informationen austauschen (.p12).
Das wird das Zertifikat als Datei herunterladen. .p12 Öffnen Sie bitte die Datei in einem Terminal und verwenden Sie den folgenden Befehl, um sie in Base64 umzuwandeln:
Das wird Ihr
base64 -i BUILD_CERTIFICATE.p12 | pbcopy
Geheimnis. Geben Sie auch bitte, wenn gefragt, das Passwort des Zertifikats an. Dieses Passwort wird Ihr BUILD_CERTIFICATE_BASE64 Geheimnis. P12_PASSWORD 3. Provisioning-Profile
Öffnen
Apple-Entwickler Exportieren Wählen Sie das richtige Team.
Klicken Sie dann auf +

Und wählen Sie App Store Connect.

Sie müssen dann das richtige App auswählen, beachten Sie, dass Sie ein Wildcard nicht verwenden können, sonst wird die Signierung fehlschlagen.

Wählen Sie die richtige Zertifizierung, die Sie vorher erstellt haben (suchen Sie nach dem Datum der Ablaufzeit, es sollte der gleiche Tag und Monat wie heute sein) und klicken Sie auf Wählen Sie die richtige Zertifizierung.

Klicken Sie dann auf Erstellen.
Der Name wird verwendet, um das Profil in Fastlane zu identifizieren, unter dem Wert von
APPLE_PROFILE_NAME.

Sie können das Profil als .mobileprovision Datei herunterladen.

Bitte konvertieren Sie das Profil in Base64 und speichern Sie es als Geheimnis (BUILD_PROVISION_PROFILE_BASE64).
base64 -i BUILD_PROVISION_PROFILE.mobileprovision | pbcopy
4. Kopieren Sie die Fastlane-Dateien
Fastlane ist eine Ruby-Bibliothek, die zum Automatisieren von gängigen Aufgaben der mobilen Entwicklung erstellt wurde. Mit Fastlane können Sie benutzerdefinierte "Bahnen" konfigurieren, die eine Reihe von "Aktionen" enthalten, die Aufgaben ausführen, die Sie normalerweise mit Android Studio durchführen würden. Mit Fastlane können Sie viel erreichen, aber für die Zwecke dieses Tutorials werden wir nur eine Handvoll grundlegender Aktionen verwenden.
Erstelle das Fastlane-Verzeichnis am Root Ihres Capacitor/Ionic-Projekts und füge das Fastfile dort hinzu:
- Ordner:
<project-root>/fastlane/ - Datei:
<project-root>/fastlane/Fastfile
Dies ist auf der gleichen Ebene wie package.json, capacitor.config.*, und das ios/ Verzeichnis. Erstelle es nicht innerhalb von ios/App/.
platform :ios do
desc 'Export ipa and submit to TestFlight'
lane :beta do
keychain_info = { keychain_name: "ios-build-#{Time.now.to_i}.keychain", keychain_password: SecureRandom.uuid }
begin
setup_signing(keychain_info)
bump_build_number
build_app_with_signing(keychain_info)
submit_to_testflight
ensure
cleanup_keychain(keychain_info)
end
end
private_lane :setup_signing do |options|
create_keychain(
name: options[:keychain_name],
password: options[:keychain_password],
unlock: true,
timeout: 0,
lock_when_sleeps: false,
add_to_search_list: true
)
import_cert(options)
install_profile
update_project_settings
end
lane :bump_build_number do
file = File.read('../package.json')
data_hash = JSON.parse(file)
api_key = app_store_connect_api_key(
key_id: ENV['APPLE_KEY_ID'],
issuer_id: ENV['APPLE_ISSUER_ID'],
key_content: ENV['APPLE_KEY_CONTENT'],
is_key_content_base64: true,
duration: 1200,
in_house: false
)
build_num = app_store_build_number(
api_key: api_key,
app_identifier: ENV['BUNDLE_IDENTIFIER'],
live: false
)
build_num = build_num + 1
UI.message("Bumped build number to #{build_num}")
increment_build_number(
build_number: build_num,
xcodeproj: "./ios/App/App.xcodeproj",
skip_info_plist: true
)
end
private_lane :import_cert do |options|
cert_path = "#{Dir.tmpdir}/build_certificate.p12"
File.write(cert_path, Base64.decode64(ENV['BUILD_CERTIFICATE_BASE64']))
import_certificate(
certificate_path: cert_path,
certificate_password: ENV['P12_PASSWORD'] || "",
keychain_name: options[:keychain_name],
keychain_password: options[:keychain_password],
log_output: true
)
File.delete(cert_path)
end
private_lane :cleanup_keychain do |options|
delete_keychain(
name: options[:keychain_name]
)
end
private_lane :install_profile do
profile_path = "#{Dir.tmpdir}/build_pp.mobileprovision"
File.write(profile_path, Base64.decode64(ENV['BUILD_PROVISION_PROFILE_BASE64']))
UI.user_error!("Failed to create provisioning profile at #{profile_path}") unless File.exist?(profile_path)
ENV['PROVISIONING_PROFILE_PATH'] = profile_path
install_provisioning_profile(path: profile_path)
File.delete(profile_path)
end
private_lane :update_project_settings do
update_code_signing_settings(
use_automatic_signing: false,
path: "./ios/App/App.xcodeproj",
code_sign_identity: "iPhone Distribution",
profile_name: ENV['APPLE_PROFILE_NAME'],
bundle_identifier: ENV['BUNDLE_IDENTIFIER'],
team_id: ENV['APP_STORE_CONNECT_TEAM_ID']
)
update_project_team(
path: "./ios/App/App.xcodeproj",
teamid: ENV['APP_STORE_CONNECT_TEAM_ID']
)
end
private_lane :build_app_with_signing do |options|
unlock_keychain(
path: options[:keychain_name],
password: options[:keychain_password],
set_default: false
)
build_app(
workspace: "./ios/App/App.xcworkspace",
scheme: "App",
configuration: "Release",
export_method: "app-store",
output_name: "App.ipa",
export_options: {
provisioningProfiles: {
ENV['BUNDLE_IDENTIFIER'] => ENV['APPLE_PROFILE_NAME']
}
},
xcargs: "-verbose",
buildlog_path: "./build_logs",
export_xcargs: "-allowProvisioningUpdates",
)
end
private_lane :submit_to_testflight do
api_key = app_store_connect_api_key(
key_id: ENV['APPLE_KEY_ID'],
issuer_id: ENV['APPLE_ISSUER_ID'],
key_content: ENV['APPLE_KEY_CONTENT'],
is_key_content_base64: true,
duration: 1200,
in_house: false
)
pilot(
api_key: api_key,
skip_waiting_for_build_processing: true,
skip_submission: true,
distribute_external: false,
notify_external_testers: false,
ipa: "./App.ipa"
)
end
end
5. Die Einrichtung von Geheimnissen
GitHub Actions verwendet die Repository-Geheimnisse, die Sie in der nächsten Schritt einrichten. Sie benötigen nur eine lokale .env Datei, wenn Sie Fastlane von Ihrem eigenen Computer aus ausführen oder testen möchten.
Für lokale Tests erstellen Sie <project-root>/fastlane/.env nächstens dem Fastfile. Erstelle diese Datei nicht. Füge fastlane/.env zu Ihrem .gitignore erstmalig (oder überprüfe, ob es bereits ignoriert wird). Hier ist ein Beispiel:
APP_STORE_CONNECT_TEAM_ID=UVTJ336J2D
BUNDLE_IDENTIFIER=ee.forgr.testfastlane
# See previous section for these secrets
BUILD_CERTIFICATE_BASE64=
BUILD_PROVISION_PROFILE_BASE64=
APPLE_KEY_ID=
APPLE_ISSUER_ID=
APPLE_KEY_CONTENT=
P12_PASSWORD=
APPLE_PROFILE_NAME=
Abrufen des APP_STORE_CONNECT_TEAM_ID
Gehe zu Entwickler-Zentrum und scrollen Sie nach unten bis zur Membership details Sektion.
Team ID ist der Wert, den Sie in der APP_STORE_CONNECT_TEAM_ID Geheimzahl einstellen müssen.
Erhalten Sie den BUNDLE_IDENTIFIER
- Öffnen Sie Xcode
- Doppelklicken Sie auf das
Appim Projekt-Navigator - Klicken Sie dann auf die Registerkarte
Signing and Capabilities - Kopieren Sie den Wert von dem
Bundle identifier. Dies ist der Wert, den Sie in demBUNDLE_IDENTIFIERGeheimnis einstellen müssen.
6. Verarbeitung von Aufgaben
In GitHub Aktionen, werden Sie nach den Minuten abgerechnet, die Sie für die Ausführung Ihres CI/CD-Workflows verwendet haben. Aus meiner Erfahrung dauert es etwa 10–15 Minuten, bevor ein Build in App Store Connect verarbeitet werden kann. Für private Projekte kann die geschätzte Kosten pro Build bis zu
$0,08/min x 15 min = $1,2 , oder mehr, je nach Konfiguration und Abhängigkeiten Ihres Projekts.Wenn Sie sich um die Kosten für private Projekte Sorgen, können Sie
If you’re concerned about costs for private projects, you can set skip_waiting_for_build_processing zum trueDies spart Buildminuten, indem Sie nicht auf die Fertigstellung des Builds durch App Store Connect warten müssen.
Es gibt jedoch einen Kompromiss - Sie müssen die Compliance-Informationen Ihres Apps in App Store Connect manuell aktualisieren, bevor Sie den Build an Benutzer verteilen können.
Dieses Optimierung ist hauptsächlich für private Projekte nützlich, bei denen Buildminuten Geld kosten. Bei öffentlichen/ kostenlosen Projekten sind die Buildminuten kostenlos, daher ist es nicht notwendig, diese Einstellung zu aktivieren. Siehe GitHub’s Preisliste mehr Details.
7. Einrichten von GitHub Aktionen
Konfigurieren Sie GitHub-Geheimnisse
Wenn Sie die Geheimnisse aus dem .env Datei kopieren und sie in die GitHub-Repository-Geheimnisse einfügen.
Gehe zu Einstellungen > Geheimnisse und Variablen > Aktionen > Neues Repository-Geheimnis
2. BUILD_CERTIFICATE_BASE64 - Zertifikat in Base64-Codierung.
3. BUILD_PROVISION_PROFILE_BASE64 - Base64-codierte Provisionierungsnachricht.
4. BUNDLE_IDENTIFIER - Die Bundle-Identifikationsnummer Ihres Apps.
5. APPLE_KEY_ID — App Store Connect API-Schlüssel 🔺Schlüssel-ID.
6. APPLE_ISSUER_ID — App Store Connect API-Schlüssel 🔺Aussteller-ID.
7. APPLE_KEY_CONTENT App Store Connect API Schlüssel 🔺 Schlüsselinhalt .p8, Überprüfen Sie es
8. Konfigurieren Sie GitHub Workflow-Datei
Erstellen Sie einen GitHub Workflow-Ordner.
cd .github/workflows
Innerhalb des workflow Ordners erstellen Sie eine Datei mit dem Namen build-upload-ios.ymlund fügen Sie folgendes hinzu.
name: Build source code on ios
on:
push:
tags:
- '*'
jobs:
build_ios:
runs-on: macOS-latest
steps:
- uses: actions/checkout@v6
- name: Set Node.js
uses: actions/setup-node@v6
with:
node-version: 24
cache: npm
- name: Install dependencies
id: install_code
run: npm ci
- name: Build
id: build_code
run: npm run build
- uses: actions/cache@v5
with:
path: ios/App/Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Sync
id: sync_code
run: npx cap sync
- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.0'
bundler-cache: true
- uses: maierj/fastlane-action@v3.1.0
env:
APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
BUNDLE_IDENTIFIER: ${{ secrets.BUNDLE_IDENTIFIER }}
BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }}
P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
APPLE_PROFILE_NAME: ${{ secrets.APPLE_PROFILE_NAME }}
with:
lane: ios beta
- name: Upload release bundle
uses: actions/upload-artifact@v6
with:
name: ios-release
path: ./App.ipa
retention-days: 10
Diese Workflow sollte nach jedem GitHub Tag, wenn Sie die Automatisierung von Tags benötigen, beziehen Sie sich auf Automatisches Build und Release mit GitHub Aktionen erstens.
Dann wird diese Workflow deine NodeJS-Abhängigkeiten ziehen, sie installieren und deine JavaScript-Anwendung bauen.
Jedes Mal, wenn du einen neuen Commit sendest, wird in TestFlight eine Release erstellt.
Deine App benötigt nicht zwingend Ionic, nur die Capacitor-Basis ist erforderlich. Sie kann alte Cordova-Module haben, aber das Capacitor-JS-Plugin wird empfohlen.
8. Auslösen Sie den Workflow
Erstelle einen Commit
Erstelle einen Commit, du solltest das aktive Workflow im Repository sehen.
Auslösen Sie den Workflow
Drücke die neuen Commits in die Zweig main oder development um das Workflow auszulösen.

Nach wenigen Minuten sollte das Build in Ihrem App Store Connect-Dashboard verfügbar sein.

9. Kann ich von der lokalen Maschine bereitstellen?
Ja, das kannst du, und es ist einfach.
Du kannst Xcode verwenden, um deine App zu bauen und zu signieren, wie immer.
Verwandte Artikel
CI/CD-Einrichtungsleitfäden
- Automatischer Capacitor-Android-Build mit GitHub-Actions - Vollständige Android-CI/CD-Einrichtung
- Automatischer Build und Release mit GitHub-Actions - Vollständige CI/CD Pipeline-Tutorial
- Verwalte Dev- und Prod Builds mit GitHub Aktionen - Umgebungsbearbeitung
- Automatischer Capacitor iOS Build mit Match - Alternative mit Fastlane Match
Alternative CI/CD-Plattformen
- Mit GitLab CI bauen - GitLab Alternative
- Mit CodeMagic bauen - CodeMagic Einrichtungsanleitung
Live Updates & Bereitstellung
- Capgo Live Updates Dokumentation - Fügen Sie OTA-Updates in Ihre App hinzu
- CI/CD Integration with Capgo - Integrieren Sie live Updates in Ihrem Pipeline
- Vielen Dank
- Dieser Blog basiert auf den folgenden Artikeln:
- Continuous delivery for IOS using Fastlane and GitHub actions
- - Fastlane-Dokumentation
- This GitHub message from @mrogunlana
- This GitHub documentation
Keep going from Automatic Capacitor IOS build with GitHub actions with certificate
- Wenn Sie Capgo verwenden Automatic Capacitor IOS build with GitHub actions with certificate um die CI/CD-Automatisierung zu planen, verbinden Sie sie mit Capgo CI/CD zur Produktworkflow in Capgo CI/CD, Capgo Native Builds zur Produktworkflow in Capgo Native Builds, Capgo Integrations zur Produktworkflow in Capgo Integrations, CI/CD-Integration __CAPGO_KEEP_0__ Actions Integration zur Implementierungsdetail in GitHub Actions Integration. GitHub