Passer au contenu principal
CI/CD

Construction automatique de l'Capacitor build IOS avec des GitHub actions en utilisant match

Comment configurer une chaîne d'outils CI/CD pour votre application IOS Ionic en utilisant fastlane et GitHub Actions en 5 minutes (2022)

Martin Donadieu

Martin Donadieu

Spécialiste du contenu

Construction automatique de Capacitor IOS avec des GitHub actions en utilisant match

Constructions iOS automatiques avec des GitHub actions en utilisant Match

La mise en place de CI/CD pour les applications Capacitor peut être complexe et chronophage. Voici ce dont vous avez besoin de savoir :

Nous recommandons maintenant l'utilisation de La construction Capgo avec le Capgo CLI pour les constructions natives Capacitor. Cette guide Fastlane Match est conservée pour les équipes qui maintiennent des pipelines d'actions existantes GitHub, mais les nouvelles constructions iOS devraient utiliser le Capgo CLI afin que vous ne deviez pas maintenir les dépôts Fastlane, Match, les exécutants Xcode, les certificats et les scripts d'envoi vous-même.

La construction Capgo pour CI/CD par Capgo

Évitez la maintenance de Fastlane Match, Xcode runner, certificat, profil de provisionnement et script d'envoi. Capgo Build exécute des builds natifs signés iOS à partir de votre pipeline CI/CD existant :

  • Fonctionne avec votre pipeline: Déclenchez Capgo Build à partir d'Actions GitHub, GitLab CI, Jenkins ou de scripts locaux après votre build web et npx cap sync.
  • Signature à partir de secrets CI: Conservez les clés App Store Connect, certificats, profils de provisionnement, mots de passe et identifiants d'équipe dans vos propres secrets CI.
  • Aucune maintenance de l'exécutable natif: Capgo Build fournit des environnements de build Apple maintenus, vous n'avez donc pas à gérer les exécutables macOS, les images Xcode, Fastlane ou les référentiels Match.
  • Artéfacts et soumission: Téléchargez les artefacts signés pour les tests de qualité ou soumettez les builds de version à travers le Capgo CLI.

Tarification

  • Les plans Capgo commencent à 12$/mois
  • Inclut les mises à jour OTA et environ 15 compilations natives par mois
  • Les minutes de compilation supplémentaires sont facturées par minute à l'aide de crédits

Configurer Capgo Build dans CI/CD

Guide de configuration manuelle

Voici ce que vous devez faire :

Déploiement continu pour iOS à l'aide de Fastlane et GitHub Actions à l'aide de match

Prérequis

Avant de continuer avec le tutoriel…

  • Assurez-vous d'avoir Fastlane installé sur votre machine de développement.
  • Membre du programme iOS développeur.
  • Souhaite de lire 😆…
  • Une équipe de nombreux devs, sinon nous recommandons d'utiliser fastlane cert pour des workflows plus simples.

Importants informations sur le prix

Prix GitHub Action

https://github.com/features/actions

Le service est ‘gratuit’ jusqu'à la limite, en fonction de la machine choisie.
Nous allons utiliser un ordinateur macOS, vous pouvez voir dans l'écran d'aperçu son prix et ses limites (tarifs valables à la création de ce tutoriel, ils pourraient subir des changements à l'avenir) Nous utilisons un

🔴 Une fois averti des exigences et des tarifs, si vous le souhaitez, nous continuons…

📣 Dans l'article, on suppose que nous avons l'application créée dans iTunes connect, nous avons les certificats de l'écosystème Apple, tout sera copié par Fastlane !

Plongons-y !

Étapes à suivre dans l'article

  1. Utilisation de App Store Connect API avec Fastlane Match
  2. Exigences
  3. Création d'une clé App Store Connect API
  4. Utilisation d'une clé App Store Connect API
  5. Copie des fichiers Fastlane
  6. Configuration de Fastlane match

1. Utilisation de App Store Connect API avec Fastlane Match

À partir de février 2021, l'authentification à deux facteurs ou la vérification à deux étapes est obligatoire pour tous les utilisateurs pour se connecter à App Store Connect. Cette couche supplémentaire de sécurité pour votre identifiant Apple vous aide à vous assurer que vous êtes la seule personne qui peut accéder à votre compte.
De Apple Support

Pour commencer avec match, vous devez révoquer vos certificats existants. Mais n'ayez crainte, vous obtiendrez le nouveau directement.

Exigences

Pour utiliser App Store Connect API, Fastlane nécessite trois choses.

  1. ID. émetteur.
  2. ID. de clé.
  3. Fichier de clé ou contenu de clé.

Création d'une clé App Store Connect API

Pour générer des clés, vous devez avoir les droits d'administrateur dans App Store Connect. Si vous n'avez pas ces droits, vous pouvez diriger la personne concernée à cet article et suivre les instructions suivantes.

1 — Se connecter à App Store Connect.

2 — Sélectionner Utilisateurs et accès.

Accès à l'utilisateur App Store Connect

3 — Sélectionner l'onglet Intégration.

App Store Connect API Intégration

4 — Cliquez sur Générer la clé API ou le bouton Ajouter (+).

App Store Connect API clés créent

5 — Entrer un nom pour la clé. Le nom est uniquement pour votre référence et n'est pas partie de la clé elle-même.

App Store Connect API clés créent un nom

6 — Sous Accès, sélectionnez le rôle pour la clé. Les rôles qui s'appliquent aux clés sont les mêmes rôles qui s'appliquent aux utilisateurs de votre équipe. Voir rôles autorisations. Nous vous recommandons de sélectionner gestionnaire d'application.

7 — Cliquez sur Générer.

Un clé API n'a pas accès limité à des applications spécifiques.

Le nom de la nouvelle clé, l'ID de clé, un lien de téléchargement et d'autres informations apparaissent sur la page.

Téléchargement de clés App Store Connect

Vous pouvez récupérer les trois informations nécessaires ici.
<1> ID de l'incident.
<2> ID de clé.
<3> Cliquez sur « Télécharger la clé API » pour télécharger votre clé privée API. Le lien de téléchargement n'apparaît que si la clé privée n'a pas encore été téléchargée. Apple ne garde pas de copie de la clé privée. Vous pouvez donc la télécharger qu'une seule fois.

🔴 Stockez votre clé privée dans un endroit sûr. Vous ne devriez jamais partager vos clés, stocker les clés dans un code de dépôt, ou inclure les clés dans le code côté client code.

Utilisez une clé App Store Connect API

Le fichier de clé API (fichier p8 que vous téléchargez), l'ID de clé et l'ID émetteur sont nécessaires pour créer le jeton JWT d'autorisation. Il existe plusieurs façons de saisir ces informations dans Fastlane à l'aide de la nouvelle action de Fastlane, app_store_connect_api_key. Vous pouvez apprendre d'autres façons dans la documentation de Fastlane. Je montre cette méthode parce que je pense qu'il s'agit de la façon la plus facile de travailler avec la plupart des CI, où vous pouvez définir des variables d'environnement.

Maintenant, nous pouvons gérer Fastlane avec la clé App Store Connect API , c'est génial!

2. Copiez les fichiers Fastlane

Fastlane est une bibliothèque Ruby créée pour automatiser les tâches de développement mobile courantes. En utilisant Fastlane, vous pouvez configurer des « chemins » personnalisés qui rassemblent une série d'« actions » qui exécutent des tâches que vous effectueriez normalement à l'aide d'Android Studio. Vous pouvez faire beaucoup avec Fastlane, mais pour les besoins de ce tutoriel, nous utiliserons uniquement une poignée d'actions de base.

Créez un dossier Fastlane à la racine de votre projet et copiez les fichiers suivants: 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"])

Configurez Fastlane match

Fastlane match est une nouvelle approche de la signature iOS. Fastlane match facilite la gestion des certificats et des profils de provisionnement requis pour vos applications iOS. is a new approach to iOS’s code signing. Fastlane match makes it easy for teams to manage the required certificates and provisioning profiles for your iOS apps.

, par exemple sur votre compte ou organisation __CAPGO_KEEP_0__ personnel. certificates, for example on your GitHub personal account or organization.

Choisissez ensuite l'option #1 (Stockage Git).

fastlane match init

Affectez l'URL du dépôt créé.

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

Vous avez maintenant à l'intérieur du dossier Fastlane un fichier nommé

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

Matchfile et devrait être défini sur l'URL HTTPS du dépôt des certificats. Vous pouvez également utiliser SSH, mais cela nécessite une étape supplémentaire. _git_url_Ensuite, nous allons générer les certificats et vous devrez fournir vos informations de connexion lorsque vous y serez invité avec Fastlane Match.

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

match est une nouvelle approche de la signature iOS’s __CAPGO_KEEP_0__.

You serez invité à entrer un mot de passe. Rappelez-vous-le correctement car il sera utilisé plus tard par GitHub Actions pour déchiffrer votre référentiel de certificats.

fastlane match appstore

Si tout s'est bien passé, vous devriez voir quelque chose comme cela :

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

Si vous avez rencontré un problème avec GitHub et les permissions nécessaires, peut-être que ce post aidera à générer des jetons d'authentification pour Git.

Les certificats et les profils de provisionnement générés sont chargés dans les ressources du référentiel de certificats.

Certificats App Store Connect

Enfin, ouvrez votre project dans Xcode, et mettez à jour le profil de provisionnement pour la configuration de sortie de votre application.

Certificats XCode

Quelques choses à noter 💡

MATCH

For le CI/CD pour importer les certificats et les profils de provisionnement, il doit avoir accès au référentiel des certificats. Vous pouvez faire cela en générant un jeton d'accès personnel (qui doit être utilisé avant) qui a l'autorisation d'accéder ou de lire les référentiels privés.

In GitHub, allez à ParamètresParamètres du développeurJeton d'accès personnel → cliquez Generate New Token → cochez la repo scope → puis cliquez Generate token.

Créer un jeton d'accès personnel

Conservez une copie du jeton d'accès personnel généré. Vous l'utiliserez plus tard pour la variable d'environnement GIT_TOKEN.

Ensuite, remplacez votre fichier de correspondance généré dans le dossier Fastlane par 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)

Cela sera utilisé par les GitHub Actions pour importer les certificats et les profils de provisionnement. Et la variable sera définie dans les GitHub Secrets, au lieu de les coderdur dans le fichier.

Build Processing

Dans les GitHub Actions, vous êtes facturé en fonction des minutes que vous avez utilisées pour exécuter votre flux de CI/CD. D'expérience, il faut environ 10–15 minutes avant qu'un build puisse être traité dans App Store Connect.

Pour les projets privés, le coût estimé par build peut aller jusqu'à $0.08/min x 15 mins = $1.2, ou plus, en fonction de la configuration ou des dépendances de votre projet.

Si vous partagez les mêmes préoccupations pour le prix que moi pour les projets privés, vous pouvez garder le skip_waiting_for_build_processing à true.

Quel est le catch ? Vous devez mettre à jour manuellement la conformité de votre application dans App Store Connect après que le build a été traité, pour pouvoir distribuer le build à vos utilisateurs.

Ceci est juste un paramètre optionnel à mettre à jour si vous voulez économiser sur les minutes de build pour les projets privés. Pour les projets gratuits, cela ne devrait pas être un problème du tout. Voir tarification.

3. Configuration GitHub Actions

Configurer les secrets GitHub

Vous vous demandez peut-être où viennent les valeurs de ENV ? Eh bien, ce n'est plus un secret – il s'agit de votre secret de projet. 🤦

Définir les secrets GitHub

1. APP_STORE_CONNECT_TEAM_ID - l'ID de votre équipe d'App Store Connect si vous en avez plusieurs.

2. DEVELOPER_APP_ID - dans App Store Connect, allez à l'application → Informations de l'application → Faites défiler vers le bas jusqu'à la General Information section de votre application et cherchez Apple ID.

3. DEVELOPER_APP_IDENTIFIER - l'ID de l'identifiant de bundle de votre application.

4. DEVELOPER_PORTAL_TEAM_ID - l'ID de votre équipe du Portail des développeurs si vous en avez plusieurs.

5. FASTLANE_APPLE_ID - l'identifiant Apple ou l'adresse e-mail du développeur que vous utilisez pour gérer l'application.

6. GIT_USERNAME &amp; GIT_TOKEN - votre nom d'utilisateur Git et votre jeton d'accès personnel.

7. MATCH_PASSWORD - le mot de passe que vous avez assigné lors de l'initialisation de match, qui sera utilisé pour déchiffrer les certificats et les profils de provisionnement.

8. PROVISIONING_PROFILE_SPECIFIER - match AppStore <YOUR_APP_BUNDLE_IDENTIFIER>, par exemple. match AppStore com.domain.blabla.demo.

9. TEMP_KEYCHAIN_USER &amp; TEMP_KEYCHAIN_PASSWORD - attribuez un utilisateur et un mot de passe temporaire pour votre flux de travail.

10. APPLE_KEY_ID — App Store Connect API Clé 🔺ID de clé.

11. APPLE_ISSUER_ID — App Store Connect API Clé 🔺ID émetteur.

12. APPLE_KEY_CONTENT — App Store Connect API Clé 🔺Fichier de clé ou contenu de la clé de .p8, vérifiez-le

13. CERTIFICATE_STORE_URL — L'URL du repo de vos clés Match (ex: https://github.com/***/fastlane_match.git)

4. Configurez le fichier de workflow GitHub

Créez un répertoire de workflow GitHub.

cd .github/workflows

Dans le dossier, créez un fichier nommé workflow et ajoutez le contenu suivant. build-upload-ios.ymlCe workflow doit être déclenché après chaque tag __CAPGO_KEEP_0__

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

This workflow should be triggered after each GitHub Automatic build and release avec les actions __CAPGO_KEEP_0__en premier lieu. Automatic build and release avec les actions GitHub en premier lieu.

Ensuite, ce flux de travail récupérera vos dépendances NodeJS, les installera et construira votre application JavaScript.

Chaque fois que vous envoyez un nouveau commit, une mise à jour sera construite dans TestFlight.

Votre application n'a pas besoin d'utiliser Ionic, seule la base Capacitor est obligatoire. Elle peut avoir des anciens modules Cordova, mais le plugin JS Capacitor est préférable.

5. Déclencher le flux de travail

Créer un Commit

Faites un commit, vous devriez voir le flux de travail actif dans le dépôt.

Déclenchez le flux de travail

Envoi les nouveaux commits vers la branche main ou development pour déclencher le flux de travail.

Commencez avec un commit

Après quelques minutes, la mise à jour devrait être disponible dans votre tableau de bord App Store Connect.

Tableau de bord Testflight

Peut-on déployer depuis la machine locale ?

Oui, vous pouvez, et cela est sans effort.

Imaginez que vous avez un dépôt privé, et que vous avez utilisé toutes les minutes du plan gratuit et que vous ne voulez pas payer pour de nouvelles versions, ou peut-être préférez-vous soumettre l'application manuellement.

Allons-y pour cela

D'accord, nous devons d'abord créer dans chemin_d_exécution_de_mon_projet/fastlane un fichier appelé .env, juste dans le même chemin que Fastfile, pour créer le même secret les propriétés trouvées dans notre _GitHub, comme suit :

fichier .env pour le déploiement à partir de la machine locale

Maintenant, vous pouvez vous rendre sur le terminal et lancer le Fastlane à partir de votre machine :

fastlane closed_beta

❌ Essentiel sur le .env comme nous préférerions ne pas exposer ces données, nous devons les ajouter dans notre .gitignore, quelque chose comme cela : ❌

fastlane/*.env

Elle devrait fonctionner de la même manière que cela se produit à partir des GitHub Actions sur la machine distante, mais sur notre machine locale. 🍻

L'exécution locale Fastlane

Exécution du terminal : $ Fastlane closed_beta

Si vous avez réussi à venir jusqu'ici, mes félicitations, maintenant vous avez un processus entièrement automatisé pour vos applications iOS avec Fastlane et GitHub Actions.

Chaque fois que vous envoyez un nouveau commit, une mise à jour sera créée dans le console Google Play, canal bêta. Je vais améliorer ce blog avec vos retours, si vous avez une question ou une suggestion, veuillez me le faire savoir par email martin@capgo.app

Construire sur votre appareil

Si vous avez encore besoin de construire sur votre appareil, vous devez les ajouter manuellement à la provisionnement. Connectez votre appareil à votre Mac et ouvrez le menu appareil recherchez le menu ios appareil Ensuite, copiez votre identifiant identifier ios Et commencez ensuite par exécuter la commande : fastlane register_new_device Elle vous demandera de définir un nom de appareil et l'identifiant : identifier ios

Si vous rencontrez des problèmes

Si vous avez des problèmes avec le dispositif de développement qui ne peut pas tester, etc. Cela devrait généralement le résoudre.

Il existe une commande magique qui peut vous sauver :

fastlane match nuke development
fastlane match development

Ensuite : Nettoyez le projet en maintenant la touche Shift(⇧) + Command(⌘) + K ou en sélectionnant Produit > Nettoyer (il pourrait être étiqueté « Nettoyer le dossier de construction »)

Essayez ensuite de lancer à nouveau l'application sur votre appareil.

Merci

Cet article est basé sur les articles suivants :

Continuez à partir d'un déploiement automatique Capacitor IOS avec GitHub actions en utilisant match

Si vous utilisez Déploiement automatique Capacitor IOS avec GitHub actions en utilisant match pour planifier l'automatisation CI/CD, connectez-le avec Capgo CI/CD pour le flux de travail du produit dans Capgo CI/CD, Capgo Builds natifs pour le flux de travail du produit dans Capgo Builds natifs, Capgo Intégrations pour le flux de travail du produit dans Capgo Intégrations, Intégration CI/CD pour le détail d'implémentation dans Intégration CI/CD, et GitHub Actions Integration pour le détail d'implémentation dans GitHub Actions Integration.

Mises à jour en temps réel pour les applications Capacitor

Lorsqu'un bug de la couche web est en ligne, expédiez la correction par Capgo au lieu d'attendre des jours pour l'approbation de la boutique d'applications. Les utilisateurs reçoivent la mise à jour en arrière-plan tandis que les modifications natives restent dans le chemin de revue normal.

Commencez dès maintenant

Dernières actualités de notre Blog

Capgo vous donne les meilleures informations dont vous avez besoin pour créer une application mobile vraiment professionnelle.