メインコンテンツにジャンプ
CI/CD

マッチを使用した自動Capacitor IOS ビルドのGitHub

5分以内に、fastlaneとGitHub Actionsを使用してIOS IonicアプリのCI/CDパイプラインを設定する方法 (2022)

記事のクレジット

マーティン・ドナディュー

ページ/エリア: Enterprise製品/価格設定ページ。役割: UIラベル。見られる場所: page enterprise.astro。メッセージキー `enterprise_partnership_capgo_martin_name` (Enterprise Partnership Capgo Martin Name)。

ライター

バレリア

ページ/エリア: Enterprise製品/価格設定ページ。役割: UIラベル。見られる場所: page enterprise.astro。メッセージキー `enterprise_partnership_capgo_valeria_name` (Enterprise Partnership Capgo Valeria Name)。

レビュアー

Automatic Capacitor IOS build with GitHub actions using match

Automatic iOS Builds with GitHub Actions using Match

Setting up CI/CD for Capacitor apps can be complex and time-consuming. Here’s what you need to know:

今後は Capgo Build with the Capgo CLI Capacitor ビルド Fastlane Matchのガイドは、既存のGitHub Actionsパイプラインを維持しているチーム向けに残されていますが、新しいiOSビルドの場合はCapgo CLIを使用することをお勧めします。これにより、Fastlane、Matchリポジトリ、Xcodeランナー、証明書、アップロードスクリプトの維持を自分で行う必要がなくなります。

Capgo Build for CI/CD by Capgo

CI/CDパイプラインで__CAPGO_KEEP_1__ Capgo Build __CAPGO_KEEP_0__ ビルド

  • __CAPGO_KEEP_0__ ビルドは、既存のCI/CDパイプラインから署名されたネイティブiOSビルドを実行します:「: Capgo をトリガーして GitHub Actions、GitLab CI、Jenkins、またはローカルスクリプトから Capgo ビルドを実行します。 npx cap sync.
  • : CI シークレットから署名します。: __CAPGO_KEEP_0__ ビルドは、MacOS ランナー、Xcode イメージ、Fastlane、または Match リポジトリの管理を必要とせず、維持されたApple ビルド環境を提供します。
  • : __CAPGO_KEEP_0__ ビルドから署名されたアーティファクトをダウンロードしてQAに使用するか、__CAPGO_KEEP_0__ __CAPGO_KEEP_1__ を通じてリリースビルドを提出します。: Capgo Build provides maintained Apple build environments, so you do not have to manage macOS runners, Xcode images, Fastlane, or Match repositories.
  • : Capgo のプランは $12/月から始まります。: Download signed artifacts for QA or submit release builds through the Capgo CLI.

: 余分なビルド分数は、クレジットを通じて 1 分あたり請求されます。

  • : Capgo ビルドを CI/CD にセットアップします。
  • : __CAPGO_KEEP_0__ のプランは $12/月から始まります。
  • : __CAPGO_KEEP_0__ ビルドは、MacOS ランナー、Xcode イメージ、Fastlane、または Match リポジトリの管理を必要とせず、維持されたApple ビルド環境を提供します。

: Capgo ビルドから署名されたアーティファクトをダウンロードしてQAに使用するか、Capgo __CAPGO_KEEP_1__ を通じてリリースビルドを提出します。

手動セットアップガイド

ここでは、以下の手順を実行する必要があります。

Fastlaneとmatchを使用したiOSの継続的デリバリー、GitHubアクション

前提条件

このチュートリアルに進む前に…

価格について重要な注意事項。

価格 GitHub アクション

https://github.com/features/actions

サービスは、選択したマシンに応じて、制限まで無料です。
Capacitor iOS ビルドの自動化に使用する GitHub アクションの設定を説明します。 macOS マシンの価格と制限 (価格はこのチュートリアルの作成時点のものであり、将来の変更に応じて異なる場合があります) を確認できます。

🔴 要件と価格について注意した後、続ける場合はどうですか?

📣 この投稿では、iTunes Connect でアプリを作成し、Apple エコシステムの証明書を所有していることを前提としています。Fastlane によってすべてがコピーされることを想定しています。

始めましょう!

この投稿で説明する手順を参照してください。

  1. App Store Connectを使用してAPIをFastlane Matchで使用する
  2. 必要なもの
  3. App Store Connect API キーの作成
  4. App Store Connect API キーの使用
  5. Fastlaneファイルのコピー
  6. Fastlane matchの設定

1. App Store Connect APIをFastlane Matchで使用する

2021年2月以降、すべてのユーザーがApp Store Connectにサインインするには、2要素認証または2段階認証が必要になります。Apple IDのセキュリティの追加レイヤーは、自分のアカウントにアクセスできるのは自分だけであることを保証するのに役立ちます。
From Apple Support

matchの開始には既存の証明書を取り消す必要がありますが、心配はいりません。新しい証明書は直接取得できます。

必要なもの

App Store Connect API を使用できるようにするには、Fastlane に 3 つ 必要です。

  1. Issuer ID。
  2. Key ID。
  3. Key ファイルまたは Key 内容。

App Store Connect API キーの作成

App Store Connect での Admin 権限が必要です。権限がない場合は、この記事を指示することで、権限を持つ人に指示し、以下の手順に従ってください。

1 — App Store Connect にログイン 2 — Users and Access を選択.

3 — Admins を選択 4 — Generate a Key を選択.

App Store Connectユーザーアクセス

3 — インテグレーションタブを選択

App Store ConnectAPIインテグレーション

4 — GenerateAPIキーまたは追加ボタンをクリック

App Store ConnectAPIキーを作成

5 — キーの名前を入力。名前はあなたの参照用であり、キー自体の部分ではない

App Store ConnectAPIキーを作成する名前

6 — アクセス下で、キーのロールを選択。キーのロールは、チームのユーザーに適用されるロールと同じです。詳細は ロールパーミッションを参照してください。 App Store Connectでは、ロールを.

App Store Connect管理者

CapgoのAPIキーは、特定のアプリに制限することができません。

__CAPGO_KEEP_0__ キーの名前、キーID、ダウンロードリンク、他に情報がページに表示されます。

App Store Connectダウンロードキー

ここで必要な3つの情報をすべて取得できます。
<1> Issue ID.
<2> Key ID.
&lt;3&gt; Click “Download API Key” to download your API private key. The download link appears only if the private key has not yet been downloaded. Apple does not keep a copy of the private key. So, you can download it only once.

🔴 プライベート キーを安全な場所に保存してください。キーを共有しないでください、キーをcode リポジトリに保存しないでください、またはクライアントサイドのcode にキーを含めないでください。

App Store ConnectのAPI キーを使用する

API キー ファイル(ダウンロードしたp8ファイル)、キーID、発行者IDが必要です。これらの情報をFastlaneに入力する方法は複数あります。 app_store_connect_api_keyFastlaneのドキュメントを参照してください。 Fastlaneのドキュメント. iOS の自動ビルドの GitHub アクションを作成する方法を紹介します。CI では環境変数を設定できます。

App Store Connect の API キーを使用して、Fastlane を管理できます。これは素晴らしいことです!

2. Fastlane のファイルをコピーします。

Fastlane は、Android Studio を使用することなく、iOS アプリの開発を自動化するための Ruby ライブラリです。Fastlane を使用すると、カスタムの「レーン」を構成できます。これは、複数の「アクション」を組み合わせて、通常は Android Studio を使用して実行するタスクを実行するためのものです。Fastlane を使用すると、多くのことが実行できますが、このチュートリアルでは、主なアクションのみを使用します。

プロジェクトの root ディレクトリに Fastlane フォルダを作成し、次のファイルをコピーします。 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"])

Fastlane を設定するには、match を設定します。

Fastlane match は、iOS の __CAPGO_KEEP_0__ 証明書の新しいアプローチです。Fastlane match を使用すると、チームが 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.

例えば、__CAPGO_KEEP_0__ の個人アカウントまたは組織で作成します。 certificates, for example on your GitHub personal account or organization.

iOSアプリ用のFastlane matchを初期化してください。

fastlane match init

次に、オプション #1 (Git Storage) を選択してください。

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

新しく作成されたリポジトリのURLを割り当ててください。

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

Fastlane フォルダ内に、ファイル名が "Matchfile" であるファイルが生成されます。 Matchfile そして _git_url_このファイルの値は、証明書リポジトリのHTTPS URLに設定してください。オプションでSSHも使用できますが、別のステップを実行する必要があります。

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

次に、Fastlane Matchで証明書を生成し、必要な情報を入力してください。

パスフレーズを入力するよう求められます。正しく入力してください。後でGitHub Actionsが証明書リポジトリを暗号化するために使用します。

fastlane match appstore

すべてがうまくいった場合、以下のような画面が表示されます。

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

問題が発生した場合は、GitHubと必要な権限に関するこの 記事 GitHub Actionsで自動的にCapacitor iOSビルドを行う

生成された証明書とプロビジョニングプロファイルは証明書リポジトリのリソースにアップロードされます

App Store Connect証明書

最後に、Xcodeを開いて、リリース構成のアプリのプロビジョニングプロファイルを更新してください。 project XCode証明書

いくつかの注意事項があります

MATCH

CI/CDが証明書とプロビジョニングプロファイルをインポートするには、証明書リポジトリにアクセスする必要があります。

これを行うには、プライベートリポジトリにアクセスまたは読み取り専用のスコープを持つパーソナルアクセストークンを生成してください。

このGitHubに移動してください 設定開発者設定パーソナル アクセス トークン → クリック Generate New Token → チェック repo スコープ → 次にクリック Generate token.

パーソナル アクセス トークンを作成

パーソナル アクセス トークンが生成されたことを確認してください。後で環境変数として使用します。 GIT_TOKEN.

次に、Fastlane フォルダで生成されたマッチファイルを置き換えます。 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)

このファイルは、GitHub Actionsによって証明書とプロビジョニング プロファイルをインポートするのに使用されます。 代わりに、GitHub Secretsに変数が設定され、ファイルにハードコードするのではなく、ファイルに記述する必要があります。

ビルド処理

GitHub Actionsでは、実行時間に基づいて課金されます。 実行時間に基づいて課金されるのは、CI/CD ワークフローを実行するのに使用した分数です。実際のビルド処理時間は、App Store Connectで約10-15分かかります。 → click

プライベートプロジェクトの場合、ビルドの予想コストは1分あたり$0.08 x 15分 = $1.2 1.2ドル、または、プロジェクトの構成または依存関係に応じて、さらに多くかかる可能性があります。

価格設定の懸念を共有する場合は、プライベートプロジェクトの場合、ビルドの分数を節約したい場合は、 skip_waiting_for_build_processing を更新する必要があります。 true.

このプロセスでは、ビルドが処理された後、App Store Connect でアプリの互換性を手動で更新する必要があります。これにより、ユーザーにビルドを配布できます。

この手順は、ビルドの分数を節約したい場合にのみ必要です。フリープロジェクトの場合は、問題ありません。詳しくは 価格設定.

3. GitHub アクションを設定する

GitHub シークレットを設定する

プロジェクトのシークレットから値が来ているのではないかと思ったことはありませんか?それは秘密ではありません – それがプロジェクトのシークレットからです。 🤦 ENV context

CapgoでGitHubシークレットを設定

1. APP_STORE_CONNECT_TEAM_ID - App Store ConnectチームのIDを指定します。複数のチームに所属している場合。

2. DEVELOPER_APP_ID - App Store Connectにアクセスし、 アプリ情報 → アプリの下部に移動し、 General Information アプリの Apple ID.

3. DEVELOPER_APP_IDENTIFIER セクションを探してください。

4. DEVELOPER_PORTAL_TEAM_ID - アプリのバンドルIDを確認します。

5. FASTLANE_APPLE_ID - 複数のチームに所属している場合の、Developer PortalチームのIDを確認します。

6. GIT_USERNAME - アプリを管理するために使用するApple IDまたは開発者メールアドレスを確認します。 GIT_TOKEN - Gitユーザー名とパーソナルアクセストークンを指定します。

7. MATCH_PASSWORD - matchを初期化したときに割り当てたパスフレーズを指定します。これは、証明書とプロビジョニングプロファイルの暗号化に使用されます。

8. PROVISIONING_PROFILE_SPECIFIER - match AppStore <YOUR_APP_BUNDLE_IDENTIFIER>, 例えば。 match AppStore com.domain.blabla.demo.

9. TEMP_KEYCHAIN_USER &amp; TEMP_KEYCHAIN_PASSWORD - 仮のキーチェーンユーザーとパスワードを割り当ててワークフローを実行してください。

10. APPLE_KEY_ID — App Store Connect API キー 🔺キーID。

11. APPLE_ISSUER_ID — App Store Connect API キー 🔺発行者ID。

12. APPLE_KEY_CONTENT — App Store Connect API キー 🔺キーファイルまたはキーコンテンツ。 .p8, 確認してください。

13. CERTIFICATE_STORE_URL — Match キーのリポジトリ URL (例: https://__CAPGO_KEEP_0__.com/***/fastlane_match.git) 4. github ワークフロー ファイルを設定してください。)

GitHub ワークフロー ディレクトリを作成してください。

Create a GitHub workflow directory.

cd .github/workflows

内部 workflow フォルダ内にファイルを追加してください build-upload-ios.ymlファイル名は

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 with GitHub actions を参照してください。

次に、このワークフローはNode.jsの依存関係を取得し、JavaScriptアプリをビルドします。

コミットごとにリリースがTestFlightで作成されます。

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.

ベースは必須です。古いCordovaモジュールを使用してもかまいませんが、

Create a Commit

Make a commit, you should see the active workflow in the repository.

Trigger the workflow

Push the new commits to the branch main or development CapacitorのLive-Updateの代替

to trigger the workflow.

Started with commit

数分後、App Store Connectダッシュボードでビルドが利用可能になります。

Testflightダッシュボード

はい、できますし、手間もありません。

想像してみてください。プライベートリポジトリがあり、無料プランの分数を使用アップし、また新しいリリースのために支払いたくない、またはアプリケーションを手動で提出したい場合はどうですか。

行きましょう

まず、ファイルを作成する必要があります。 my_project_path/fastlane ファイル名は .env Fastfileと同じパスに置いてください。 同じ 秘密 プロパティを作成することができます。 _GitHub、以下のa_sのものと同じです。

.envファイルからローカルマシンでデプロイ

今、ローカルマシンからデプロイするための.envファイル ターミナル ローカルマシンからデプロイするためのFastlaneを起動 Fastlaneを起動してください ❌ .envファイルの重要な点ですが、データを公開したくないので、.gitignoreに追加する必要があります。

fastlane closed_beta

❌ .envファイルの重要な点ですが、データを公開したくないので、.gitignoreに追加する必要があります。 .gitignoreに追加する必要があります。 ローカルマシンからデプロイするためのActionsと同じように動作するはずです。ローカルマシンからデプロイするためのActionsと同じように動作するはずです。

fastlane/*.env

It should work the same as it happens from GitHub Actions on the remote machine but in our local machine. 🍻

ローカルFastlane実行

ターミナル実行: $ Fastlane closed_beta

ここまで来たら、FastlaneとGitHub Actionsを使用したiOSアプリの完全自動化プロセスを手に入れたことになる。

毎回コミットを送ると、Google Playコンソールのベータチャンネルでリリースが作成される。 martin@capgo.app

martin@__CAPGO_KEEP_0__.app

デバイスでビルド デバイスでビルドする必要がある場合は、プロビジョニングに手動で追加する必要がある。 デバイスをMacに接続し、デバイスメニューを開く デバイスiOSメニュー 次に、識別子をコピーする fastlane register_new_device 識別子iOSを探す set identifier ios

if you got issues

開発デバイスで問題が発生した場合など、通常はその解決策となります。

There is a magic command that can save you:

fastlane match nuke development
fastlane match development

Then: プロジェクトをクリーンするには、Shift(⇧)+Command(⌘)+Kを押すか、Product > Clean(「Clean Build Folder」とラベル付けされている場合もあります)を選択してください。

Then try to run again the app on your device.

Thanks

This blog is based on the following articles:

Automatic Capacitor IOS build with GitHub actions using match

Capgoを使用している場合 Capgoの自動Capacitor IOSビルドとGitHubアクションの使用 matchを使用してCI/CDの自動化を計画し、それを Capgo CI/CD for the product workflow in Capgo CI/CD, Capgo Native Builds for the product workflow in Capgo Native Builds, Capgo Integrations for the product workflow in Capgo Integrations, CapgoのCI/CD統合 Capgoの実装詳細 GitHub Actions Integration Capgoの実装詳細についてはGitHub Actions Integration.

Live updates for Capacitor apps

ウェブ層のバグが生じた場合、Capgo を使用して修正を配信し、App Storeの承認待ちの日数を待たずに修正を配信する。ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路で残る。

マーティンから人間のサポートを受けます。

今すぐ始めましょう

最新のブログ記事

Capgo は、プロフェッショナルなモバイルアプリを作成するために必要な最良の洞察を提供します。