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 Aktionen einrichten

Martin Donadieu

Martin Donadieu

Content-Marketing-Spezialist

Automatischer Capacitor IOS-Build mit GitHub Aktionen mit Zertifikat

Die Einrichtung von CI/CD für Capacitor-Apps 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 For native Capacitor-Bauwerke. Diese Anleitung zu Fastlane wird für Teams aufrechterhalten, die bestehende GitHub-Actions-Pipelines weiterhin pflegen, 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

Fastlane, Xcode-Runner, Zertifikat, Berechtigungsprofil und Upload-Skriptpflege überspringen. Capgo-Bauwerk __CAPGO_KEEP_0__-Bauwerk führt signierte native iOS-Bauwerke von Ihrem bestehenden CI/CD-Pipeline aus:

  • Arbeitet mit Ihrer Pipeline zusammen: Auslösen Sie Capgo-Bauwerk von GitHub Actions, GitLab CI, Jenkins oder lokalen Skripten nach Ihrem Web-Bauwerk und npx cap sync.
  • Signierung aus CI-Secrets: Halten Sie App Store Connect-Schlüssel, Zertifikate, Berechtigungsprofile, Passwörter und Team-IDs in Ihren eigenen CI-Secrets.
  • Keine native Runner-Vermögensverwaltung: Capgo-Bauwerk bietet gepflegte Apple-Bauumgebungen, sodass Sie macOS-Runner, Xcode-Bilder oder Fastlane-Lane nicht selbst verwalten müssen.
  • Komponten und Einreichung: Capgo CLI herunterladen, um signierte Komponten für QA oder Release-Builds einzureichen.

Preise

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

Einrichten Sie Capgo Build in CI/CD

Manuelle Einrichtungsanleitung

Hier ist, was Sie tun müssen:

Kontinuierliche Lieferung für iOS mit Fastlane und GitHub-Aktionen und Zertifikat

Voraussetzungen

Bevor Sie mit dem Tutorial fortfahren:

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

Wichtige Informationen zur Preisgestaltung

Preis GitHub Action

https://github.com/features/actions

Die Dienstleistung ist ‘kostenlos’ bis zur Grenze, je nach gewählter Maschine.
Wir werden eine macOS Sie können im Screenshot den Preis und die Grenzen (Preise Stand 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 Blog-Beitrag wird davon ausgegangen, dass Sie bereits eine App in App Store Connect erstellt haben. Die wichtigen Informationen werden von Fastlane kopiert!

Was Sie in diesem Tutorial lernen werden.

Schritte, die Sie in diesem Blog-Beitrag befolgen müssen.

  1. App Store Connect API mit Fastlane verwenden.
    • Anforderungen:
      • Eine App Store Connect API-Schlüssel erstellen.
      • 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 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: Aussteller-ID

  1. Schlüssel-ID
  2. Schlüsseldatei oder Schlüsselinhalt
  3. Erwerb einer App Store Connect __CAPGO_KEEP_0__-Schlüssel

Obtaining an App Store Connect API Key

Zwei

  1. Anmelden App Store Connect.

  2. Auswählen Benutzer und Zugriff.

Zugriff auf App Store Connect

3 — Wählen Sie die Integrationsoption.

App Store Connect API-Integration

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

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 Rollen, die auf Schlüssel angewendet werden, sind dieselben Rollen, die auf Benutzer auf Ihrem Team angewendet werden. Siehe Rollenberechtigungen. Wir empfehlen, auszuwählen App-Manager.

  1. Klicken Sie auf Generieren.

Ein API-Schlüssel kann nicht auf bestimmte Apps beschränkt werden.

Der neue Schlüsselname, die Schlüssel-ID, ein Download-Link und weitere Informationen erscheinen auf der Seite.

App Store Connect-Download-Schlüssel

Hier können Sie alle drei notwendigen Informationen erhalten.
<1> Issue-ID. (APPLE_ISSUER_ID Geheim
<2> Schlüssel-ID. (APPLE_KEY_ID Geheim
<3> Klicken Sie auf "Download API Schlüssel" um Ihren API privaten Schlüssel herunterzuladen. Der Download-Link erscheint nur, wenn der private Schlüssel noch nicht heruntergeladen wurde. Apple speichert 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 Ihren Schlüssel niemals teilen, Schlüssel in einem code Repository speichern oder Schlüssel in Client-Seiten code einbetten.

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, wie diese Informationen in Fastlane eingegeben werden können. 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 Fastlane-Dokumentation. Ich zeige Ihnen diese Methode, weil ich glaube, dass sie die einfachste Möglichkeit ist, um mit den meisten CI auszukommen, wo 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 > Konten > Apple ID > Teams und wählen Sie Ihr Team.

Code Signieridentitäten

Klicken Sie auf Zertifikate verwalten.

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

Klicken Sie auf + And wählen Sie Apple Distribution

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 die Anmelde-

Schlüsselkasten 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).

Und dann auf die private Schlüssel auf dem Zertifikat rechtsklicken und wählen Sie

and select

Apple Distribution Export.

Wählen Sie die Dateiformat Persönliche Informationen austauschen (.p12).

Das wird das Zertifikat als .p12 Datei herunterladen.

Bitte ö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, wenn gefragt, bitte das Passwort des Zertifikats an. Dieses Passwort wird Ihr P12_PASSWORD Geheimnis.

3. Provisioning-Profile

Öffnen Apple Developer Wählen Sie das richtige Team.

Klicken Sie dann auf "Neue Profil erstellen" +

Neue Profil erstellen

Wählen Sie App Store Connect auswählen.

App Store Connect auswählen

Sie müssen dann das richtige App auswählen, beachten Sie, dass Sie keine Wildcard verwenden dürfen, 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 der gleiche Tag und Monat wie heute sein) und klicken Sie auf Fortsetzen.

Wählen Sie das richtige Zertifikat

Gegebenenfalls geben Sie den Namen des Profils ein und klicken Sie auf Erstellen.

Der Name wird zur Identifizierung des Profils in Fastlane unter dem Wert verwendet APPLE_PROFILE_NAME.

Erstelle das Profil

Du kannst das Profil als .mobileprovision Datei herunterladen.

Das Profil herunterladen

Bitte konvertiere das Profil in Base64 und speichere es als ein Geheimnis (BUILD_PROVISION_PROFILE_BASE64).

base64 -i BUILD_PROVISION_PROFILE.mobileprovision | pbcopy

4. Kopiere Fastlane-Dateien

Fastlane ist eine Ruby-Bibliothek, die zum Automatisieren von gängigen Aufgaben der mobilen Entwicklung erstellt wurde. Mit Fastlane kannst du benutzerdefinierte „Bahnen“ konfigurieren, die eine Reihe von „Aktionen“ enthalten, die Aufgaben ausführen, die du normalerweise mit Android Studio durchführen würdest. Du kannst viel mit Fastlane erreichen, aber für die Zwecke dieses Tutorials werden wir nur eine Handvoll grundlegender Aktionen verwenden.

Erstelle das Fastlane-Verzeichnis am Root deines 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-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ächstens dem Fastfile. Erstelle diese Datei nicht. Füge fastlane/.env zu Ihrem .gitignore ersten (oder überprüfe, 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=

Abrufen des APP_STORE_CONNECT_TEAM_ID

Gehe zu Entwickler-Zentrum und scrollen Sie nach unten zu Membership details Abschnitt. Die Team ID ist der Wert, den Sie in der APP_STORE_CONNECT_TEAM_ID Geheimzahl.

app-store-connect-team-id

Erhalten Sie den BUNDLE_IDENTIFIER

  1. Öffnen Sie Xcode
  2. Doppelklicken Sie auf die App in dem Projektnavigator
  3. Dann klicken Sie 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.
bundle-identifier-xcode

6. Verarbeitung von Processing

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.

Wenn Sie sich um die Kosten für private Projekte Sorgen, können Sie skip_waiting_for_build_processing zu. Dies spart Buildminuten, indem Sie nicht auf die Fertigstellung der Verarbeitung durch App Store Connect warten müssen. trueEs gibt jedoch einen Kompromiss - Sie müssen die Compliance-Informationen Ihrer App in App Store Connect manuell aktualisieren, bevor Sie die Veröffentlichung an die Benutzer freigeben können.

Diese Optimierung ist hauptsächlich für private Projekte nützlich, bei denen die Buildminuten Geld kosten.

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 Siehe die __CAPGO_KEEP_0__-Preisliste für weitere Details. 7. Einrichten von __CAPGO_KEEP_0__-Aktionen

Konfigurieren von GitHub-Geheimnissen

Configure GitHub secrets

Datei und fügen Sie sie in die __CAPGO_KEEP_0__-Repository-Geheimnisse ein. .env file and paste them into the GitHub repository secrets.

Einstellungen Siehe die __CAPGO_KEEP_0__-Preisliste für weitere Details. &gt; Geheimnisse und Variablen &gt; Aktionen &gt; 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, überprüfen Sie es

8. Konfigurieren Sie das GitHub Workflow-Datei

Erstellen Sie ein GitHub Workflow-Verzeichnis.

cd .github/workflows

Im Verzeichnis, erstellen Sie eine Datei mit dem Namen workflow und fügen Sie folgendes hinzu. build-upload-ios.ymlDiese Aktion sollte nach jedem __CAPGO_KEEP_0__-Tag ausgelöst werden

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

This workflow should be triggered after each GitHub Automatischer Build und Release mit __CAPGO_KEEP_0__-Aktionencheck it 8. Configure GitHub workflow file erstens.

Dann wird diese Workflow deine NodeJS-Abhängigkeiten ziehen, installieren und dein JavaScript-Anwendungsprogramm bauen.

Jedes Mal, wenn du einen neuen Commit sendest, wird in TestFlight ein 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 bevorzugt.

8. Auslösen Sie den Workflow

Erstellen Sie einen Commit

Machen Sie einen commit, Sie sollten das aktive Workflow im Repository sehen.

Auslösen Sie den Workflow

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

Mit Commit gestartet

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

Testflight-Dashboard

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.

CI/CD-Einrichtungsleitfäden

Alternative CI/CD-Plattformen

Live-Updates &amp; Bereitstellung

Danke

Dieser Blog basiert auf den folgenden Artikeln:

Fortsetzen Sie von Automatischem Capacitor IOS-Build mit GitHub-Aktionen mit Zertifikat

Wenn Sie __CAPGO_KEEP_0__ verwenden Automatischer Capacitor IOS-Build mit GitHub-Aktionen mit Zertifikat um die CI/CD-Automatisierung zu planen, mit ihr zu verbinden Capgo CI/CD 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 Web-Schicht-Bug live ist, liefern Sie die Reparatur über Capgo anstatt Tage auf die App-Store-Zulassung zu warten. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Verfahren bleiben.

Los geht's jetzt

Aktuelle Beiträge aus unserem Blog

Capgo bietet Ihnen die besten Einblicke, die Sie benötigen, um eine echte professionelle Mobilanwendung zu erstellen.