Teams usually choose one of three approaches for mobile environments:
- Two app IDs (production + pre-production)
- One app ID + dynamic runtime environment switching
- One app ID + Capgo channels
最初の2つは機能しますが、長期的な摩擦を生み出します。実際のチームでは、Capgo チャネル モデルは通常、最も綺麗です。
重複したアプリ ID がノイズになる理由
使用 com.myapp そして com.myapp.beta 簡単に思えるが、すぐに複製が発生します:
- 2 つのリリース Pipelines
- 2 つのプッシュ ID、ディープ リンク、およびエンタイトルメント マッピング
- 2 つの分析とクラッシュ ID
- 環境間で異なる構成と一貫した動作
アプリ ID + ランタイム Switch パターンは、通常、起動時に環境変数またはフラグを読み取り、API、キー、および更新動作をダイナミックに再設定します。
アプリ ID が 1 つ + ランタイム Switch パターンは、通常、起動時に環境変数またはフラグを読み取り、API、キー、および更新動作をダイナミックに再設定します。
アプリ ID が 1 つ + ランタイム Switch パターンは、通常、起動時に環境変数またはフラグを読み取り、API、キー、および更新動作をダイナミックに再設定します。
これは次まで機能します:
- QAが予定されたフローを回避するようになったのは、構成状態が古いためです。
- 誰かが実稼働で間違ったエンドポイントを使用した場合
- 環境の変化が再現が難しいバグを引き起こす
- ユーザー端末で「このバイナリが使用している構成バージョンは何ですか?」というデバッグが必要になります。
これらの複雑さはリリースごとに増加し、チームの速度が低下するのはここです。
The Capgo way: one app ID, many channels
Capgo makes environment control explicit through channels:
- App Store/Playで1つの実稼働アプリIDを維持します。
- 「シェル」のためのネイティブバイナリを1つに配信します (ネイティブの変更が真の再構築を必要とするまで)。
- チャネルによってではなく、重複したアプリのIDによって動作をルーティングします。
実際には、これは次のことを意味します:
production: 全てのユーザーstaging: 内部のQAとリリース候補beta: 招待されたテスターhotfix: 緊急パッチトラック
Your TestFlight/Play 内部テストアプリは、
__CAPGO_KEEP_0__ でJS/CSS/アセットの更新を繰り返し行うことができます。
新しいネイティブアプリを公開することなく、
アプリを永遠に保持することができます。 staging forever.
You do JS/CSS/asset updates there repeatedly through Capgo without publishing a new native app.
1) ネイティブリリースベースライン
ネイティブバイナリは、多くのJSの反復で同じままです:
実際にネイティブの表面領域が変更された場合にのみ、 ネイティブバイナリを再構築します。
bun run build
bunx cap sync
# generate Xcode/Android Studio archives as usual
2) 環境ごとに専用のチャネルを使用する
環境ごとにチャネルを使用して更新を公開する
Publish updates with channels:
bun run build
bunx @capgo/cli deploy --channel staging
QA環境でテスト、問題を修正し、次にプロモート:
bunx @capgo/cli promote vX.Y.Z --channel production
明示的なバージョニングを好む場合:
bunx @capgo/cli deploy vX.Y.Z --channel staging
bunx @capgo/cli promote vX.Y.Z --channel production
3) TestFlightを「常にプレプロダクション」に設定:
iOSワークフローでは、TestFlightビルドはプレプロダクションアップデートと関連付けられる:
- JSの変更ごとに頻繁にネイティブのサブミットは必要ない。
- QAは、ステージングチャンネル経由で近似的な生産環境でcodeを検証する。
- プロダクションユーザーは、プロモートされた生産チャンネルパッケージのみを受信する。
4) 制御されたワークフローでのみチャンネル切り替えを使用:
高度なチーム向けに、QA/管理者ユーザー向けに制御されたチャンネル切り替えを公開する:
import { CapacitorUpdater } from '@capgo/capacitor-updater';
await CapacitorUpdater.setChannel({
channel: 'staging',
triggerAutoUpdate: true
});
これはオプションです。多くのチームはダッシュボードからチャンネル割り当てを使用し、すべての顧客ではなく内部ユーザー向けにのみチャンネルを切り替えます。
運用チェックリスト:
- 1つのアプリIDのみ(生産/ステージングIDの重複なし)
- 基本的なネイティブビルドパイプライン
- チャネルマッピングドキュメント (
staging,beta,production,hotfix) - CI/CDでのプロモーションパスが強制されます
- ネイティブのリビルドは、実際のネイティブの変更のみ
- ロールバックは定期的にテストされています
実用的な利点
このアプローチは、環境の漂流を排除し、ビルドの混乱を減らし、修正のスピードを向上させる:
- QAはリアルなバイナリを取得します(「ステージングアプリ」の偽の「アイデンティティ」なし)、
- テストフライトのパスは安定しています
- チームは「2つのアプリIDの負債」を避ける
- あなたはCapgoで迅速に多くのJSのみの修正をプッシュできます。
最終的な結果は、より単純な統治: 少ないアーティファクト、きれいなテレメトリ、リリースオペレーションの驚きの減少
Capgo 環境のベストプラクティス: 1 つのモバイル アプリ ID を使用したステージング
あなたは __CAPGO_KEEP_0__ 環境のベストプラクティス: 1 つのモバイル アプリ ID を使用したステージングを使用している場合 Capgo 環境のベストプラクティス: 1 つのモバイル アプリ ID を使用したステージング チャンネル ルーティングとステージド ロールアウトを計画するには、Cloudflare などを接続する必要があります。 チャンネル チャンネル チャンネル チャンネル ベータ テスト ソリューション ベータ テスト ソリューション ベータ テスト ソリューション ベータ テスト ソリューション バージョン対象化ソリューション バージョン対象化ソリューション用の製品ワークフロー