Zum Hauptinhalt springen

Wie man sich bei Capacitor anmeldet und eine App im Cloud bereitstellt

Sign und bauen Sie Ihr Capacitor-App im Cloud: Erstellen Sie den Android-Keystore und das iOS-Zertifikat, speichern Sie die Anmeldeinformationen sicher und führen Sie signierte Builds von CI aus.

Artikelcredits

Martin Donadieu

Schreiber

Valeria

Rezensent

Jordan

Redakteur

 Wie man ein Capacitor-App im Cloud signiert und baut

Um ein Capacitor-App im Cloud zu signieren und zu bauen, erstellen Sie Ihr Signiermaterial einmal (einen Android-Keystore, ein iOS-Distributionszertifikat und ein Provisioningprofil), geben Sie es an einen Cloud-Build-Dienst weiter und führen Sie dann Builds von Ihrem Terminal oder CI aus. Der Dienst kompiliert das native Projekt, signiert es und kann es direkt auf TestFlight oder Google Play hochladen. Diese Anleitung behandelt jeden Signierungsdatei, wie man sie ohne Mac erstellt, wie man sie mit Capgo Build einrichtet und wie man signierte Builds sicher automatisiert.

Was bedeutet “Signieren im Cloud”

Beide Stores akzeptieren nur signierte Binärdateien. Das Signieren beweist, dass der Build von Ihnen stammt und dass niemand ihn danach geändert hat. Lokal verbergen Xcode und Android Studio die meisten dieser Informationen. Im Cloud ist nichts implizit, daher müssen Sie genau wissen, welche Dateien beteiligt sind:

Plattform Datei Was es ist Verwendet für
Android .jks / .keystore Keystore, das Ihre Upload-Schlüssel enthält Das AAB oder APK signieren
Android Dienstkontoinformationen .json Google Cloud-Zugriffsberechtigungen Auf Google Play hochladen
iOS .p12 Apple Distribution-Zertifikat plus privater Schlüssel Das IPA signieren
iOS .mobileprovision Provisioning-Profil, das die Bundle-ID, das Zertifikat und die Fähigkeiten verbindet Das App-Runnen und -Vervielfältigen erlauben
iOS .p8 + Schlüssel-ID + Aussteller-ID App Store Connect API-Schlüssel Hochladen auf TestFlight, Lesen von Buildnummern

Halten Sie diese aus Git heraus. Alles darunter speichert sie in Ihrer lokalen Anmeldeinformationen-Datei oder im geheimen Speicher Ihres CI.

Erstellen Sie das Upload-Keystore

Erstellen Sie das Upload-Zertifikat

If die App bereits auf Google Play ist, wiederverwenden Sie den bestehenden Keystore. Die Signierung einer Aktualisierung mit einem anderen Schlüssel wird abgelehnt, es sei denn, Sie gehen durch die Upload-Schlüssel-Restetzung im Play Console.

Für eine neue App:

keytool -genkeypair -v \
  -storetype PKCS12 \
  -keystore release.jks \
  -alias upload \
  -keyalg RSA -keysize 2048 \
  -validity 10000

Hinweise:

  • Google Play erfordert, dass der Schlüssel bis mindestens den 22. Oktober 2033 gültig ist. -validity 10000 (ca. 27 Jahre) deckt das ab.
  • Mit dem PKCS12-Speicher-Typ ist das Schlüsselpasswort gleich dem Speicher-Passwort.
  • Kein JDK zur Hand? Der Android-Keystore-Generator erzeugt denselben Datei im Browser.

Play App Signing und die Upload-Schlüssel-Restetzung

Neue Apps auf Google Play verwenden Play App Signing. Google hält den Anwendungs-Schlüssel und wiederrichtet, was die Benutzer herunterladen. Upload-Schlüssel. Wenn Sie ihn verlieren, kann das Support-Team von Play Console einen neuen Upload-Schlüssel registrieren, weshalb der Verlust ihn nicht zum Desaster macht. Machen Sie ihn trotzdem sicher.

Dienstkonten für Uploads

Um aus der Cloud hochzuladen, erstellen Sie ein Dienstkonto in Google Cloud, aktivieren Sie die Google Play Android-Entwickler-Einrichtung API, laden Sie die JSON-Schlüsseldatei herunter und laden Sie das Dienstkonto in Play Console unter Benutzer und Berechtigungen mit Freigabeberechtigungen für Ihre App. Capgo’s Onboarding kann dies über Google-Anmeldung durchführen, wie unten gezeigt.

iOS-Zertifizierung

Die drei Apple-Stücke

  • Apple-Distribution-Zertifikat. Eines pro Team reicht aus, gültig für ein Jahr. Apple beschränkt die Anzahl, die Sie haben können, also erstellen Sie nicht eines pro Entwickler.
  • Zertifizierungsprofil. Verknüpft die Bundle-ID, das Zertifikat und Fähigkeiten wie Push-Benachrichtigungen. Verwenden Sie ein App Store Connect Profil für TestFlight und den App Store, und ein Ad hoc Profil für Installationen auf registrierten Geräten. Jedes App-Extension (Widget, Teilen-Extension, Benachrichtigungsdienst) benötigt sein eigenes Profil.
  • App Store Connect API-Schlüssel. Erstellt unter Benutzer und Zugriff > Integrations mit Zugriff auf App Manager. Der .p8 Datei-Download erfolgt nur einmal.

Sie benötigen Administrator- oder Kontoinhaber-Rechte auf der Apple-Entwickler-Team, um diese zu erstellen.

Erstellen Sie ein Zertifikat ohne Mac

The Keychain Access-Flow benötigt macOS, aber OpenSSL funktioniert überall:

# 1. Private key and certificate signing request
openssl req -new -newkey rsa:2048 -nodes \
  -keyout dist.key -out dist.csr \
  -subj "/emailAddress=dev@example.com/CN=Example Inc/C=US"

# 2. Upload dist.csr at developer.apple.com > Certificates > + > Apple Distribution
#    and download distribution.cer

# 3. Convert and bundle into a .p12
openssl x509 -inform DER -in distribution.cer -out distribution.pem
openssl pkcs12 -export -legacy \
  -inkey dist.key -in distribution.pem \
  -out distribution.p12 -passout pass:choose-a-password

The -legacy Die Flagge spielt bei OpenSSL 3 eine Rolle: Ohne sie können macOS-Build-Maschinen versagen, die Zertifikate zu importieren. .p12 mit „MAC-Verifizierung fehlgeschlagen“. Der browserbasierte iOS-Zertifikatsgenerator verwende die gleichen Schritte, wenn du lieber nicht in einem Terminal arbeitest.

Dann erstellen Sie das Provisioning-Profil im Entwicklerportal (Profiles > + > App Store Connect), wählen Sie Ihr App-ID und das neue Zertifikat aus und laden Sie es herunter.

Konfigurieren Sie das Signieren mit Capgo Build

Capgo Build compiles and signs Capacitor apps on Capgo-managed machines, so you can build iOS from Windows or Linux. Start by logging in and registering the app:

bunx @capgo/cli@latest login
bunx @capgo/cli@latest app add
bunx @capgo/cli@latest build init --platform ios
bunx @capgo/cli@latest build init --platform android

Bei iOS erstellt die Einrichtung entweder eine neue oder verwendet eine bestehende Zertifikats- und App-Store-Profil-Vorlage mit Ihrem App-Store-Connect-Schlüssel API. Bei macOS kann sie Sie auch durch die Erstellung dieses Schlüssels API führen. Bei Android erstellt sie entweder eine neue oder importiert eine bestehende Keystore und kann die Google Cloud-Dienstkonten und die Einladung zum Google Play-Console über Google-Anmeldedaten bereitstellen. Am Ende bietet sie Ihnen an, das erste Build zu starten.

Option B: Speichern Sie bestehende Dateien

Wenn Sie bereits die Dateien aus den vorherigen Abschnitten haben:

# iOS
bunx @capgo/cli@latest build credentials save \
  --platform ios \
  --certificate ./distribution.p12 \
  --p12-password "choose-a-password" \
  --ios-provisioning-profile ./AppStore.mobileprovision \
  --apple-key ./AuthKey_ABC1234567.p8 \
  --apple-key-id ABC1234567 \
  --apple-issuer-id 00000000-0000-0000-0000-000000000000 \
  --apple-team-id TEAM123456

# Android
bunx @capgo/cli@latest build credentials save \
  --platform android \
  --keystore ./release.jks \
  --keystore-alias upload \
  --keystore-key-password "store-password" \
  --keystore-store-password "store-password" \
  --play-config ./play-service-account.json

Für Apps mit Erweiterungen wiederholen Sie --ios-provisioning-profile mit einem bundleId=path Mapping für jede Zielplattform:

  --ios-provisioning-profile com.example.app=./App.mobileprovision \
  --ios-provisioning-profile com.example.app.widget=./Widget.mobileprovision

Die Anmeldeinformationen werden in ~/.capgo-credentials/credentials.json, sortiert nach der App-ID und der Plattform. --local zu speichern .capgo-credentials.json anstatt in dem Projekt zu speichern, und fügen Sie diese Datei zu .gitignorehinzu. Überprüfen Sie, was gespeichert wird mit bunx @capgo/cli@latest build credentials list.

Auslösen eines signierten Builds

Vorbereiten Sie das native Projekt, dann die Anfrage zum Build:

bun run build
bunx cap sync

# iOS: sign with the App Store profile and upload to TestFlight
bunx @capgo/cli@latest build request com.example.app --platform ios --build-mode release

# Android: sign the AAB and upload to the internal track
bunx @capgo/cli@latest build request com.example.app --platform android --build-mode release --android-track internal

Die Protokolle fließen in Ihr Terminal ein. Eine Vorbereitungsscan überprüft die Ablaufdatum der Zertifikate, Passwörter und Profilzuordnungen, bevor etwas hochgeladen wird, sodass die meisten Signierfehler in Sekunden statt in Minuten ausgelöst werden. Führen Sie es auf eigene Faust mit bunx @capgo/cli@latest build prescan --platform ios.

Nützliche Variationen:

Ziel Flaggen
Testbuild auf registrierten iPhones --ios-distribution ad_hoc --ios-provisioning-profile ./adhoc.mobileprovision --output-upload
APK für MDM- oder Kioskgeräte --platform android --no-playstore-upload --output-upload
Direkt zur App-Überprüfung einreichen --submit-to-store-review --store-release-name 2.4.0
Halten Sie Ihre eigene Buildnummer --skip-build-number-bump
Reinigung ohne Cache --no-cache

Für ad-hoc- Builds sammeln Sie zunächst die Geräte-UDIDs mit dem iOS UDID Finder und fügen Sie sie zur Profil

Automatisieren Sie die signierten Builds in CI

In CI werden die Anmeldeinformationen als Umgebungsvariablen übergeben und nicht als Anmeldeinformationen-Datei. Die CLI exportiert genau das, was Sie benötigen:

bunx @capgo/cli@latest build credentials manage --appId com.example.app
# choose "Export to .env"

GitHub, drücken Sie jede Zeile in einem Befehl in die Repository-Secrets ein und löschen Sie dann die Datei:

gh secret set -f .env.capgo.com.example.app
gh secret set CAPGO_TOKEN --body "your-capgo-api-key"
rm .env.capgo.com.example.app

Ein Release-Workflow, der sowohl Plattformen auf einem Tag signiert und versendet:

name: Signed release
on:
  push:
    tags: ['v*']

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        platform: [ios, android]
    steps:
      - uses: actions/checkout@v6
      - uses: oven-sh/setup-bun@v2
      - run: bun install --frozen-lockfile
      - run: bun run build
      - run: bunx cap sync ${{ matrix.platform }}
      - run: bunx @capgo/cli@latest build request com.example.app --platform ${{ matrix.platform }} --build-mode release
        env:
          CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }}
          BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
          P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
          CAPGO_IOS_PROVISIONING_MAP_BASE64: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP_BASE64 }}
          APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
          APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
          APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }}
          APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
          ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }}
          KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }}
          KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }}
          KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }}
          PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }}

Die Aufgabe läuft auf Linux. Kein macOS-Runner, keine Keychain-Befehle, keine Fastlane. Die gleichen Umgebungsvariablen funktionieren in jedem CI: GitLab CI/CD-Umgebungsvariablen, Bitbucket gesicherte Variablen, Gitea-Secrets oder Azure DevOps-Gruppen von Variablen. Plattform-spezifische Anleitungen: Bitbucket Pipelines, Gitea Actions, und die GitHub-Dokumentation zu Aktionen.

Wie Ihre Schlüssel behandelt werden

Auf eine faire Frage, bevor Sie Schlüssel für jede Cloud-Dienst übergeben. Mit Capgo Build:

  • Die Zugangsdaten befinden sich auf Ihrem Computer (~/.capgo-credentials/) oder in Ihrem CI-Secret-Speicher. Capgo hält keine Kryptobox Ihrer Schlüssel.
  • Für jeden Build sendet CLI sie über HTTPS. Sie werden nur während dieses Builds verwendet und gelöscht, wenn er abgeschlossen ist.
  • Nur das vorbereitete native Projekt wird hochgeladen. Ihre Web-Quelle, .gitund .env Dateien werden nicht.
  • Die gebauten Apps gehen direkt in App Store Connect oder Google Play oder auf eine zeitbegrenzte Download-Link, wenn Sie einen anfordern.

Der Handel: Die Aktualisierung einer Zugangsdaten bedeutet, dass Sie Ihre CI-Secrets selbst aktualisieren müssen. Re-export mit build credentials manage und drücken Sie die Datei erneut.

Abgelaufen und Rotation

Element Lebensdauer Was tun
Apple-Distributionssertifikat 1 Jahr Erstelle eine neue, regeneriere Profile, speichere erneut, aktualisiere CI
Provisionierungsprofil 1 Jahr oder bis sein Zertifikat widerrufen wird Regeneriere und speichere erneut
App Store Connect API-Schlüssel Bis widerrufen Widerrufen, wenn jemand mit Zugriff geht
Android-Upload-Zertifikat Solange seine Gültigkeit (auf Jahrzehnte setzen) Sichere es; zurücksetzen über Play Console, wenn verloren
Play-Dienst-Konto-Schlüssel Bis gelöscht Jährlich rotieren oder bei Änderungen des Zugriffs

Setzen Sie die Apple-Daten in einem geteilten Kalender. Ein abgelaufenes Zertifikat beeinflusst Apps, die bereits auf den Geräten der Benutzer installiert sind, aber blockiert jede neue Build.

Fehlertreiber

Error Ursache und Behebung
Provisioning profile doesn't include signing certificate Das Profil wurde für einen anderen App-Id erstellt oder fehlt eine Ziel-Extension. Fügen Sie eine
Provisioning profile doesn't match bundle ID Ein Profil wurde für eine andere App-ID erstellt oder fehlt eine Erweiterungsziel. Fügen Sie ein bundleId=path Kartierung für jeden Zielort.
MAC verification failed Falsch .p12 Passwort, oder OpenSSL 3 Export ohne -legacy.
Keystore was tampered with, or password was incorrect Falsches Speicherpasswort, oder das Datei wurde durch Base64-Zeilenbrüche beschädigt.
Key alias not found Alias unterscheidet sich vom in der Keystore. Liste es mit keytool -list -keystore release.jks.
App Store Connect-Authentifizierung fehlgeschlagen Falsche Schlüssel-ID oder Aussteller-ID, abgelaufener Schlüssel oder ein verzerrter Systemzeitpunkt auf der Maschine, die den Token signiert.
Play-Upload: Aufrufer hat keine Berechtigung Dienstkontoinvitation in Play Console, oder der Android-Entwickler API ist nicht aktiviert.

Mehrere Fehler sind im Capgo-Build-Fehlersuchguide und CI/CD für Capacitor: häufige Fehlerquellen.

After dem ersten signierten Build

Signed native Builds sind nur erforderlich, wenn native code-Änderungen vorgenommen werden. Für JavaScript-, CSS- und HTML-Änderungen können Sie ein live update zu installierten Apps wechseln und Build-Store-Angebote für Releases speichern, die Plugins oder native Konfigurationen betreffen. Wenn Sie von einem Mac-basierten Setup kommen, Bauen Sie eine iOS App von Windows mit Capgo Bauen zeigt die gesamte Workflow ohne macOS.

Live-Updates für Capacitor-Apps

Wenn ein Web-Schicht-Bug live ist, versenden Sie die Reparatur über Capgo anstatt Tage auf die Genehmigung der App-Stores zu warten. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Verfahren bleiben.

Neueste aus unserem Blog

Capgo bietet Ihnen die besten Einblicke, die Sie benötigen, um eine wirklich professionelle Mobil-App zu erstellen.