オートで Live Update またはネイティブ ビルドを選択
インストール、同期、そしてこのプラグインの全マークダウンガイドのステップを含むコピー可能な設定プロンプトを作成する。
ほとんどのCapacitorリリースはJavaScriptのみで、バイナリとして配布する必要があります。 live update.codeのビルド Capgo ビルドこのガイドでは、GitLab CI、または他のCI/CDプラットフォームが、毎回プッシュされたときに正しいパスを選択するように、GitHubアクションを設定する方法を示します。
Capgoはすでに安全なパスの情報を持っています。ウェブビルド後 (アップロードまたはネイティブビルドの前に)、以下のコマンドを実行してください。
npx @capgo/cli@latest bundle releaseType com.example.app --channel production# → OTA ship with bundle upload# → native ship with Capgo BuildOTA チャンネルで既にライブのネイティブパッケージと一致する native プラグイン、Capacitor バージョン、または他のネイティブ依存関係が変更された場合 — オーバー・ザ・エア (OTA) バンドルだけでは、安全にデバイスを更新することはできません。
releaseType 比較 ネイティブパッケージのメタデータ (Capacitor/Cordova プラグインとバージョン). それが しない すべての ios/, android/、 capacitor.config.*。 それらのパスを Git でゲートし、依存関係の互換性を確保するには、 releaseType を使用します — 以下の例は両方を行っています。
参照 ネイティブ互換性 完全なルールとマニュアルの詳細は bundle compatibility 表を参照してください。
前提条件
前提条件- Capgo アプリが登録され、 Capgo API キー が設定されている場合
CAPGO_TOKEN - リアルタイムアップロード (
bundle upload) — ご覧ください CI/CD統合 - Capgo CI/CD環境でネイティブジョブを実行する場合のビルドクレデンシャル — ご覧ください GitHub アクション または 資格情報
- 既存のチャネルが存在し、実行環境と一致している場合 (例えば、
production) - チャネル
metadata戦略により、アップロードはすべて--auto-min-update-version(一時的な):
npx @capgo/cli@latest channel set production com.example.app --disable-auto-update metadataPipelineの動作
Pipelineの動作flowchart TD A[Push / merge] --> B[Install + web build] B --> C["bundle releaseType"] C -->|OTA| D["bundle upload"] C -->|native| E["build request iOS + Android"] E --> F[Store / TestFlight / Play]
- 通常のウェブアセットをビルド
- コミットが
ios/,android/、またはcapacitor.config.*、強制的にネイティブパスを使用 - それ以外の場合は、Capgo
releaseTypeがOTA安全であるかどうかを尋ねる - 、アップロード
OTA、--fail-on-incompatibleと--auto-min-update-version. - もし
native, Capgo を実行し、次に Capgo のマッチング バンドルをアップロードし、--auto-min-update-versionそのチャンネルのネイティブ メタデータが進化するようにする。 その 基準のアップロードを use--fail-on-incompatibleNative + OTA チャンネル ワークフロー を参照してください。 __CAPGO_KEEP_0__ アクション
ワークフロー releaseType:
name: Capgo Release
on: push: branches: [main]
jobs: decide: runs-on: ubuntu-latest outputs: release_type: ${{ steps.verdict.outputs.type }} steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm'
- run: npm ci - run: npm run build
- name: Decide OTA vs native id: verdict env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} run: | BEFORE="${{ github.event.before }}" if [ -z "$BEFORE" ] || [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then BEFORE="$(git rev-parse HEAD~1 2>/dev/null || echo '')" fi if [ -z "$BEFORE" ] || git diff --name-only "$BEFORE" "${{ github.sha }}" \ | grep -qE '^(ios/|android/|capacitor\.config\.)'; then TYPE=native echo "Native path/config changed (or no prior commit) — forcing native" else TYPE=$(npx @capgo/cli@latest bundle releaseType com.example.app --channel production | tr -d '[:space:]') fi echo "type=$TYPE" >> "$GITHUB_OUTPUT" echo "Capgo release type: $TYPE"
live_update: needs: decide if: needs.decide.outputs.release_type == 'OTA' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - run: npm ci - run: npm run build - name: Upload live update env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} run: | npx @capgo/cli@latest bundle upload com.example.app \ --channel production \ --fail-on-incompatible \ --auto-min-update-version
native_build: needs: decide if: needs.decide.outputs.release_type == 'native' runs-on: ubuntu-latest strategy: fail-fast: false matrix: platform: [ios, android] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - run: npm ci - run: npm run build - run: npx cap sync ${{ matrix.platform }} - name: Capgo Build ${{ matrix.platform }} 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 }} 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 ${{ matrix.platform }} \ --build-mode release
native_bundle: needs: [decide, native_build] if: needs.decide.outputs.release_type == 'native' runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v6 with: node-version: '24' cache: 'npm' - run: npm ci - run: npm run build - name: Upload bundle for new native baseline env: CAPGO_TOKEN: ${{ secrets.CAPGO_TOKEN }} run: | # Channel must already be on metadata (see Prerequisites above) npx @capgo/cli@latest bundle upload com.example.app \ --channel production \ --auto-min-update-version置き換え com.example.app と署名シークレットを接続するには、以下の説明に従ってください。 GitHubのCapgoビルドのアクション.
GitLab CI
GitLab CIセクションGitLabは rules パイプラインが作成されたときに評価されるので、ブランチ内にシェル if 1 つのデプロイジョブ (または生成された) ダイナミックの子パイプライン 必要な場合のネイティブマトリックスジョブに分離する):
image: node:24
stages: - build - deploy
variables: APP_ID: com.example.app CHANNEL: production
build_web: stage: build script: - npm ci - npm run build artifacts: paths: - dist/ - node_modules/ expire_in: 1 hour only: - main
deploy: stage: deploy needs: [build_web] script: - | BEFORE="${CI_COMMIT_BEFORE_SHA:-}" if [ -z "$BEFORE" ] || [ "$BEFORE" = "0000000000000000000000000000000000000000" ]; then BEFORE="$(git rev-parse HEAD~1 2>/dev/null || echo '')" fi if [ -z "$BEFORE" ] || git diff --name-only "$BEFORE" "$CI_COMMIT_SHA" \ | grep -qE '^(ios/|android/|capacitor\.config\.)'; then TYPE=native else TYPE=$(npx @capgo/cli@latest bundle releaseType "$APP_ID" --channel "$CHANNEL" | tr -d '[:space:]') fi echo "Capgo release type: $TYPE" if [ "$TYPE" = "OTA" ]; then npx @capgo/cli@latest bundle upload "$APP_ID" \ --channel "$CHANNEL" \ --fail-on-incompatible \ --auto-min-update-version elif [ "$TYPE" = "native" ]; then npx cap sync npx @capgo/cli@latest build request "$APP_ID" --platform ios --build-mode release npx @capgo/cli@latest build request "$APP_ID" --platform android --build-mode release npx @capgo/cli@latest bundle upload "$APP_ID" \ --channel "$CHANNEL" \ --auto-min-update-version else echo "Unexpected release type: $TYPE" >&2 exit 1 fi only: - mainストア CAPGO_TOKEN Capgo ビルド署名変数をマスク/保護されたCI/CD変数として保存
他のCIプラットフォーム
他のCIプラットフォーム同様の3つの手順は、どこでも機能します。
| Step | Command |
|---|---|
| Verdict | npx @capgo/cli@latest bundle releaseType APP_ID --channel production |
| CI-OTAまたはネイティブ | npx @capgo/cli@latest bundle upload APP_ID --channel production --fail-on-incompatible --auto-min-update-version |
| ネイティブパス | npx @capgo/cli@latest build request APP_ID --platform ios (または android) --build-mode release |
プロセスの終了 / 標準出力を、プラットフォームの条件分岐 (または、シェルを単一のジョブに保持する) にマップする ifAzure Pipelines
- — set an output variable from a script step, then use or
condition: eq(variables['releaseType'], 'OTA') - ビットバケット Pipelines —
RELEASE_TYPE=…書き込み$BITBUCKET_PIPELINES_VARIABLES_PATHをoutput-variablesページ/エリア: Live updates product page. 役割: 短い UI ラベルまたはナビゲーションアイテム。 メッセージキー `live_update_dynamic_label_to` (Live Update Dynamic Label To)。condition: state: RELEASE_TYPE == "OTA"、宣言するcondition) - 、そしてブランチ後のステップ —
when(ファイルアーティファクトだけでは動作を制御ifCircleCIwhen - Jenkins (または動的コンフィグ/継続)、ワークスペース値
when { environment name: 'RELEASE_TYPE', value: 'OTA' }
パス フィルタはコスト最適化であり、Capgo チェックの代替ではありません。ドキュメント専用のパスを除外するのではなく、脆弱な許可リストを維持するのではなく、ウェブビルドも依存する可能性があるフレームワークの設定ファイルを除外することをお勧めします。 vite.config.*, tsconfig*.jsonコピーをクリップボード
on: push: branches: [main] paths-ignore: - '**.md' - 'docs/**' - '.github/**'__CAPGO_KEEP_0__ ビルドは署名済みバイナリを生成し、TestFlight / Play に提出できます (詳細は src/ 構成 package.json.
アップロードするマッチングの JS バンドル
「ネイティブ判決後のステップ」セクションのタイトル “CI がネイティブを選択した場合”
- Capgo ビルドは署名されたバイナリを生成し、TestFlight / Play にアップロードできます (詳細は) コピーをクリップボード).
- セクションのタイトル “CI がネイティブを選択した場合”
--auto-min-update-versionメタデータ戦略により、チャネルは新しいネイティブパッケージを記録します — そうでない場合、次のJSのみコミットはまだnative. - ユーザーが新しいバイナリをインストールした後、後続のJavaScriptのみコミットは
OTA再び戻ります。