手動作業なしのリリース
Git でのリリースタグを付けて、自動的に TestFlight と Play Store に署名済みの iOS と Android のバイナリを送信します。
このプラグインのインストール手順と全マークダウンガイドを含む設定の質問をコピーします。
GitHub リポジトリから直接 iOS と Android のビルドを自動化できます。ワークフロー ファイル 1 つとリポジトリのシークレット数少数で、チームの誰も Mac、Xcode、または Android Studio をインストールする必要なく、プッシュ、タグ、または手動トリガーごとに署名された、ストアに送信可能なアプリが生成されます。
手動作業なしのリリース
Git でのリリースタグを付けて、自動的に TestFlight と Play Store に署名済みの iOS と Android のバイナリを送信します。
ローカル設定なし
Windows または Linux のコントリビューターが iOS ビルドをトリガーできます。Xcode、プロビジョニングのハッスル、ローカルに保管されている共有署名証明書など、Mac をインストールする必要はありません。
スコープされたシークレット
GitHub には、リポジトリシークレットでスコープされた、ワークフロー実行者のみが表示できるクレデンシャルが存在します。簡単に回転し、簡単に監査できます。
並列ビルド
iOSとAndroidを同時にビルドするマトリックスジョブを使用してください。通常のリリースは10分未満で完了します。
Capgoアカウントと有効なサブスクリプション、Capgo __CAPGO_KEEP_1__ キー
bunx @capgo/cli@latest app add __CAPGO_KEEP_0__bunx @capgo/cli@latest build init __CAPGO_KEEP_0__ 資格情報の管理 ワイザードウォークスルー用にbunx @capgo/cli@latest build request com.example.app --platform android --build-mode debug) — CIは最初のビルドをデバッグする場所ではありませんgh) インストール済みで認証済み (gh auth login)Capgo CLI は、ローカル認証情報を使用可能なファイルとしてエクスポートできます。Capgo と組み合わせると、CI/CD セットアップ全体を 3 つのコマンドで実行できます — マニュアルの base64 エンコード、JSON の操作、秘密のコピーとペーストは必要ありません。 .env __CAPGO_KEEP_0__ __CAPGO_KEEP_1__ キーをリポジトリシークレットとして追加してください。 gh secret set -f__CAPGO_KEEP_0__ キーはアプリごとの認証情報ストアの一部ではありません。手動で 1 回追加してください。
Add your Capgo API key as a repository secret
The API key isn’t part of the per-app credential store, so add it once manually:
gh secret set CAPGO_TOKEN --body "your_capgo_api_key_here"__CAPGO_KEEP_0__ __CAPGO_KEEP_1__ Capgo __CAPGO_KEEP_1__ __CAPGO_KEEP_0__ ダッシュボード __CAPGO_KEEP_0__ __CAPGO_KEEP_0__ 以上の権限が必要です。
__CAPGO_KEEP_0__ をファイルにエクスポートしてください。 .env ファイル
インタラクティブな __CAPGO_KEEP_0__ マネージャーを実行してください。
bunx @capgo/cli@latest build credentials manage --appId com.example.appTUI で ファイルに .env をエクスポートしてください。CLI は .env.capgo.<appId> 現在のディレクトリに (オーナーが読み取れるのみ) — 例えば、 0600 iOS と Android の両方が設定されている場合、両方のプラットフォームのシークレットは同じファイル内に保存されます。 .env.capgo.com.example.app__CAPGO_KEEP_0__ はファイルに書き込まれます。 # === IOS === そして # === ANDROID === セクション ヘッダー。 iOS と Android の環境変数名は分離されているため、組み合わせることは競合しない。
Push the .env ファイルをGitHub Actions secretsにアップロード
The gh secret set -f コマンドは、.envファイルを読み取り、1行ごとにリポジトリシークレットを作成します。 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 リポジトリに追加してください。 3 つのトリガー パターンから 1 つを選択して、ビルドを実行する方法に応じてください。
参照用 gh secret set -f これらのリポジトリのシークレットを作成します (ワークフロー YAML は、これらのシークレットの完全な名前を参照します):
| プラットフォーム | 作成されるシークレット |
|---|---|
| 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 |
| (added manually) | CAPGO_TOKEN |
これらの手順を覚える必要はありません — 以下のワークフロー例はすべてのステップを含んでいます。
以下の3つの例は最も一般的なパターンをカバーしています。すべて同じ形を使用しています: リポジトリを参照してください、依存関係をインストールしてください、Webアセットをビルドしてください、ネイティブにSyncしてください、次に Capgo をビルドしてください。クレデンシャルを環境変数として渡します。
誰でも書き込みアクセス権を持つ人は、__CAPGO_KEEP_0__ の「アクション」タブからプラットフォームを選択してビルドを実行できます。アドホックのテストビルドやリリースをオンデマンドで開始するのに便利です。 Actions tab in GitHub with a platform dropdown. Useful for ad-hoc test builds or kicking off a release on demand.
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 __CAPGO_KEEP_0__をあなたのアプリIDに置き換えます。コミットすると、 アクション → Capgo ビルド (マニュアル) → ワークフロー実行 を実行してください。
両方のプラットフォームを並行してビルドし、タグ名のバージョンをプッシュすると、 v1.4.0これは最も一般的なプロダクション設定です — 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 releaseiOSとAndroidを別々のランナーで並行実行するマトリックスが実行されます。設定 fail-fast: false iOSのビルドが失敗しても、進行中のAndroidビルドはキャンセルされません (逆も同様) — 一時的な署名問題があるプラットフォームがある場合に便利です。
Catches native build regressions early by producing a debug Android build on every push to main. 安全で高速な実行、迅速なフィードバック、そしてPlayストアのアップロードをスキップして、純粋に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-uploadThe paths フィルタはドキュメントのみの変更でワークフローが実行されないようにします。 --no-playstore-upload Playストアの提出をスキップ (必要ありません)、および PLAY_CONFIG_JSON 結果のAPKのダウンロードURLを生成して、テストデバイスにインストールできるようにします。 --output-upload 共通パターン
テストビルドの場合、ストアの提出をスキップします: Androidは --no-playstore-upload; iOSの場合、 --ios-distribution ad_hoc (これはApp Storeに提出されることはありません)。これらを組み合わせて --output-upload を使用して、バイナリのダウンロードURLを時間制限付きで取得します。
デフォルトでは、リリースビルドは署名済みのアーティファクトをアップロードし、最終的なストアアクションをあなたのコントロールの下に残します。CIリリースがストアのレビューフローに直接移動するようにするには、 --submit-to-store-review.
サービスアカウントを使用し、Google Playのリリースを提出するのではなく、無効にしたままにするのではなく、Androidは PLAY_CONFIG_JSON を追加します。オプションの --store-release-name, --store-release-notesエントリを追加すると、CIと同じタグとローカライズされた変更履歴をPlayリリースに含めることができます。 --store-release-notes-locale コピー
- 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 \ --store-release-name "${GITHUB_REF_NAME}" \ --store-release-notes "Release ${GITHUB_REF_NAME}" \ --store-release-notes-locale "en-US=Release ${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> ビルドアーティファクトURLとQRコードcodeをディスクに永続化し、ビルドが成功した場合に後続のステップで読み戻すには 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 __CAPGO_KEEP_0__のJSONレコード (括弧と jobId, status, outputUrl, qrCodeAscii, qrCodePngPath, finishedAt) とPNG QR code を横に並べる /tmp/build.json.qr.png. build last-output を読み返す:
--field outputUrl ダウンロードURLだけを出力 (改行区切り; __CAPGO_KEEP_0__ のURLを安全に使用) URL=$(...)).--field qrCodePngPath __CAPGO_KEEP_0__のPNGパスを出力して、PRの添付ファイルとしてアップロードすることができます。--qr PRコメント内でスキャンできるように、code内にレンダリングされたASCII QRを出力します。デフォルトでは、各リリースビルドのビルド番号がインクリメントされます。指定した値 (たとえば、Git タグ) に固定するには、 --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 is already fast enough that a JS-deps cache rarely pays off, but Capacitor’s native dependencies (CocoaPods, Gradle) are worth caching for larger projects:
- 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 | __CAPGO_KEEP_0__が追加されていません、またはジョブはそれにアクセスできません (環境/ブランチ保護を確認してください) |
| iOS / Android の資格情報が不足しているためエラーが発生しています | gh secret set -f 実行されていません、または別のリポジトリに対して実行されていました。__CAPGO_KEEP_0__を確認してください gh secret list |
cap sync CI で失敗しますが、ローカルでは正常に動作します | ネイティブ プラグインは__CAPGO_KEEP_0__に含まれていません package.json__CAPGO_KEEP_0__が入力されていません、または入力されていません bun install __CAPGO_KEEP_0__ cap sync |
| App Store Connect にアプリが表示されないためビルドが成功しました | チーム ID が正しくありません、または App Store Connect にアプリのレコードがまだ存在していません。ローカルで__CAPGO_KEEP_0__を確認してください bunx @capgo/cli@latest build credentials manage |
| アップロードプロセスが終了した後、ビルドがハングアップしています | プロジェクトアーカイブが通常より大きい場合、__CAPGO_KEEP_0__を確認してください node_modules __CAPGO_KEEP_0__がアップロードされていないことを確認してください (デフォルトではアップロードされないはずです) |
Provisioning profile doesn't match bundle ID | Xcodeが署名している別のバンドルIDに指しているプロビジョニングマップがあります。再実行してプロファイルを更新し、再エクスポートしてください。 build init 再実行してプロファイルを更新し、再エクスポートしてください。 build credentials manage |
| ローカルで資格情報が変更されたが、CIはまだ失敗しています。 | 再エクスポートして再プッシュしてください。 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 | ランナーは、レコードを書いたものよりも古いCLIにあります。プロデューサーとリーダーを同じ明示的なバージョン (例えば bunx @capgo/cli@7.104.0 … 両方の側面) に固定するのではなくて @latest、ジョブ間で浮動することができるため |
プラットフォーム固有のビルドエラーについては、 トラブルシューティングガイド.