Zum Hauptinhalt springen
CI/CD

Automatische Capacitor-Build für IOS mit GitHub-Aktionen mithilfe von match

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

Artikelcredits

Martin Donadieu

Schreiber

Valeria

Rezensent

Jordan

Redakteur

Automatische Capacitor-Build für IOS mit GitHub-Aktionen mithilfe von match

Automatische iOS-Builds mit GitHub Actions mithilfe von Match

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 für native Capacitor-Builds. Dieser Fastlane Match-Leitfaden wird für Teams erhalten bleiben, die bestehende GitHub-Actions-Pipelines weiterhin unterhalten, aber neue iOS-Builds sollten die Capgo CLI verwenden, damit Sie keine Fastlane, Match-Repository, Xcode-Runner, Zertifikate und Upload-Skripte selbst pflegen müssen.

Capgo Build für CI/CD durch Capgo

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

  • Arbeitet mit Ihrer Pipeline: Auslösen 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, Berechtigungsprofile, Passwörter und Team-IDs in Ihren eigenen CI-Secrets.
  • : __CAPGO_KEEP_0__ Build stellt gepflegte Apple-Build-Umgebungen bereit, sodass Sie macOS-Runner, Xcode-Bilder, Fastlane oder Match-Repositories nicht mehr verwalten müssen.: Capgo Build provides maintained Apple build environments, so you do not have to manage macOS runners, Xcode images, Fastlane, or Match repositories.
  • : Laden Sie signierte Artikel für QA oder einreichen Sie Release-Builds über den __CAPGO_KEEP_0__ __CAPGO_KEEP_1__.: Download signed artifacts for QA or submit release builds through the Capgo CLI.

: __CAPGO_KEEP_0__-Pläne beginnen bei 12 $/Monat.

  • Capgo plans start at $12/month
  • : Zusätzliche Build-Minuten werden durch Minuten über Kredite abgerechnet
  • : __CAPGO_KEEP_0__ Build in CI/CD einrichten

: Capgo-Pläne beginnen bei 12 $/Monat

Handanleitung

Hier sind die Schritte:

Continuous Delivery für iOS mit Fastlane und GitHub Aktionen mit match

Voraussetzungen

Bevor Sie mit dem Tutorial fortfahren…

  • Stellen Sie sicher, dass Sie Fastlane installiert haben auf Ihrem Entwicklungsrechner.
  • Mitgliedschaft im iOS-Entwicklerprogramm.
  • Wunsch, etwas zu lesen 😆…
  • Ein Team aus vielen Entwicklern, andernfalls empfehlen wir die Verwendung fastlane cert für einfache Workflows.

Wichtige Informationen zum Preis

Preis GitHub Action

https://github.com/features/actions

Die Dienstleistung ist ‘kostenlos’ bis zur Grenze, abhängig von der gewählten 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, wenn Sie möchten, können wir weitermachen…

📣 In dem Beitrag nehmen wir an, dass wir die App in iTunes Connect erstellt haben, wir haben die Zertifikate des Apple-Ökosystems, alles wird von Fastlane kopiert!

Lassen Sie uns loslegen!

Schritte, die im Beitrag zu beachten sind

  1. Mit App Store Connect API und Fastlane Match verwenden
  2. Anforderungen
  3. Erstellung eines App Store Connect API-Schlüssels
  4. Verwendung eines App Store Connect API-Schlüssels
  5. Fastlane-Dateien kopieren
  6. Fastlane match konfigurieren

1. Mit App Store Connect API und Fastlane Match verwenden

Ab Februar 2021 ist für alle Benutzer eine zweifaktorale 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

Um mit match zu beginnen, müssen Sie Ihre bestehenden Zertifikate widerrufen. Keine Sorge, Sie erhalten den neuen direkt.

Anforderungen

Um App Store Connect API nutzen zu können, benötigt Fastlane drei Dinge. drei Dinge.

  1. Zertifizierungs-ID.
  2. Sicherheits-ID.
  3. Sicherheitsdatei oder Sicherheitsinhalt.

Erstellung einer App Store Connect API-Sicherheit

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 zukommen lassen und die folgenden Anweisungen befolgen.

1 — Anmeldung bei App Store Connect.

2 — Auswahl von Benutzern und Zugriff.

App Store Connect Zugriffsberechtigung

3 — Wählen Sie die Integrationsoption.

App Store Connect API-Integration

4 — Klicken Sie auf Erstellen API-Schlüssel oder auf die Schaltfläche (+).

App Store Connect API-Schlüssel erstellen

5 — Geben Sie einem Schlüssel einen Namen. 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 Rollenberechtigungen. Wir empfehlen die Auswahl von App-Manager.

7 — Klicken Sie auf Erstellen.

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

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

App Store Connect-Download-Schlüssel

Sie können alle drei notwendigen Informationen hier finden.
<1> Issue-ID.
<2> Schlüssel-ID.
<3> Klicken Sie auf "Download API-Schlüssel" zum Herunterladen Ihres API privaten Schlüssels. Der Downloadlink erscheint nur, wenn der private Schlüssel noch nicht heruntergeladen wurde. Apple hält keinen Kopie des privaten Schlüssels. Sie können ihn daher 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-Schlüssels API

Der API-Schlü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, indem Sie die neue Aktion von Fastlane verwenden. app_store_connect_api_key. Sie können weitere Möglichkeiten in der Fastlane-DokumentationDa ich denke, dass dies der einfachste Weg ist, mit den meisten CI-Tools zu arbeiten, bei denen Sie Umgebungsvariablen einstellen können.

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

2. Kopieren Sie die Fastlane-Dateien

Fastlane ist eine Ruby-Bibliothek, die zum Automatisieren von häufigen Aufgaben der mobilen Entwicklung 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 eine Menge tun, aber für die Zwecke dieses Tutorials werden wir nur eine Handvoll grundlegender Aktionen verwenden.

Erstellen Sie einen Fastlane-Ordner am Wurzelverzeichnis Ihres Projekts und kopieren Sie die folgenden Dateien: Fastfile

default_platform(:ios)

DEVELOPER_APP_IDENTIFIER = ENV["DEVELOPER_APP_IDENTIFIER"]
DEVELOPER_APP_ID = ENV["DEVELOPER_APP_ID"]
PROVISIONING_PROFILE_SPECIFIER = ENV["PROVISIONING_PROFILE_SPECIFIER"]
TEMP_KEYCHAIN_USER = ENV["TEMP_KEYCHAIN_USER"]
TEMP_KEYCHAIN_PASSWORD = ENV["TEMP_KEYCHAIN_PASSWORD"]
APPLE_ISSUER_ID = ENV["APPLE_ISSUER_ID"]
APPLE_KEY_ID = ENV["APPLE_KEY_ID"]
APPLE_KEY_CONTENT = ENV["APPLE_KEY_CONTENT"]
GIT_USERNAME = ENV["GIT_USERNAME"]
GIT_TOKEN = ENV["GIT_TOKEN"]

def delete_temp_keychain(name)
  delete_keychain(
    name: name
  ) if File.exist? File.expand_path("~/Library/Keychains/#{name}-db")
end

def create_temp_keychain(name, password)
  create_keychain(
    name: name,
    password: password,
    unlock: false,
    timeout: 0
  )
end

def ensure_temp_keychain(name, password)
  delete_temp_keychain(name)
  create_temp_keychain(name, password)
end

platform :ios do
  lane :build do
    build_app(
      configuration: "Release",
      workspace: "./ios/App/App.xcworkspace",
      scheme: "App",
      export_method: "app-store",
      export_options: {
        provisioningProfiles: { 
            DEVELOPER_APP_ID => "#{PROVISIONING_PROFILE_SPECIFIER}"
        }
      }
    )
  end
  lane :refresh_profiles do
    match(
      type: "development",
      force: true)
    match(
      type: "adhoc",
      force: true)
  end
  desc "Register new device"
  lane :register_new_device do  |options|
      device_name = prompt(text: "Enter the device name: ")
      device_udid = prompt(text: "Enter the device UDID: ")
      device_hash = {}
      device_hash[device_name] = device_udid
      register_devices(
                       devices: device_hash
                       )
    refresh_profiles
  end
  lane :closed_beta do
    keychain_name = TEMP_KEYCHAIN_USER
    keychain_password = TEMP_KEYCHAIN_PASSWORD
    ensure_temp_keychain(keychain_name, keychain_password)

    api_key = app_store_connect_api_key(
      key_id: APPLE_KEY_ID,
      issuer_id: APPLE_ISSUER_ID,
      key_content: APPLE_KEY_CONTENT,            
      duration: 1200,            
      in_house: false
    )

    match(
      type: 'appstore',
      git_basic_authorization: Base64.strict_encode64("#{GIT_USERNAME}:#{GIT_TOKEN}"),
      readonly: true,
      keychain_name: keychain_name,
      keychain_password: keychain_password,
      api_key: api_key
    )

    gym(
      configuration: "Release",
      workspace: "./ios/App/App.xcworkspace",
      scheme: "App",
      export_method: "app-store",
      export_options: {
        provisioningProfiles: { 
            DEVELOPER_APP_ID => "#{PROVISIONING_PROFILE_SPECIFIER}"
        }
      }
    )

    pilot(
      apple_id: "#{DEVELOPER_APP_ID}",
      app_identifier: "#{DEVELOPER_APP_IDENTIFIER}",
      skip_waiting_for_build_processing: true,
      skip_submission: true,
      distribute_external: false,
      notify_external_testers: false,
      ipa: "./App.ipa"
    )

    delete_temp_keychain(keychain_name)
  end
  lane :submit_review do
    version = ''
    Dir.chdir("..") do
      file = File.read("package.json")
      data = JSON.parse(file)
      version = data["version"]
    end
    deliver(
      app_version: version,
      submit_for_review: true,
      automatic_release: true,
      force: true, # Skip HTMl report verification
      skip_metadata: false,
      skip_screenshots: false,
      skip_binary_upload: true
    )
  end
end

Appfile

app_identifier(ENV["DEVELOPER_APP_IDENTIFIER"])
apple_id(ENV["FASTLANE_APPLE_ID"])
itc_team_id(ENV["APP_STORE_CONNECT_TEAM_ID"])
team_id(ENV["DEVELOPER_PORTAL_TEAM_ID"])

Konfigurieren Sie Fastlane match

Fastlane match ist ein neuer Ansatz für die code-Signierung von iOS. Fastlane match macht es einfach für Teams, die erforderlichen Zertifikate und Provisioning-Profile für Ihre iOS-Apps zu verwalten.

Erstellen Sie einen neuen privaten Repository namens certificates, zum Beispiel auf Ihrem GitHub persönlichen Konto oder Organisation.

Initialisiere Fastlane match für deine iOS-App.

fastlane match init

Wähle dann Option #1 (Git-Speicher).

[01:00:00]: fastlane match supports multiple storage modes, please select the one you want to use:1. git2. google_cloud3. s3?

Zuweisen Sie die URL des neu erstellten Repositories.

[01:00:00]: Please create a new, private git repository to store the certificates and profiles there[01:00:00]: URL of the Git Repo: <YOUR_CERTIFICATES_REPO_URL>

Jetzt haben Sie im Fastlane-Ordner ein Datei namens Matchfile und _git_url_Der Wert sollte auf die HTTPS-URL des Zertifikats-Repositories gesetzt werden. Optional können Sie auch SSH verwenden, aber dafür ist ein anderer Schritt erforderlich.

# ios/Matchfilegit_url("https://github.com/gitusername/certificates")storage_mode("git")type("appstore")

Als Nächstes gehen wir zur Erstellung der Zertifikate und geben Ihre Anmeldeinformationen ein, wenn Sie dazu aufgefordert werden, mit Fastlane Match.

Sie werden aufgefordert, einen Passwort zu erstellen. Denken Sie daran, es richtig zu speichern, da es später von GitHub-Aktionen zum Entschlüsseln Ihres Zertifikats-Repositories verwendet wird.

fastlane match appstore

Wenn alles gut ging, sollten Sie etwas Ähnliches sehen:

[01:40:52]: All required keys, certificates and provisioning profiles are installed 🙌

Wenn Sie bei GitHub und den erforderlichen Berechtigungen Probleme hatten, vielleicht hilft Ihnen dieser Beitrag wird Ihnen helfen, Authentifizierungstoken für Git zu generieren.

Generierte Zertifikate und Provisioning-Profiles werden in den Zertifikats-Repository-Ressourcen hochgeladen.

App Store Connect-Zertifikate

Zum Schluss öffnen Sie Ihr project in Xcode, und aktualisieren Sie das Provisioning-Profil für die Release-Konfiguration Ihrer App.

XCode-Zertifikate

Einige Dinge, die beachtet werden sollten 💡

MATCH

Damit die CI/CD die Zertifikate und Provisioning-Profiles importieren kann, muss sie Zugriff auf das Zertifikats-Repository haben. Sie können dies tun, indem Sie einen persönlichen Zugriffstoken (der vorher verwendet werden sollte) generieren, der die Berechtigung hat, private Repositories zu lesen oder zu bearbeiten.

In GitHub, gehen Sie zu EinstellungenEntwickler-EinstellungenPersönliche Zugriffstoken → klicken Generate New Token → das Häkchen setzen repo Umfang → klicken Sie dann Generate token.

Persönliches Zugriffstoken erstellen

Haben Sie eine Kopie des generierten persönlichen Zugriffstokens. Sie werden es später für die Umgebungsvariable verwenden GIT_TOKEN.

Ersetzen Sie dann Ihren Match-Datei, die in der Fastlane-Folder generiert wurde, durch Matchfile

CERTIFICATE_STORE_URL = ENV["CERTIFICATE_STORE_URL"]
GIT_USERNAME = ENV["GIT_USERNAME"]
GIT_TOKEN = ENV["GIT_TOKEN"]
FASTLANE_APPLE_ID = ENV["FASTLANE_APPLE_ID"]

git_url(CERTIFICATE_STORE_URL)
storage_mode("git")
type("appstore")
git_basic_authorization(Base64.strict_encode64("#{GIT_USERNAME}:#{GIT_TOKEN}"))
username(FASTLANE_APPLE_ID)

Dies wird von GitHub Actions verwendet, um die Zertifikate und Provisioning-Profile zu importieren. Und var wird in GitHub Secrets gesetzt, anstatt sie in der Datei hart zu codieren

Build-Prozess

In GitHub Actions Sie werden nach den Minuten abgerechnet, die Sie für die Ausführung Ihres CI/CD-Workflows verwendet haben Es dauert etwa 10–15 Minuten, bevor ein Build in App Store Connect bearbeitet 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 oder Abhängigkeiten Ihres Projekts.

Wenn Sie die gleichen Bedenken bezüglich der Preise haben wie ich für private Projekte, können Sie den skip_waiting_for_build_processing zu true.

Was ist der Haken? Sie müssen die Einwilligung Ihres Apps in App Store Connect manuell aktualisieren, nachdem der Build verarbeitet wurde, damit Sie den Build an Ihre Benutzer verteilen können.

Dies ist nur ein optionaler Parameter, um die Build-Minuten für private Projekte zu sparen. Für kostenlose Projekte sollte dies kein Problem sein. Siehe Preise.

3. Einrichten von GitHub Aktionen

Konfigurieren Sie GitHub Geheimnisse

Kennen Sie sich nicht aus, wo die Werte der ENV herkommen? Nun, es ist kein Geheimnis mehr – es kommt aus Ihrem Projekts Geheimnis. 🤦

Sete GitHub-Geheimnisse

1. APP_STORE_CONNECT_TEAM_ID - die ID deines App Store Connect-Teams, wenn du in mehreren Teams bist.

2. DEVELOPER_APP_ID - Gehe in App Store Connect zum App-Menü App-Informationen → Scrollen Sie nach unten zur General Information Abschnitt deiner App und suchen Sie nach Apple ID.

3. DEVELOPER_APP_IDENTIFIER - der Bundle-Identifikator deiner App.

4. DEVELOPER_PORTAL_TEAM_ID - die ID deines Developer Portal-Teams, wenn du in mehreren Teams bist.

5. FASTLANE_APPLE_ID - die Apple-ID oder den Entwickler-E-Mail-Account, den du zum Verwalten der App verwendest.

6. GIT_USERNAME &amp; GIT_TOKEN - Deinen Git-Nutzernamen und deinen persönlichen Zugriffstoken.

7. MATCH_PASSWORD - den Passphrase, den du bei der Initialisierung von match zugewiesen hast, wird zum Entschlüsseln der Zertifikate und Provisioning-Profile verwendet.

8. PROVISIONING_PROFILE_SPECIFIER - match AppStore <YOUR_APP_BUNDLE_IDENTIFIER>, z.B. match AppStore com.domain.blabla.demo.

9. TEMP_KEYCHAIN_USER &amp; TEMP_KEYCHAIN_PASSWORD - einem temporären Schlüsselkartenbenutzer und -passwort für Ihren Workflow zuweisen.

10. APPLE_KEY_ID — App Store Connect API Schlüssel 🔺Schlüssel-ID.

11. APPLE_ISSUER_ID — App Store Connect API Schlüssel 🔺Aussteller-ID.

12. APPLE_KEY_CONTENT — App Store Connect API Schlüssel 🔺 Schlüsseldatei oder Schlüsselinhalt von .p8, context

13. CERTIFICATE_STORE_URL überprüfen Sie es https://github.com/***/fastlane_match.git)

https://GitHub.com/***/fastlane_match.git

4. Konfigurieren Sie das GitHub-Workflow-File

cd .github/workflows

Innerhalb des 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: 2.7.2
      - uses: maierj/fastlane-action@v2.3.0
        env:
          DEVELOPER_APP_IDENTIFIER: ${{ secrets.DEVELOPER_APP_IDENTIFIER }}
          DEVELOPER_APP_ID: ${{ secrets.DEVELOPER_APP_ID }}
          PROVISIONING_PROFILE_SPECIFIER: match AppStore ${{ secrets.DEVELOPER_APP_IDENTIFIER }}
          TEMP_KEYCHAIN_USER: ${{ secrets.TEMP_KEYCHAIN_USER }}
          TEMP_KEYCHAIN_PASSWORD: ${{ secrets.TEMP_KEYCHAIN_PASSWORD }}
          APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }}
          APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }}
          APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }}
          CERTIFICATE_STORE_URL: https://github.com/${{ secrets.CERTIFICATE_STORE_REPO }}.git
          GIT_USERNAME: ${{ secrets.GIT_USERNAME }}
          GIT_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
          FASTLANE_APPLE_ID: ${{ secrets.FASTLANE_APPLE_ID }}
          MATCH_USERNAME: ${{ secrets.FASTLANE_APPLE_ID }}
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
          APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }}
          DEVELOPER_PORTAL_TEAM_ID: ${{ secrets.DEVELOPER_PORTAL_TEAM_ID }}
        with:
          lane: closed_beta
      - name: Upload release bundle
        uses: actions/upload-artifact@v2
        with:
          name: ios-release
          path: ./App.ipa
          retention-days: 60

Dieses Workflow sollte nach jedem GitHub Tagausgelöst werden, wenn Sie die Automatisierung von Tags benötigen, beziehen Sie sich bitte auf Automatische Build und Release mit GitHub Actions zuerst.

Dann wird dieses Workflow Ihre NodeJS-Abhängigkeiten ziehen, sie installieren und Ihre JavaScript-Anwendung bauen.

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

Ihre App benötigt nicht zwingend Ionic, nur die Capacitor-Basis ist erforderlich. Sie kann alte Cordova-Module haben, aber die Capacitor-JS-Plugin wird bevorzugt.

5. Workflow auslösen

Erstelle einen Commit

Mache einen commitSie sollten das aktive Workflow in der Repository sehen.

Auslösen Sie das Workflow

Pushen Sie die neuen Commits in die Zweig main oder development Um den Workflow auszulösen

Pushen Sie die neuen Commits in die Zweig

oder

HTML text fragment from a longer Capgo UI string (parent key `alternatives_cta_questions`). Page/area: Capacitor live-update alternatives comparison page. Role: Long marketing or legal paragraph. Seen in: page alternatives.astro. Preserve Capgo product/brand and developer terms exactly. Message key `alternatives_cta_questions` (Alternatives CTA Questions). | HTML text fragment from a longer Capgo UI string (parent key `appflow_cta_questions`). Page/area: Appflow comparison / migration marketing copy. Role: Long marketing or legal paragraph. Seen in: page ionic-appflow.astro. Preserve Capgo product/brand and developer terms exactly. Message key `appflow_cta_questions` (Appflow CTA Questions). | HTML text fragment from a longer Capgo UI string (parent key `capwesome_cta_questions`). Page/area: Capawesome comparison page. Role: Long marketing or legal paragraph. Seen in: page capwesome.astro. Preserve Capgo product/brand and developer terms exactly. Message key `capwesome_cta_questions` (Capwesome CTA Questions). | HTML text fragment from a longer Capgo UI string (parent key `consulting_faq_subtitle`). Page/area: Consulting services page. Role: Section subtitle or tagline. Seen in: page consulting.astro. Preserve Capgo product/brand and developer terms exactly. Message key `consulting_faq_subtitle` (Consulting FAQ Subtitle). | Page/area: Appflow comparison / migration marketing copy. Role: Short UI label or navigation item. Seen in: page ionic-appflow.astro, page ionic-enterprise-plugins.astro, page solutions/ionic-enterprise-plugins.astro. Message key `appflow_plugins_or` (Appflow Plugins Or).

Um den Workflow auszulösen, pushen Sie die neuen Commits in die Zweig oder

Ja, das geht, und das ist einfach.

Stellen Sie sich vor, Sie haben ein privates Repository, und Sie haben die Minuten des kostenlosen Plans aufgebraucht und möchten keine neuen Releases bezahlen, oder vielleicht bevorzugen Sie, die Anwendung manuell zu übermitteln.

Los geht's!

Ok, erst müssen wir in meinem Projektverzeichnis/fastlane den Pfad erstellen einen Dateinamen namens .env, genau in demselben Pfad wie Fastfile, um dieselben geheimen Eigenschaften wie in unserem _GitHub, wie unten beschrieben, erstellen zu können.

.env-Datei für die Bereitstellung von der lokalen Maschine

Jetzt können Sie zum Terminal und starten Sie das Fastlane von Ihrer Maschine:

fastlane closed_beta

❌ Wichtige Informationen über die .env-Datei da wir diese Daten lieber nicht offenlegen, müssen wir sie in unserer .gitignore-Dateihinzufügen, etwas in dieser Art und Weise: ❌

fastlane/*.env

Es sollte funktionieren, genau wie es auf der Remote-Maschine mit den GitHub-Actions geschieht, aber auf unserer lokalen Maschine. 🍻

lokale Fastlane-Ausführung

Befehlszeile-Ausführung: $ Fastlane closed_beta

Wenn Sie bis hier gekommen sind, gratuliere ich Ihnen, jetzt haben Sie eine vollautomatisierte Prozess für Ihre iOS-Anwendungen mit Fastlane und GitHub-Actions.

Jedes Mal, wenn Sie einen neuen Commit senden, wird in der Google Play-Konsole eine Release im Beta-Kanal erstellt. Ich werde diese Blog-Einträge verbessern, wenn Sie Feedbacks haben, wenn Sie Fragen oder Vorschläge haben, zögern Sie bitte nicht, mich per E-Mail zu kontaktieren martin@capgo.app

Auf Ihrem Gerät bauen

Wenn Sie noch immer auf Ihrem Gerät bauen müssen, müssen Sie sie manuell zur Berechtigung hinzufügen. Verbinden Sie Ihr Gerät mit Ihrem Mac und öffnen Sie das Gerätemenü Gerätemenü iOS Dann kopieren Sie Ihren Identifikator Identifikator iOS Und dann starten Sie den Befehl: fastlane register_new_device Es wird Sie um einen Gerätenamen und den Identifikator bitten: iOS-Identifikator setzen

Wenn Sie Probleme haben

Wenn Sie ein Problem mit einem Entwicklungsgerät haben, das nicht getestet werden kann, usw., löst es sich normalerweise durch die Anwendung dieser Lösung.

Es gibt eine magische Befehlszeile, die Ihnen helfen kann:

fastlane match nuke development
fastlane match development

Dann: Löschen Sie das Projekt, indem Sie die Taste Shift (⇧) und die Taste Command (⌘) gleichzeitig drücken oder indem Sie "Produkt > Löschen" auswählen (es könnte als "Löschen des Build-Ordners" beschriftet sein)

Versuchen Sie es dann noch einmal, die App auf Ihrem Gerät zu starten.

Vielen Dank

Dieser Blog basiert auf den folgenden Artikeln:

Fahren Sie mit der automatischen Capacitor-iOS-Build mit GitHub-Aktionen mit Hilfe von match fort

If Sie __CAPGO_KEEP_0__ verwenden Automatischer GitHub IOS-Build mit Capacitor-Aktionen mithilfe von match um die CI/CD-Automatisierung zu planen, verbinden Sie es mit Capgo CI/CD Capgo CI/CD für den Produktworkflow in Capgo CI/CD Capgo Native Builds Capgo Native Builds für den Produktworkflow in Capgo Native Builds Capgo Integrations Capgo Integrations für den Produktworkflow in Capgo Integrations CI/CD-Integration __CAPGO_KEEP_0__ Aktionen-Integration GitHub Aktionen-Integration für die Implementierungsdetails in CI/CD-Integration Für die Implementierungsdetails in GitHub Actions-Integration.

Live-Updates für Capacitor-Apps

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

Menschliche Unterstützung von Martin

Los geht's jetzt

Neueste aus unserem Blog

Capgo gibt Ihnen die besten Einblicke, die Sie benötigen, um ein wirklich professionelles Mobiltelefon-App zu erstellen.