Zum Hauptinhalt springen
CI/CD

Automatische Capacitor IOS-Build mit GitHub Aktionen mit Zertifikat

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

Martin Donadieu

Martin Donadieu

Content Marketer

Automatische Capacitor IOS-Build mit GitHub Aktionen mit Zertifikat

Die Einrichtung von CI/CD für Capacitor-Apps kann komplex und zeitaufwändig sein. Hier sind die wichtigsten Informationen:

Wir empfehlen nun die Verwendung von Capgo Build mit dem Capgo CLI für native Capacitor-Bauten. Diese Fastlane-Anleitung wird für Teams aufrechterhalten, die bestehende GitHub Actions-Pipelines weiterhin unterhalten, aber neue iOS-Bauten sollten die Capgo CLI verwenden, damit Sie keine Fastlane, Xcode-Runner, Zertifikate, Berechtigungsprofile und Upload-Skripte selbst pflegen müssen.

Capgo Build für CI/CD von Capgo

Überspringen Sie die Fastlane-, Xcode-Runner-, Zertifikats-, Berechtigungsprofil- und Upload-Skript-Pflege. Capgo Build führt native iOS Builds, die von Ihrem bestehenden CI/CD-Pipeline ausgeführt werden:

  • Wird mit Ihrer Pipeline verwendet: 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-Profiles, Passwörter und Team-IDs in Ihren eigenen CI-Secrets.
  • Keine native Runner-Vermögensverwaltung: Capgo Build stellt gepflegte Apple-Build-Umgebungen bereit, sodass Sie keine macOS-Runner, Xcode-Bilder oder Fastlane-Lane verwalten müssen.
  • Artikel und Submission: Laden Sie signed Artikel für QA oder submit Release Builds durch den Capgo CLI.

Preise

  • Capgo-Pläne beginnen bei 12 $/Monat
  • Ermöglicht OTA-Updates und etwa 15 native Builds pro Monat
  • Zusätzliche Build-Minuten werden durch Minuten pro Kredit abgerechnet

Einrichten Sie Capgo Build in CI/CD

Manueller Setup-Leitfaden

Hier ist, was Sie tun müssen:

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

Voraussetzungen

Bevor Sie mit der Anleitung fortfahren:

  • Stellen Sie sicher, dass Sie Fastlane installiert auf Ihrem Entwicklungsgerät.
  • Stellen Sie sicher, dass Sie Mitglied des iOS-Entwicklerprogramms sind.

Wichtige Informationen zur Preisgestaltung

Preis GitHub Aktion

https://github.com/features/actions

Die Dienstleistung ist ‘frei’ bis zur Grenze, abhängig von der gewählten Maschine.
Wir werden ein macOS Maschinentechnologie verwenden, Sie können im Bildschirmfoto den Preis und die Grenzen (Preise Stand 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 gehe ich davon aus, dass Sie die App in App Store Connect erstellt haben. Die wichtigen Informationen werden von Fastlane kopiert!

Was werden Sie in dem Tutorial lernen?

Schritte zum Folgen in der post

  1. Verwendung von App Store Connect API mit Fastlane
    • Schutzbedingungen:
      • Erstellung eines App Store Connect API-Schlüssels
      • Verwendung eines App Store Connect API-Schlüssels
  2. Kopieren von Fastlane-Dateien
  3. Konfiguration von GitHub-Aktionen

1. Verwendung von App Store Connect API mit Fastlane

Ab Februar 2021 ist die Zwei-Faktor-Authentifizierung oder die Zwei-Schritt-Verifizierung für alle Benutzer erforderlich, um sich bei App Store Connect anzumelden. Diese zusätzliche Sicherheitsschicht für Ihren Apple-Konto hilft sicherzustellen, dass Sie der einzige Person sind, die Zugriff auf Ihr Konto hat.
Von Apple Support

Schutzbedingungen

In order for Fastlane to be able to use App Store Connect API to upload your app, you need to provide the following drei Dinge:

  1. Zertifikats-ID
  2. Schlüssel-ID
  3. Schlüsseldatei oder Schlüsselinhalt

Erwerb eines App Store Connect API-Schlüssels

Um Schlüssel zu generieren, müssen Sie Admin-Berechtigungen in App Store Connect haben. Wenn Sie diese Berechtigung nicht haben, können Sie die entsprechende Person auf diesen Artikel hinweisen.

  1. Anmelden bei App Store Connect.

  2. Wählen Sie Benutzer und Zugriff.

App Store Connect Benutzerzugriff

3 — Wählen Sie die Integrationsebene.

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 ein. 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 Zugriffsrechte. Wir empfehlen, die Rolle App-Manager.

  1. Klicken Sie auf Erstellen.

An API key’s access cannot be limited to specific apps.

Der Name des neuen Schlüssels, die Schlüssel-ID, ein Download-Link und weitere Informationen erscheinen auf der Seite.

Herunterladen von App Store Connect-Schlüsseln

Sie können alle drei notwendigen Informationen hier finden.
<1> Issue-ID. (APPLE_ISSUER_ID Geheim
<2> Schlüssel-ID. (APPLE_KEY_ID Geheim
<3> Klicken Sie auf „Herunterladen API-Schlüssel“ um Ihren API-Schlüssel herunterzuladen. Der Download-Link erscheint nur, wenn der private Schlüssel noch nicht heruntergeladen wurde. Apple hält keine Kopie des privaten Schlüssels. Sie können ihn also 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 einbinden.

Using an App Store Connect API Key

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 Methoden lernen, Fastlane-Dokumentation. Ich zeige Ihnen diese Methode, weil ich glaube, dass sie die einfachste Art ist, mit den meisten CI-Tools zu arbeiten, bei denen Sie Umgebungsvariablen einstellen können.

Bitte konvertieren Sie das heruntergeladene p8-File in Base64 und speichern Sie es als Geheimnis (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 > Rechnungen > Apple-ID > Teams und wählen Sie Ihr Team.

Code Signierungsidentitä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 Keychain gehen, um das Zertifikat als Download herunterzuladen. .p12 Datei.

Dazu müssen Sie zum Schlüsselkasten wechseln, auf die Registerkarte "Schlüsselkasten" und dann auf die Registerkarte "Meine Zertifikate" Anmelden Schlüsselkasten Meine Zertifikate.

Meine Zertifikate

Dann können Sie das gewünschte Zertifikat auswählen. (Suchen Sie nach dem Datum des Zertifikats)

Und dann klicken Sie mit der rechten Maustaste auf den privaten Schlüssel auf dem Zertifikat und wählen Sie "Exportieren" Exportieren.

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

Das wird das Zertifikat als eine Datei herunterladen. .p12 Datei.

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

base64 -i BUILD_CERTIFICATE.p12 | pbcopy

Dies wird Ihr BUILD_CERTIFICATE_BASE64 Geheimnis. Geben Sie auch, wenn gefragt, die Passphrase des Zertifikats an. Diese Passphrase 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 +

Erstellen Sie ein neues Profil

und wählen Sie App Store Connect.

Select App Store Connect

Wählen Sie dann das richtige App, seien Sie vorsichtig, Sie können keine Wildcard verwenden, sonst wird die Signierung fehlschlagen.

Select the right app

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 Continue.

Select the right certificate

Geben Sie schließlich den Namen des Profils ein und klicken Sie auf Generate.

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

Generate the profile

Sie können das Profil als .mobileprovision Datei.

Das Profil herunterladen

Bitten Sie, das Profil in Base64 umwandeln und als Geheimnis speichern (BUILD_PROVISION_PROFILE_BASE64).

base64 -i BUILD_PROVISION_PROFILE.mobileprovision | pbcopy

4. Fastlane-Dateien kopieren

Fastlane ist eine Ruby-Bibliothek, die zum Automatisieren von gängigen Aufgaben im mobilen Entwicklungsprozess entwickelt 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 den Zweck 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 dorthin hinzu:

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

Dies ist auf derselben Ebene wie package.json, capacitor.config.*, und das ios/ Ordner. 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. Geheimnisse einrichten

Aktionen von GitHub verwenden die Repository-Secrets, die Sie in diesem Schritt konfigurieren. Sie benötigen nur ein lokales Datei, wenn Sie die Aktionen von Ihrem eigenen Rechner aus ausführen oder testen möchten. .env Für lokale Tests erstellen Sie

nächstens der <project-root>/fastlane/.env . Verwenden Sie diese Datei nicht im Commit. Fügen Sie Fastfilezu Ihrem fastlane/.env ersten (oder überprüfen Sie, ob es bereits ignoriert ist). Hier ist ein Beispiel: .gitignore Die Ermittlung des APP_STORE_CONNECT_TEAM_ID

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=

Gehen Sie zu

Entwickler-Zentrum und scrollen Sie nach unten zur Sektion. Membership details Die APP-Store-Connect-Team-ID ist erforderlich, um die App im App Store zu veröffentlichen. Team ID ist der Wert, den Sie in der APP_STORE_CONNECT_TEAM_ID geheimen.

app-store-connect-team-id

Getting the BUNDLE_IDENTIFIER

  1. Open Xcode
  2. Doppelklicken Sie auf das App in der Projektnavigator
  3. Dann klicken Sie auf die Registerkarte Signing and Capabilities
  4. Kopieren Sie den Wert von dem Bundle identifier. Dies ist der Wert, den Sie in der BUNDLE_IDENTIFIER geheimen.
bundle-identifier-xcode

6. Verarbeitung bearbeiten

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 ablaufen.Wenn Sie sich um die Kosten für private Projekte Sorgen, können Sie

festlegen. Dies spart Build-Minuten, indem Sie nicht auf die Verarbeitung des Builds in App Store Connect warten. skip_waiting_for_build_processing Es gibt jedoch einen Kompromiss - Sie müssen die Compliance-Informationen Ihres Apps in App Store Connect manuell aktualisieren, bevor Sie den Build an die Benutzer verteilen können. trueDiese Optimierung ist vor allem für private Projekte nützlich, bei denen Build-Minuten Geld kosten. Bei öffentlichen/ kostenlosen Projekten sind die Build-Minuten kostenlos, daher ist es nicht notwendig, diese Einstellung zu aktivieren. Siehe __CAPGO_KEEP_0__’s

However, there is a tradeoff - you’ll need to manually update your app’s compliance information in App Store Connect before you can distribute the build to users.

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 Preisliste Weitere Informationen finden Sie hier.

7. GitHub-Aktionen einrichten

GitHub-Geheimnisse konfigurieren

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

Zum Einstellungen &gt; Geheimnisse und Variablen &gt; Aktionen > Neues Repository-Secret

github-geheimnisse

2. BUILD_CERTIFICATE_BASE64 - Base64-codiertes Zertifikat.

3. BUILD_PROVISION_PROFILE_BASE64 - Base64-codiertes Provisionierungsprofil.

4. BUNDLE_IDENTIFIER - Ihre App-Bundle-Identifikator.

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-File

Erstellen Sie ein GitHub-Workflow-Verzeichnis.

cd .github/workflows

Im workflow Ordner erstellen Sie ein 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 Build und Release 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-App erstellen.

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

Ihre App benötigt nicht zwingend Ionic, nur die __CAPGO_KEEP_0__-Basis ist erforderlich.

Your App doesn’t need to use Ionic, only Capacitor base is mandatory., it can have old Cordova module, but Capacitor JS plugin should be preferred.

8. Auslösen Sie das Workflow

Ein Commit erstellen

Ein Commit. Sie sollten das aktive Workflow im Repository sehen.

Auslösen Sie das Workflow

Die neuen Commits auf die Zweig pushen main oder development um das 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 meinem lokalen Computer bereitstellen?

Ja, das kannst du, und es ist einfach.

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

CI/CD-Einrichtungsleitfäden

Alternative CI/CD-Plattformen

Live-Updates und Bereitstellung

Danke

This blog is based on the following articles:

Fortsetzen Sie mit der automatischen Capacitor IOS-Build mit GitHub Aktionen mit Zertifikat

Wenn Sie "__CAPGO_KEEP_0__ CI/CD" verwenden Automatische Capacitor IOS-Build mit GitHub Aktionen mit Zertifikat um die CI/CD-Automatisierung zu planen, verbinden Sie es mit Capgo CI/CD zur 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-Apps

Wenn ein Web-Schicht-Bug live ist, liefern Sie die Reparatur über Capgo anstatt Tage zu warten, bis die App-Store-Zulassung vorliegt. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Prozess bleiben.

Los geht's

Neuestes aus unserem Blog

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