Zum Hauptinhalt springen
CI/CD

Automatischer Capacitor IOS-Build mit GitHub Aktionen mit Zertifikat

Wie Sie in 5 Minuten (2024) eine CI/CD-Pipeline für Ihre IOS-Ionic-App mit fastlane und GitHub Actions einrichten

Martin Donadieu

Martin Donadieu

Content-Marketing-Beauftragter

Automatischer Capacitor IOS-Build mit GitHub Aktionen mit Zertifikat

Die Einrichtung von CI/CD für Capacitor-Anwendungen kann komplex und zeitaufwändig sein. Hier ist, was Sie wissen müssen:

Wir empfehlen nun die Verwendung von Capgo Build mit der Capgo CLI zur Erstellung von nativen Capacitor-Anwendungen. Dieses Fastlane-Leitfaden wird für Teams aufrechterhalten, die bestehende GitHub-Actions-Pipelines weiterhin unterhalten, aber neue iOS-Builds sollten die Capgo CLI verwenden, damit Sie keine Fastlane, Xcode-Runner, Zertifikate, Berechtigungsprofile und Upload-Skripte selbst unterhalten müssen.

Capgo Build für CI/CD von Capgo

Vermeiden Sie die Wartung von Fastlane, Xcode-Runner, Zertifikaten, Berechtigungsprofilen und Upload-Skripten. Capgo Build führt signierte native iOS-Builds aus Ihrer bestehenden CI/CD-Pipeline aus:

  • Arbeitet mit Ihrer Pipeline zusammen: Auslösen Sie Capgo Build von GitHub Actions, GitLab CI, Jenkins oder lokalen Skripten nach Ihrem Web-Build und npx cap sync.
  • Signierung aus CI-Secrets: Halten Sie App Store Connect-Schlüssel, Zertifikate, Provisioning-Profil, Passwörter und Team-IDs in Ihren eigenen CI-Secrets.
  • Keine native Runner-Vereinbarung: Capgo Build bietet gepflegte Apple-Build-Umgebungen, sodass Sie macOS-Runner, Xcode-Bilder oder Fastlane-Lane nicht verwalten müssen.
  • Artikel und Einreichung: Laden Sie signierte Artikel für QA oder einreichen Sie Release-Builds über den Capgo CLI.

Preise

  • Capgo-Pläne beginnen bei 12 $/Monat
  • Inklusive OTA-Updates und etwa 15 native Builds pro Monat
  • Zusätzliche Build-Minuten werden durch Minuten über Credits abgerechnet

Einrichten Sie Capgo Build in CI/CD

Manuelle Einrichtungsanleitung

Hier ist, was Sie tun müssen:

Continuous Delivery für iOS mithilfe von Fastlane und GitHub Aktionen und Zertifikat

Voraussetzungen

Bevor Sie mit der Anleitung fortfahren:

  • Stellen Sie sicher, dass Sie Fastlane installiert auf Ihrem Entwicklungsrechner haben.
  • Stellen Sie sicher, dass Sie Mitglied des iOS-Entwicklerprogramms sind.

Wichtige Informationen zur Preisgestaltung

Preis GitHub Aktion

https://github.com/features/actions

Der Dienst ist ‘kostenlos bis zur Grenze, je nach gewählter Maschine.
Wir werden eine macOS Maschine verwenden, Sie können im Screenshot ihren Preis und Grenzen (Preise zum Zeitpunkt der Erstellung des Tutorials, sie könnten sich in Zukunft ändern) sehen.

Nachdem Sie über Anforderungen und Preise gewarnt wurden, können wir fortfahren.

Hinweis: In dem Blog-Beitrag wird davon ausgegangen, dass Sie bereits eine App in App Store Connect erstellt haben. Die wichtigen Informationen werden von Fastlane kopiert!

Was werden Sie in dem Tutorial lernen

Schritte, die Sie im Blog-Beitrag befolgen müssen

  1. Verwendung von App Store Connect API mit Fastlane
    • Anforderungen:
      • Erstellung eines App Store Connect API-Schlüssels
      • Mit einem App Store Connect API-Schlüssel verwenden
  2. Fastlane-Dateien kopieren
  3. GitHub-Aktionen konfigurieren

1. App Store Connect API mit Fastlane verwenden

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 Sicherheitsschicht für Ihren Apple-ID hilft sicherzustellen, dass Sie der einzige sind, der Zugriff auf Ihr Konto hat.
Von Apple-Support

Anforderungen

Um sicherzustellen, dass Fastlane App Store Connect API verwenden kann, um Ihre App hochzuladen, müssen Sie die folgenden drei Dinge bereitstellen:

  1. Aussteller-ID
  2. Sicherheitschlüssel-ID
  3. Sicherheitsdatei oder Schlüsselinhalt

Ermittlung eines App Store Connect API-Schlüssels

Um Schlüssel zu generieren, müssen Sie in App Store Connect die Administratorrechte haben. Wenn Sie diese Berechtigung nicht haben, können Sie den relevanten Personen diesen Artikel empfehlen.

  1. Anmeldung bei App Store Connect.

  2. Auswählen Benutzer und Zugriff.

Zugriff auf App Store Connect

3 — Wählen Sie die Integration-Taste.

App Store Connect API-Integration

  1. Klicken Sie auf Erstellen von API-Schlüssel oder auf die (+) Taste.

App Store Connect API Schlüssel erstellen

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

App Store Connect API Schlüssel erstellen - Name

6 — Unter Zugriff wählen Sie die Rolle für den Schlüssel aus. Die für Schlüssel geltenden Rollen sind dieselben Rollen, die für Benutzer auf Ihrem Team gelten. Siehe Benutzerrechte. Wir empfehlen, die Rolle App-Manager.

  1. Klicken Sie auf Generieren.

Ein API-Schlüssels Zugriff 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.

App Store Connect - Schlüssel herunterladen

Hier können Sie alle drei notwendigen Informationen abrufen.
<1> Issue-ID. (APPLE_ISSUER_ID Sicherheitschlüssel
<2> Schlüssel-ID. (APPLE_KEY_ID Sicherheitschlüssel
Klicken Sie auf "Download API-Sicherheitsschlüssel" zum Herunterladen Ihres API-Sicherheitsschlüssels. Der Download-Link erscheint nur, wenn der Sicherheitsschlüssel noch nicht heruntergeladen wurde. Apple hält keinen Kopie des Sicherheitsschlüssels. Sie können ihn also nur einmal herunterladen.

🔴 Speichern Sie Ihren Sicherheitsschlü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-Code einbetten.

Using an App Store Connect API Key

Das API-Sicherheitsschlüssel-Datei (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_keySie können andere Möglichkeiten in Fastlane-Dokumentationerfahren. Ich zeige diese Methode an, weil ich sie für die einfachste Möglichkeit halte, mit den meisten CI auszukommen, bei denen Sie Umgebungsvariablen setzen können.

Bitte konvertieren Sie die heruntergeladene p8-Datei in Base64 und speichern Sie sie als geheimes (APPLE_KEY_CONTENT).

base64 -i APPLE_KEY_CONTENT.p8 | pbcopy

Jetzt können wir App Store Connect mit Fastlane über die API-Schlüssel verwalten, großartig!

2. Zertifikate

Öffnen Sie XCode und gehen Sie zu Einstellungen > Abrechnungen > Apple-ID > Teams und wählen Sie Ihr Team.

Code-Signaturidentitäten

Klicken Sie auf Zertifikate verwalten.

Wenn Sie noch kein Zertifikat erstellt haben, können Sie ein neues Zertifikat erstellen.

Klicken Sie auf + und wählen Sie Apple Distribution

Apple Distribution

Dann müssen Sie zum Schlüsselkarten-Manager gehen, um das Zertifikat als .p12 Datei herunterzuladen.

Dazu müssen Sie zum Schlüsselkarten-Manager gehen, auf die Anmelde Schlüsselkarte umschalten und dann die Registerkarte Meine Zertifikate.

Meine Zertifikate

Dann können Sie das Zertifikat auswählen, das Sie herunterladen möchten. (Suchen Sie nach dem Datum des Zertifikats)

Klicken Sie dann mit der rechten Maustaste auf das private Schlüsselzertifikat und wählen Sie __CAPGO_KEEP_0__.

Dateiformat wählen Persönliche Informationen austauschen (.p12).

Das Zertifikat wird als .p12 Datei heruntergeladen.

Öffnen Sie die Datei in einem Terminal und verwenden Sie den folgenden Befehl, um sie in Base64 umzuwandeln:

base64 -i BUILD_CERTIFICATE.p12 | pbcopy

Das wird Ihr BUILD_CERTIFICATE_BASE64 Geheimnis. Geben Sie auch bei der Aufforderung bitte das Zertifikatspasswort ein. Dieses Passwort wird Ihr P12_PASSWORD Geheimnis.

3. Provisionierungsprofile

Öffnen Apple Developer und wählen Sie das richtige Team.

Dann erstellen Sie ein neues Profil, indem Sie auf +

Ein neues Profil erstellen

Und wählen Sie App Store Connect.

App Store Connect auswählen

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

Das richtige App auswählen

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

Wählen Sie das richtige Zertifikat

Schließlich geben Sie den Namen des Profils ein und klicken Sie auf Erstellen.

Der Name wird zum Identifizieren des Profils in Fastlane verwendet, unter der Werte von APPLE_PROFILE_NAME.

Erstellen Sie das Profil

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

Herunterladen Sie das Profil

Bitte konvertieren Sie das Profil in Base64 und speichern Sie es als ein 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 gemeinsamen 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 ausfü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.

Erstellen Sie das Fastlane-Verzeichnis am Root Ihres Capacitor/Ionic-Projekts und fügen Sie das Fastfile dort hinzu:

  • Ordner: <project-root>/fastlane/
  • Datei: <project-root>/fastlane/Fastfile

Dies ist auf derselben Ebene wie package.json, capacitor.config.*, und das ios/ Verzeichnis. Erstellen Sie 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. Einrichten von Geheimnissen

GitHub Actions verwendet die Repository-Secrets, die Sie in diesem 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ächststens dem Fastfile. Kommitieren Sie diese Datei nicht. Fügen Sie fastlane/.env zu Ihrem .gitignore ersten (oder überprüfen Sie, ob es bereits ignoriert ist). 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=

APP_STORE_CONNECT_TEAM_ID erhalten

Gehe zu Entwickler-Zentrum und scrollen Sie nach unten zur Membership details Abschnitt. Die Team ID ist der Wert, den Sie in der APP_STORE_CONNECT_TEAM_ID geheimen app-store-connect-team-id

APP_STORE_CONNECT_TEAM_ID erhalten

Öffne Xcode

  1. Doppelklicken Sie auf die
  2. im Projekt-Navigator App BUNDLE_IDENTIFIER erhalten
  3. Klicken Sie dann auf die Registerkarte Signing and Capabilities
  4. Kopieren Sie den Wert von dem Bundle identifierDies ist der Wert, den Sie in dem BUNDLE_IDENTIFIER Geheimnis einstellen müssen.
bundle-identifier-xcode

6. Verarbeitung von Aufgaben

In GitHub Aktionen, Sie werden auf die 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.Sie werden auf die Minuten abgerechnet, die Sie für die Ausführung Ihres CI/CD-Workflows verwendet haben.

Wenn Sie sich um die Kosten für private Projekte Sorgen, können Sie dies skip_waiting_for_build_processing dies trueDies wird die Build-Minuten sparen, indem Sie nicht auf die Verarbeitung der Build 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 die Build an die Benutzer verteilen können.

This optimization is mainly useful for private projects where build minutes cost money. For public/free projects, the build minutes are free so there’s no need to enable this setting. See GitHub’s Bei öffentlichen/ kostenlosen Projekten sind die Build-Minuten kostenlos, daher ist es nicht notwendig, diese Einstellung zu aktivieren. Siehe die Preisliste von __CAPGO_KEEP_0__ für weitere Details.

7. Einrichten von GitHub Aktionen

Konfigurieren von GitHub Geheimnissen

Bitte kopieren Sie die Geheimnisse aus dem .env Datei und fügen Sie sie in die Geheimnisse des GitHub-Repositories ein.

Geht zu Einstellungen > Geheimnisse und Variablen > Aktionen > Neuer Repository-Schlüssel

github-geheimnisse

2. BUILD_CERTIFICATE_BASE64 - Zertifikat im Base64-Format.

3. BUILD_PROVISION_PROFILE_BASE64 - Base64-codiertes Provisionierungsprofil.

4. BUNDLE_IDENTIFIER - Ihr Apps-Bundle-Identifier.

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, prüfen Sie es

8. Konfigurieren Sie das GitHub-Workflow-Datei

Erstellen Sie einen GitHub-Workflow-Ordner.

cd .github/workflows

Im workflow Ordner 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 ausgelöst werden. , wenn Sie die Automatisierung von Tags benötigen, wenden Sie sich bitte anAutomatisches Bauen und Freigeben mit __CAPGO_KEEP_0__-Aktionen Automatic build and release with GitHub actions Dann wird dieser Workflow Ihre NodeJS-Abhängigkeiten ziehen, sie installieren und Ihr JavaScript-Anwendungsprogramm bauen.

Ordner

Jedes Mal, wenn Sie einen neuen Commit senden, wird ein Release in TestFlight erstellt.

Ihre App muss Ionic nicht verwenden, nur die Capacitor-Basis ist erforderlich. Sie kann alte Cordova-Module haben, aber die Capacitor-JS-Plugin sollte bevorzugt werden.

8. Auslösen Sie die Workflow-Instanz

Erstellen Sie einen Commit

Machen Sie einen commitSie sollten das aktive Workflow-Repository sehen.

Auslösen Sie die Workflow-Instanz

Schieben Sie die neuen Commits in die Zweig main oder development um die Workflow-Instanz auszulösen.

Mit dem Commit gestartet

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

Testflight-Dashboard

9. Kann ich von meinem lokalen Computer aus deployen?

Ja, das kannst du, und es ist einfach.

Du kannst Xcode verwenden, um deine App zu bauen und zu signieren, wie immer.

CI/CD-Einrichtungshandbücher

Alternative CI/CD-Plattformen

Live-Updates und Bereitstellung

Vielen Dank

Dieser Blog basiert auf den folgenden Artikeln:

Bleiben Sie bei der automatischen Capacitor-IOS-Build mit GitHub-Aktionen mit Zertifikat

Wenn Sie CI/CD-Automatisierung planen und es mit Automatische Capacitor-IOS-Build mit GitHub-Aktionen mit Zertifikat verbinden möchten, ist es wichtig, __CAPGO_KEEP_0__-CI/CD zu verwenden Wenn Sie Capgo verwenden für den Produktworkflow in Capgo CI/CD Capgo Native Builds für den Produktworkflow in Capgo Native Builds Capgo Integrations für den Produktworkflow in Capgo Integrations CI/CD-Integration für die Implementierungsdetails in CI/CD-Integration und GitHub Actions-Integration für die Implementierungsdetails in GitHub Actions-Integration

Live-Updates für Capacitor-Anwendungen

Wenn ein Bug im Web-Schicht lebt, liefern Sie die Reparatur über Capgo anstatt Tage für die Genehmigung des App-Store abzuwarten. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Verfahren bleiben.

Jetzt loslegen

Neuestes aus unserem Blog

Capgo gibt Ihnen die besten Einblicke, die Sie benötigen, um eine wirklich professionelle mobile App zu erstellen.