手動作業なしのリリース
Gitでリリースタグを付けて、自動的にTestFlightとPlay Storeに署名されたiOSおよびAndroidバイナリを送信します。
このプラグインのインストール手順とマークダウンガイドの全てを含む設定プロンプトをコピーする
iOSおよびAndroidのビルドを直接GitHubリポジトリから自動化できます。ワークフローファイルとリポジトリシークレットの少数を使用すると、チームの誰もMac、Xcode、またはAndroid Studioをインストールする必要なく、プッシュ、タグ、または手動トリガーごとに署名された、ストアに送信可能なアプリが生成されます。
手動作業なしのリリース
Gitでリリースタグを付けて、自動的にTestFlightとPlay Storeに署名されたiOSおよびAndroidバイナリを送信します。
ローカル設定なし
WindowsまたはLinuxのContributorsはiOSビルドをトリガーできます。Xcode、プロビジョニングのハッスル、ノートパソコンの共有署名証明書は必要ありません。
スコープされたシークレット
シークレットはGitHubリポジトリのシークレット内にあり、ワークフロー実行者にのみ表示されます。回転が簡単、監査も簡単です。
並列ビルド
iOSとAndroidを同時にビルドするマトリックスジョブ。通常のリリースは10分未満で完了します。
Capgoアカウントと有効なサブスクリプションとともに
bunx @capgo/cli@latest app add __CAPGO_KEEP_1__bunx @capgo/cli@latest build init — 以下を参照 クレデンシャルを管理する ワークショップのためのガイドbunx @capgo/cli@latest build request com.example.app --platform android --build-mode debugCIでは最初のビルドをデバッグする場所ではありませんgh) インストール済みかつ認証済み (gh auth login)The Capgo CLI can export your local credentials as a ready-to-use .env Capgo の __CAPGO_KEEP_0__ __CAPGO_KEEP_1__ は、ローカルの資格情報を使用できるファイルとしてエクスポートできます。 gh secret set -fこれを組み合わせると、CI/CD の設定全体を 3 つのコマンドで実行できます — 手動の base64 エンコード、JSON の操作、秘密のコピーとペーストは必要ありません。
Capgo の Capgo API キーをリポジトリのシークレットとして追加してください。
Capgo の API キーは、アプリごとの資格情報ストアの一部ではありませんので、手動で 1 回追加してください。
gh secret set CAPGO_TOKEN --body "your_capgo_api_key_here"__CAPGO_KEEP_0__ ダッシュボードでキーの生成 Capgo __CAPGO_KEEP_1__ GitHub Actionsとともに アップロード 権限が高い
環境変数をファイルにエクスポートする .env ファイル
インタラクティブな環境変数マネージャーを実行します
bunx @capgo/cli@latest build credentials manage --appId com.example.appTUIで 環境変数を.envファイルにエクスポートする。CLIは .env.capgo.<appId> 現在のディレクトリにモードで書き込む 0600 (owner-readable only) — 例えば、 .env.capgo.com.example.app. iOS と Android の両方が設定されている場合、両方のプラットフォームのシークレットは同じファイルの下に配置されます。 # === IOS === そして # === ANDROID === セクション ヘッダー。 iOS と Android の環境変数名は異なるため、組み合わせることは競合しない。
必要な場合は再エクスポートしてください。 .env ファイルをGitHubにPushしてください。
Actionsのシークレット gh secret set -f コマンドは.envファイルを読み取り、各行ごとにリポジトリシークレットを作成します。 KEY=value ターミナル画面
gh secret set -f .env.capgo.com.example.appThat’s it — every secret your workflow needs is now in GitHub. Verify with gh secret list.
資格情報をローテートする必要がある場合、いつでも再エクスポートできます — ファイルは長期間のアーティファクトではありません。
ワークフロー ファイルを作成 .github/workflows/capgo-build.yml 追加
セクションのタイトル「何がセキュリティーセクションに表示されるか」 gh secret set -f 参考として、
| プラットフォーム | シークレット |
|---|---|
| iOS | BUILD_CERTIFICATE_BASE64, P12_PASSWORD, CAPGO_IOS_PROVISIONING_MAP_BASE64, APPLE_KEY_ID, APPLE_ISSUER_ID, APPLE_KEY_CONTENT, APP_STORE_CONNECT_TEAM_ID |
| Android | ANDROID_KEYSTORE_FILE, KEYSTORE_KEY_ALIAS, KEYSTORE_KEY_PASSWORD, KEYSTORE_STORE_PASSWORD, PLAY_CONFIG_JSON |
| 手動で追加 | CAPGO_TOKEN |
必要ないので、以下のワークフロー例はすべてのものを参照している。
3 つの例は、最も一般的なパターンをカバーしています。すべて同じ形を使用します: リポジトリをチェックアウト、依存関係をインストール、Web アセットをビルド、ネイティブに Sync、最後に Capgo を Build して、環境変数として資格情報を渡します。
誰でも書き込みアクセス権を持っている人は、ビルドをトリガーすることができる アクション GitHubのタブにプラットフォームのドロップダウンがあります。アドホックのテストビルドやリリースをオンデマンドで開始するのに便利です。
name: Capgo Build (Manual)
on: workflow_dispatch: inputs: platform: description: 'Platform to build' required: true default: 'android' type: choice options: [ios, android, both] mode: description: 'Build mode' required: true default: 'debug' type: choice options: [debug, release]
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: oven-sh/setup-bun@v2 with: bun-version: latest
- run: bun install --frozen-lockfile - run: bun run build - run: bunx cap sync
- name: Trigger Capgo Build env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} P12_PASSWORD: ${{ secrets.P12_PASSWORD }} CAPGO_IOS_PROVISIONING_MAP_BASE64: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP_BASE64 }} APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }} APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }} ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }} KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }} run: | bunx @capgo/cli@latest build request com.example.app \ --platform ${{ inputs.platform }} \ --build-mode ${{ inputs.mode }}置き換え com.example.app アプリIDに置き換えてください。コミットすると、 アクション → Capgo ビルド(手動) → ワークフロー実行 をクリックしてください。
両方のプラットフォームを並行してビルドし、タグのバージョンをプッシュすると自動的に配信します。この設定は最も一般的なプロダクション設定です。 v1.4.0. This is the most common production setup — git tag v1.4.0 && git push --tags リリースコマンドになります。
name: Capgo Build (Release)
on: push: tags: - 'v*'
jobs: build: runs-on: ubuntu-latest strategy: fail-fast: false matrix: platform: [ios, android] steps: - uses: actions/checkout@v4 - uses: oven-sh/setup-bun@v2 with: bun-version: latest
- run: bun install --frozen-lockfile - run: bun run build - run: bunx cap sync ${{ matrix.platform }}
- name: Build ${{ matrix.platform }} env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} # iOS BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} P12_PASSWORD: ${{ secrets.P12_PASSWORD }} CAPGO_IOS_PROVISIONING_MAP_BASE64: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP_BASE64 }} APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }} APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }} # Android ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }} KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }} run: | bunx @capgo/cli@latest build request com.example.app \ --platform ${{ matrix.platform }} \ --build-mode releaseマトリックスはiOSとAndroidを並列に、別々の実行者で実行します。設定 fail-fast: false iOSのビルドが失敗しても、進行中のAndroidのビルドをキャンセルしない (逆も同様) — 一時的な署名問題があるプラットフォームがある場合に便利です。
メインブランチへの毎回のプッシュでネイティブビルドの不具合を早期に検出するために、デバッグAndroidビルドを生成します。 mainコストが安く、フィードバックが速く、プレイストアのアップロードをスキップして純粋にSmokeテストとして実行できます。
name: Capgo Build (Main)
on: push: branches: [main] paths: - 'src/**' - 'android/**' - 'ios/**' - 'package.json' - 'capacitor.config.*'
jobs: smoke-build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: oven-sh/setup-bun@v2 with: bun-version: latest
- run: bun install --frozen-lockfile - run: bun run build - run: bunx cap sync android
- name: Smoke build (Android debug) env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }} KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} run: | bunx @capgo/cli@latest build request com.example.app \ --platform android \ --build-mode debug \ --no-playstore-upload \ --output-upload「」 paths フィルタがドキュメントのみの変更でワークフローを実行しないようにします。 --no-playstore-upload プレイストアの提出をスキップする (必要ありません)、および生成されたAPKのダウンロードURLを生成して、テストデバイスにインストールできます。 PLAY_CONFIG_JSON 共通パターン --output-upload 「共通パターン」セクションのタイトル
テストビルドの場合、ストアの提出をスキップします: Android は --no-playstore-uploadiOS の場合、ad-hoc モードでビルドします ( --ios-distribution ad_hoc App Store に提出されることはありません)。これらを組み合わせて --output-upload バイナリのダウンロード URL を取得します。
デフォルトでは、リリース ビルドは署名済みアーティファクトをアップロードし、最終的なストア アクションをユーザーの制御下に残します。CI リリースがストアのレビュー フローに直接移動するようにするには、 --submit-to-store-review.
Android は PLAY_CONFIG_JSON サービス アカウントを使用します。 明示的なトラックがなければなりません --submit-to-store-review デフォルトでは、生産トラックに設定されます。 release_status: completed. 呼び出し元でトラックを明示的に指定することをお勧めします。 --android-track (または PLAY_STORE_TRACK),およびステータスをオーバーライドする必要があります。 --android-release-status / PLAY_STORE_RELEASE_STATUS 必要な場合:
- name: Submit Android release for review env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }} KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }} run: | npx @capgo/cli@latest build request com.example.app \ --platform android \ --build-mode release \ --submit-to-store-review \ --android-track production \ --store-release-name "${GITHUB_REF_NAME}" \ --store-release-notes "Release ${GITHUB_REF_NAME}" \ --store-release-notes-locale "en-US=Release ${GITHUB_REF_NAME}"内部の完了リリースの代わりに生産:
- name: Submit Android internal release env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} ANDROID_KEYSTORE_FILE: ${{ secrets.ANDROID_KEYSTORE_FILE }} KEYSTORE_KEY_ALIAS: ${{ secrets.KEYSTORE_KEY_ALIAS }} KEYSTORE_KEY_PASSWORD: ${{ secrets.KEYSTORE_KEY_PASSWORD }} KEYSTORE_STORE_PASSWORD: ${{ secrets.KEYSTORE_STORE_PASSWORD }} PLAY_CONFIG_JSON: ${{ secrets.PLAY_CONFIG_JSON }} run: | npx @capgo/cli@latest build request com.example.app \ --platform android \ --build-mode release \ --submit-to-store-review \ --android-track internal \ --store-release-name "${GITHUB_REF_NAME}"iOSはApp Store Connect API キーパスを使用して、処理済みのTestFlightビルドをApp Storeレビューに提出します。 app_store 配布が必要です。 --ios-testflight-groups 外部ベータ配布用にオプションで使用でき、App Storeレビューには必要ありません。
- name: Submit iOS build to App Store review env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }} P12_PASSWORD: ${{ secrets.P12_PASSWORD }} CAPGO_IOS_PROVISIONING_MAP: ${{ secrets.CAPGO_IOS_PROVISIONING_MAP }} APPLE_KEY_ID: ${{ secrets.APPLE_KEY_ID }} APPLE_ISSUER_ID: ${{ secrets.APPLE_ISSUER_ID }} APPLE_KEY_CONTENT: ${{ secrets.APPLE_KEY_CONTENT }} APP_STORE_CONNECT_TEAM_ID: ${{ secrets.APP_STORE_CONNECT_TEAM_ID }} run: | npx @capgo/cli@latest build request com.example.app \ --platform ios \ --build-mode release \ --ios-distribution app_store \ --submit-to-store-review \ --store-release-name "${GITHUB_REF_NAME}" \ --store-release-notes "Release ${GITHUB_REF_NAME}" \ --store-release-notes-locale "en-US=Release ${GITHUB_REF_NAME}" \ --no-ios-automatic-release成功 --output-record <path> to persist the build artifact URL and QR code to disk when the build succeeds, then read it back in subsequent steps with build last-output. ログのスクラピング、正規表現なし。
- name: Build env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} # ...credentials... run: | bunx @capgo/cli@latest build request com.example.app \ --platform android --build-mode debug \ --output-upload --output-retention 1d \ --output-record /tmp/build.json
- name: Comment on PR with build URL env: GH_TOKEN: ${{ github.token }} run: | URL=$(bunx @capgo/cli@latest build last-output --path /tmp/build.json --field outputUrl) if [ -n "$URL" ]; then gh pr comment ${{ github.event.pull_request.number }} \ --body "Debug build ready: $URL" fi--output-record /tmp/build.json JSONレコード({ jobId, status, outputUrl, qrCodeAscii, qrCodePngPath, finishedAt) and a PNG QR code alongside at /tmp/build.json.qr.png. build last-output }の横に書き込みます。
--field outputUrl URLをダウンロードするのみ(改行終了; セーフな値) URL=$(...)).--field qrCodePngPath PRの添付としてアップロードできるPNGのパスを表示します。--qr レンダリングされたASCII QRコードを表示します。PRコメント内でインラインでスキャンできるように、Markdown code フェンス内に配置してください。__CAPGO_KEEP_0__ --skip-build-number-bump:
- name: Set version from tag run: | VERSION="${GITHUB_REF#refs/tags/v}" # Update package.json or your version source here bun pm version "$VERSION" --no-git-tag-version
- name: Build env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} # ...credentials... run: | bunx @capgo/cli@latest build request com.example.app \ --platform ios --build-mode release \ --skip-build-number-bumpbun install キャッシュ依存関係はすでに高速化されており、JS依存関係キャッシュはほとんどの場合有効ではないが、Capacitorのネイティブ依存関係(CocoaPods、Gradle)は大規模プロジェクトではキャッシュする価値がある:
- uses: actions/cache@v4 with: path: | ~/.bun/install/cache ios/App/Pods android/.gradle key: ${{ runner.os }}-capgo-${{ hashFiles('**/bun.lock', '**/Podfile.lock') }}| 症状 | 原因 |
|---|---|
CAPGO_TOKEN is not set | シークレットが追加されていません、またはジョブがそれにアクセスできません(環境/ブランチ保護を確認してください) |
| iOS/Android認証情報が欠落している | gh secret set -f 実行されていません、または別のリポジトリに対して実行されました。確認するには gh secret list |
cap sync CIで失敗しますがローカルでは正常に動作します | A native plugin が存在しない package.json、または忘れていた bun install 前 cap sync |
| アプリが正常にビルドされるが、App Store Connect に表示されない | チーム ID が間違っている、または App Store Connect にはアプリのレコードがまだ存在していない。ローカルで確認するには bunx @capgo/cli@latest build credentials manage |
| アップロード中のプロジェクトが膨大である — これがアップロードされていることを確認する | アップロードされていないはずなので node_modules プロビジョニング マップが Xcode が署名する bundle ID と異なる ID を指している。プロファイルを再読み込みし、再エクスポートする |
Provisioning profile doesn't match bundle ID | 再エクスポートし、再プッシュする build init ローカルで認証情報が変更されたが、CI が失敗する build credentials manage |
| 再エクスポートし、再プッシュする: | 前 bunx @capgo/cli@latest build credentials manage → gh secret set -f .env.capgo.<appId> |
| マネージャーは組み合わせファイルを書き込まない | プラットフォーム間で共有設定キーが異なる場合、マネージャーは警告を表示し、確認を求める。確認すると上書き勝ち、またはプラットフォームごとに再エクスポートする --platform ios / --platform android |
build last-output URLが空白になる | ビルドが失敗 --output-uploadまたは、生成されたアーティファクトがなくて失敗した outputUrl ビルドが失敗 null または、生成されたアーティファクトがなくて失敗した [ -n "$URL" ] レコードに |
build last-output 使用する前に Unsupported record schemaVersion | The runner is on an older CLI than the one that wrote the record. Pin both producer and reader to the same explicit version (e.g. bunx @capgo/cli@7.104.0 … ランナーはレコードを書き込んだ時点の古い__CAPGO_KEEP_0__で動いている。プロデューサーとリーダーを同じ明示的なバージョンに固定する (例えば @latest両方の側で) ではなくて、 |
プラットフォーム固有のビルドエラーについては、 トラブルシューティングガイド.