コンテンツに進む

ネイティブ互換性

Capgo live updateは、 JavaScriptバンドル 即時置き換えますが、 ネイティブ part of your app — the Capacitor/Cordova plugins, native dependencies, and native project configuration that are compiled into the installed binary. When a new bundle expects native code that the installed binary doesn’t have, the bundle is __CAPGO_KEEP_0__: Capgo は古いネイティブビルドを実行しているデバイスではクラッシュまたは不正動作する可能性があります。

Capgoは、Capgoがネイティブの互換性を検出する方法、ユーザーにとって不互換な更新とは何か、ネイティブの変更を安全に配信する方法について説明します。

OTA またはネイティブ?

セクション:TLDR: OTA or native?

Capgoは、生成されたWebビルドフォルダからファイルを送信できます。変更がHTML、CSS、JavaScript、資産、またはその出力に含まれる純粋なJavaScriptパッケージに影響する場合、live updateとして送信してください。

ネイティブアプリリリースを使用する必要がある変更は、 capacitor.config.ts、Capacitorの構成、ネイティブプラグインまたは依存関係、Capacitor自体、またはiOS/Androidプロジェクトファイルの更新です。実用的なチェック: 変更がネイティブプロジェクトを更新する必要がある場合、 npx cap sync または npx cap copy 変更

ChangeCapgo OTAで配信するかcontext
HTML, CSS, アプリケーション JavaScript, 画像, フォント, その他の Web ビルド アセットはいCapgo のソリューション マーケティング ページ
はいはいWeb バンドルから実行時に読み込まれます。
capacitor.config.ts changesNoCapacitor 設定はビルド時にネイティブアプリに読み込まれます。
Capacitor/コルダバプラグインの追加、削除、またはアップグレードNocode の設定はビルド時にネイティブ アプリに読み込まれます。
iOSまたはAndroidプロジェクトファイルの変更No既存のユーザーは、ストアから新しいバイナリを取得する必要があります。

クライアントプラグインのスタック

セクション「クライアントプラグインのスタック」

Capgoは各ハイブリッドランタイム用に専用のアップデートクライアントを配布しています:

プラグイン使用する場合
@capgo/capacitor-updaterCapacitorのiOS/Androidアプリ
@capgo/cordova-updaterCordova iOS 7+ / Android 13+ アプリ
@capgo/electron-updaterElectronデスクトップアプリ

クライアントプラグインに関係なく、ネイティブの互換性チェックは実行されます。これは、インストール済みのバイナリとバンドルの記録されたネイティブ依存関係を比較することです。

ネイティブ互換性の重要性

「ネイティブ互換性の重要性」

Every Capacitor app ships in two layers:

  • ライブアップデート ネイティブバイナリ App Store / Play Store からユーザーがインストールします。 それには、Capacitor、ユーザーのネイティブ プラグイン、およびネイティブの設定が含まれます。
  • ライブアップデート JavaScript バンドル (あなたのウェブアプリ) が Capgo をオンエアで更新できるものです。

live updateはJavaScript層のみを交換します。新しいJavaScriptがネイティブプラグインまたはAPIを呼び出す場合、それがインストール済みバイナリに組み込まれていない場合、実行時には呼び出しは失敗し、エラーが発生したり機能が静かに破壊されたりします。簡単に言えば、Capgoはネイティブcodeを更新できず、古いネイティブビルドを実行しているデバイスでは、codeの新しいネイティブビルドに対応したバンドルを安全に実行できません。

How Capgo detects compatibility

「Capgoの互換性検出方法」

アップロードしたバンドル — または、手動でチェックを実行する — Capgo は、 ローカルプロジェクト内のネイティブパッケージ Capacitor/Cordova プラグインとそのバージョン バンドルに記録されている現在のチャンネル上のネイティブパッケージ:

  • 一致する場合、変更はJavaScriptのみで 安全にオーバー・ザ・エアで配信できます.
  • プラグインが追加された、削除された、またはバージョンが変更された場合、バンドルは ネイティブ不相応 — その変更は、ユーザーが新しいネイティブバイナリをインストールするまで、有効になりません。
ターミナルウィンドウ
bunx @capgo/cli@latest bundle compatibility com.example.app --channel production

CLIは、各ネイティブパッケージのローカルバージョン、チャンネル上のバージョン、ステータスを表す表を出力します:

Package Local Remote Status
@capacitor/core 6.1.2 6.1.2 ✅
@capacitor/share 6.0.0 6.0.0 ✅
@capacitor/camera 6.1.0 — ❌ not in the live bundle

マシンが読める判定結果を取得(CI)

CIで判定結果を取得する

パイプライン用 bundle releaseType 単語に縮小します:

ターミナルウィンドウ
bunx @capgo/cli@latest bundle releaseType com.example.app --channel production
# → OTA safe to ship as a live update
# → native needs a new app-store build

リリースパイプラインをこの条件でゲートする: live update を出力するときに live update を出荷する OTA, native ビルドをトリガーするときに表示されます。 native.

ネイティブ ビルドをトリガーするには、__CAPGO_KEEP_0__ を出力するときに __CAPGO_KEEP_0__ を出荷します

不互換なアップデートはユーザーにとって何を意味するか

古いネイティブバイナリを実行しているデバイスでは、 __CAPGO_KEEP_0__ が欠けている場合、クラッシュや機能が破損する可能性があります。 — これは、更新がダウンロードされ適用された「成功」でしたが、クラッシュや機能の破損につながる可能性があります。 これは、__CAPGO_KEEP_1__ がライブで配信されていても、既存のユーザーにとってアプリを破損させる可能性があるためです。 また、__CAPGO_KEEP_2__ は、非互換のバンドルがライブになったときに警告を表示することができます。, the missing native code can cause crashes or broken features — even though the update downloaded and applied “successfully.” This is why a live update can be live and delivered yet still break the app for existing users, and why Capgo can warn you when an incompatible bundle goes live.

Capgo’s は、実行される前にスローされる JavaScript エラーをキャッチできますが、ネイティブの __CAPGO_KEEP_0__ が互換性のあるものであることを保証することはできません。 — これは、後でクラッシュしたり、ネイティブでクラッシュしたりする可能性のある不一致を逃すことができます。 __CAPGO_KEEP_1__ notifyAppReady() nativeアプリケーションが動作するが、互換性のあるnative codeを配信する代替手段ではない。

ネイティブの変更を安全に配信する方法

「ネイティブの変更を安全に配信する方法」

新しいネイティブのビルドを公開 (実際の修正)

「新しいネイティブのビUILDを公開 (実際の修正)」

バンドルが新しいネイティブ code を必要とする場合、App Store / Play Store に新しいバイナリを提出 (または Capgo Cloud Build で再構築) してください。ユーザーがバイナリを更新すると、バンドルのネイティブ依存関係が整い、live update が正しく実行されます。

既存のインコンプレティブ バンドルがすでにライブになっている場合にロールバック

「既存のインコンプレティブ バンドルがすでにライブになっている場合にロールバック」

チャンネルにすでにアクティブなインコンプレティブ バンドルが存在する場合、ネイティブ ビルドがリリースされるまで、チャンネルを最後の互換性のあるビルドに戻して、インコンプレティブ バンドルを配信しないようにします。詳しくは ロールバック.

互換性のない配信を防ぐ

「互換性のない配信を防ぐ」

2 つの補完的なガードがあります。どちらも実際にはネイティブ パッケージを検査します:

CI上でアップロードを失敗 — --fail-on-incompatible

旗をあなたの bundle upload ステップに追加します。 バンドルのネイティブパッケージがチャンネルの現在のライブバージョンと一致しない場合、アップロードはゼロ以外のエラーで失敗し、OTAアップデートがユーザーがネイティブビルドをインストールするまで有効になることはありません: ターミナルウィンドウ コピー

変更なしでアップロードが通るケース — 例えば、新しいチャンネルやリモートメタデータがない場合 — 通過します。 インタラクティブターミナルでは、__CAPGO_KEEP_0__ ビルダーがネイティブビルドフローを提示します; 拒否すると失敗します。 (これは
bunx @capgo/cli@latest bundle upload --channel production --fail-on-incompatible

Compatible uploads — and cases where the check can’t run (a new channel, or no remote metadata) — pass through unchanged. In an interactive terminal it offers the Capgo Builder native-build flow instead; declining fails. (Can’t be combined with --ignore-metadata-check.)

GitHub metadata + --auto-min-update-version

Capgo code API metadata SDK --auto-min-update-version. Capgo runs the compatibility check on every upload and, when a bundle needs new native code, raises the update floor so devices that haven’t installed the matching native build don’t receive it:

npm
# one-time: switch the channel to the metadata strategy
bunx @capgo/cli@latest channel set production com.example.app --disable-auto-update metadata
# from then on, Capgo sets the floor automatically on every upload
bunx @capgo/cli@latest bundle upload --channel production --auto-min-update-version

、 を確認します。 「

」を参照してください。

ネイティブ互換性から続ける

セクション: ネイティブ互換性から続ける

ネイティブ互換性を使用している場合 ネイティブ互換性 Capgoのソリューションマーケティングページの「バージョン対象設定」 バージョン対象設定 ネイティブのバージョンに基づいてバンドルをルーティングする ロールバック 不互換のバンドルが配信されたときに復元する アップデートの種類 Live Update Capgo CLI バンドル参照 Capacitor