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

自動Capacitor IOS ビルドとGitHub アクションのマッチング

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

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

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

コンテンツマーケター

自動Capacitor IOS ビルドとGitHub アクションのマッチング

GitHub Actionsを使用したiOSビルドの自動化

Capacitor アプリのCI/CD設定は複雑で時間がかかることがあります。ここでは、必要なことを知っておくべきことを紹介します。

現在は__CAPGO_KEEP_0__ ビルドを推奨しています Capgo Build with the Capgo CLI native Capacitor のビルド用 This Fastlane Match guide is kept for teams maintaining existing GitHub Actions pipelines, but new iOS builds should use the Capgo CLI so you do not have to maintain Fastlane, Match repositories, Xcode runners, certificates, and upload scripts yourself.

Capgo Build for CI/CD by Capgo

Fastlane Match、Xcode runner、証明書、プロビジョニングプロファイル、アップロードスクリプトの管理をスキップ Capgo Build CI/CD パイプラインで実行される、署名済みネイティブiOSビルド

  • CI/CDパイプラインで実行: Capgo Build を GitHub Actions、GitLab CI、Jenkins、またはローカルスクリプトからトリガー npx cap sync.
  • CIシークレットから署名: App Store Connect のキー、証明書、プロビジョニングプロファイル、パスワード、チームIDをCIシークレットに保持
  • ネイティブランナーの維持をせずに済む: Capgo Buildは、macOSランナーやXcodeイメージ、Fastlane、Matchリポジトリの管理を手動で行う必要がなくなるように、維持されたAppleビルド環境を提供します。
  • アーティファクトと提出: QA用に署名済みアーティファクトをダウンロードしたり、Capgo CLIを通じてリリースビルドを提出することができます。

価格

  • Capgo プランは1か月あたり$12で始まります
  • OTA更新と約15のネイティブビルドが含まれます
  • 追加のビルド分数はクレジットを通じて1分あたり請求されます

Capgo ビルドをCI/CDに設定する

マニュアル設定ガイド

ここで何が必要か

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

前提条件

チュートリアルを続ける前に…

  • Fastlaneが開発環境にインストールされていることを確認してください。 iOS開発者プログラムの会員資格 iOS開発者プログラムの会員資格が必要です。
  • 😆を読む欲求…
  • 多くの開発者がいるチームの場合、より簡単なワークフローを実現するためにfastlane certを使用することをお勧めします。
  • 価格について重要な注意事項 価格__CAPGO_KEEP_0__アクション https://__CAPGO_KEEP_0__.com/features/actions

https://__CAPGO_KEEP_0__.com/features/actions

https://GitHub.com/features/actions

https://github.com/features/actions

サービスは ‘無料’ までの制限に応じて、選択したマシンに依存します。
Capacitorを使用します。 macOS マシンを選択すると、スクリーンショットの価格と制限 (価格はこのチュートリアルの作成時点のものであり、将来の変更が可能です) を確認できます。

🔴 要件と価格について警告された後、続ける場合はどうですか。

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

では、始めましょう。

この投稿で従うステップ

  1. Fastlane Matchを使用してApp Store Connect API
  2. 要件
  3. App Store Connect API キーを作成する
  4. App Store Connect API キーを使用する
  5. ファイルを迅速にコピー
  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. 発行者ID
  2. Key ID.
  3. Key file or Key content.

App Store Connect API のキーを作成する

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

1 — App Store Connect にログインする App Store Connect.

2 — "ユーザーとアクセス"を選択する App Store Connect ユーザー アクセス.

3 — "統合"タブを選択する

App Store Connect __CAPGO_KEEP_0__ 統合

4 — API キーを生成するか、(+) ボタンをクリックする

4 — API キーを生成するか、(+) ボタンをクリックする

App Store Connect API keys create

5 — __CAPGO_KEEP_0__ の名前を入力してください。名前はあなた自身の用途で使用するため、__CAPGO_KEEP_0__ 自体とは関係ありません。

App Store Connect API keys create name

6 — アクセスセクションで、__CAPGO_KEEP_0__ に付与するロールを選択してください。__CAPGO_KEEP_0__ に付与するロールは、チームのメンバーに付与するロールと同じです。詳細は role permissionsを参照してください。 App Store Connect では、__CAPGO_KEEP_0__ のアクセスを特定のアプリに制限することはできません。.

7 — 生成をクリックしてください。

API の新しい名前、API ID、ダウンロードリンク、他に必要な情報は、このページに表示されます。

App Store Connect で __CAPGO_KEEP_0__ をダウンロード

ここで、必要な3つの情報をすべて取得できます。

App Store Connect で __CAPGO_KEEP_0__ をダウンロードする方法はありますか?
<1> 問題 ID.
<2> キー ID.
<3> “API キーをダウンロード” ボタンをクリックして、API プライベート キーをダウンロードしてください。ダウンロード リンクは、プライベート キーがまだダウンロードされていない場合にのみ表示されます。Apple はプライベート キーを保持していないため、ダウンロードすることができます。ただし、プライベート キーは一度だけダウンロードできます。

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

App Store Connect API キーを使用する

API キー ファイル(ダウンロードした p8 ファイル)、キー ID、発行者 IDが必要です。これらの情報を Fastlane に入力する方法は複数あります。Fastlane の新しいアクションを使用して、 app_store_connect_api_keyFastlane ドキュメントを参照してください。 この方法を紹介したのは、CI で最も多くの場合に簡単に動作するように思ったためです。環境変数を設定できます。Fastlane を App Store Connect __CAPGO_KEEP_0__ キーで管理できるようになりました!

Now we can manage Fastlane with the App Store Connect API key, great!

Fastlane は、Android Studio を使用してモバイル開発タスクを自動化するための Ruby ライブラリです。Fastlane を使用すると、カスタムの「レーン」を構成できます。これらのレーンには、通常 Android Studio を使用して実行する「アクション」が含まれます。Fastlane を使用すると、Android Studio を使用して実行するタスクを実行できます。ただし、このチュートリアルでは、Fastlane のコアアクションの少数を使用することになります。

Fastlane is a Ruby library created to automate common mobile development tasks. Using Fastlane, you can configure custom “lanes” which bundle a series of “actions” that perform tasks that you’d normally perform using Android studio. You can do a lot with Fastlane, but for the purposes of this tutorial, we’ll be using only a handful of core actions.

プロジェクトのルートに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を設定する

Fastlane match iOSのcode署名の新しいアプローチです。Fastlane matchは、iOSアプリの必要な証明書とプロビジョニングプロファイルをチームが管理するのを簡単にします。

iOSアプリ用の新しいプライベートリポジトリを作成する certificates例えば、GitHubの個人アカウントまたは組織で

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_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 と必要な権限で問題が発生した場合、必要な認証トークンを生成するためにこの 投稿 が役に立ちます。

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

App Store Connect 証明書

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

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にvarが設定され、ファイルにハードコーディングするのではなく、代わりに使用されます。

ビルド処理

GitHub Actionsで 実行時間に基づいて請求されます。CI/CD ワークフローを実行するのにかかる時間に基づいて請求されます。App Store Connectでビルドが処理されるまでに約10-15分かかります。 プライベートプロジェクトの場合、ビルドあたりの推定コストは$0.08/分×15分=$1.2

、または、プロジェクトの構成または依存関係に応じて、より多くかかる可能性があります。 プライベートプロジェクトのコストについて同様の懸念を持つ場合は、以下のコストを抑えることができます。コストを抑えるには、

__CAPGO_KEEP_0__ Actionsで skip_waiting_for_build_processing to true.

What's the catch? You have to manually update the compliance of your app in App Store Connect after the build has been processed, for you to distribute the build to your users.

This is just an optional parameter to update if you want to save on the build minutes for private projects. For free projects, this shouldn't be a problem at all. See pricing.

3. Setup GitHub Actions

Configure GitHub secrets

Ever wonder where the values of the ENV are coming from? Well, it's not a secret anymore – it's from your project's secret.

Set GitHub secrets

1. APP_STORE_CONNECT_TEAM_ID - the ID of your App Store Connect team in you're in multiple teams.

2. DEVELOPER_APP_ID - in App Store Connect, go to the app → App Information → アプリの General Information セクションにスクロールし、 Apple ID.

3. DEVELOPER_APP_IDENTIFIER - アプリのバンドル識別子を探してください。

4. DEVELOPER_PORTAL_TEAM_ID - 複数のチームに所属している場合は、開発者ポータルチームのIDを探してください。

5. FASTLANE_APPLE_ID - アプリを管理するために使用するApple IDまたは開発者メールアドレスを探してください。

6. GIT_USERNAME &amp; 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 Key 🔺Key ID.

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

12. APPLE_KEY_CONTENT — App Store Connect API Key 🔺キーファイルまたはキーの内容。 .p8, 確認してください。

13. CERTIFICATE_STORE_URL — Match キーのリポジトリ URL (例: https://github.com/***/fastlane_match.git)

4. GitHub ワークフロー ファイルを設定する。

GitHub ワークフロー ディレクトリを作成します。

cd .github/workflows

ディレクトリの中に、ファイルを作成し、以下の内容を追加します。 workflow このワークフローは、各__CAPGO_KEEP_0__の後でトリガーされるべきです。 build-upload-ios.yml4. __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

GitHub ワークフロー設定ディレクトリを作成する タグ自動化されたタグ作成の方法については、 自動ビルドおよびリリースワークフローは、GitHub アクションを使用します。 最初に、ワークフローは NodeJS の依存関係を取得し、JavaScript アプリをビルドします。

コミットを送信するたびに、テストフライトでリリースが作成されます。

アプリは Ionic を使用する必要はありません。ただし、Capacitor の基本的な構成が必須です。古い Cordova モジュールを使用してもかまいませんが、__CAPGO_KEEP_1__ の JavaScript プラグインを使用することをお勧めします。

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.

コミットを作成する

コミットを作成し、

リポジトリでワークフローが有効になっていることを確認してください。 コミットを作成し、リポジトリでワークフローが有効になっていることを確認してください。

ワークフローをトリガーする

ブランチに新しいコミットをプッシュする main または development ワークフローをトリガーする。

コミットから始まる

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

テストフライト ダッシュボード

ローカルマシンからデプロイできる?

はい、簡単です。

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

それでは行きましょう

はい、まずCapgoを作成する必要があります。 プロジェクトのパス: my_project_path/fastlane ファイル名 "を含むパス .envファイル ローカルマシンからデプロイするために使用する.envファイル Fastfile ローカルマシンからデプロイするために使用する.envファイルを作成するには 秘密 _GitHub の中のプロパティを使用します。a_s の例:

.envファイルをローカルマシンからデプロイするために使用する

デプロイ用の.envファイルを作成するには ターミナル ターミナルで実行する Fastlane マシンから:

fastlane closed_beta

❌ 重要な情報について .env ファイル、データを公開したくないので、.gitignore , 例えば、❌ローカルマシンで同じように動作するように、__CAPGO_KEEP_0__ Actions を実行してみましょう。 🍻

fastlane/*.env

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

ターミナル実行: $ Fastlane closed_beta

ここまで来たら、恭喜恭喜!Fastlaneと__CAPGO_KEEP_0__ Actionsを使用して、iOSアプリの完全自動化プロセスを実現しました。

If you have come this far, my congratulations, now you have a fully automated process for your iOS apps with Fastlane and GitHub Actions.

Each time you send a new commit, a release will be built in Google Play console, beta channel. I will improve this blog with your feedbacks, if you have any question or suggestion, please let me know by email martin@capgo.app

デバイスでビルド

デバイスでビルドする必要がある場合は、手動でプロビジョニングに追加する必要があります。 Macにデバイスを接続し、デバイスメニューを開いてください iOSデバイスメニュー 次に、識別子をコピーしてください iOS識別子 次に、以下のコマンドを実行してください fastlane register_new_device デバイス名と識別子を設定するよう求められます 識別子を設定する

問題が発生した場合

開発用デバイスでテストができず、などの問題が発生した場合は、通常、以下のコマンドで解決できます。

デバイスのテストに失敗したり、開発用デバイスが機能しない場合は、以下のコマンドで解決できます。

fastlane match nuke development
fastlane match development

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

次に、デバイス上でアプリを再度実行してみてください。

感謝します。

このブログは以下の記事に基づいています。

自動CapacitoriOSビルドからGitHubアクションを使用してmatchを続けます

CI/CD自動化を計画している場合は、接続する 自動CapacitoriOSビルドからGitHubアクションを使用してmatch を使用している場合は、__CAPGO_KEEP_0__ CI/CDを接続します Capgo CI/CD Capgo CI/CDの製品ワークフロー用 Capgoネイティブビルド Capgoネイティブビルドの製品ワークフロー用 Capgo統合 Capgo統合の製品ワークフロー用 CI/CD統合 CI/CD統合の実装詳細、 GitHubアクション統合 GitHubアクション統合の実装詳細

Capacitorアプリのリアルタイム更新

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

スタートする

ブログの最新記事

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