Skip to content

ネイティブ互換性

Capgo ライブアップデートは、 Capgo アプリのJavaScriptバンドルを即時置き換えますが、 Capgo/Cordovaプラグイン、ネイティブ依存関係、ネイティブプロジェクト構成がコンパイルされたインストール済みバイナリに含まれているため、ネイティブの部分は置き換えられません。新しいバンドルがインストール済みバイナリにないネイティブ __CAPGO_KEEP_1__ を期待している場合、バンドルはネイティブ非互換となります。 __CAPGO_KEEP_0__ は、インストール済みバイナリが持っていないネイティブ __CAPGO_KEEP_1__ を提供できますが、古いネイティブビルドを実行しているデバイスではクラッシュまたは不正動作が発生する可能性があります。 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

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

すべての Capacitor アプリは、2 つの層で配信されます。

  • ユーザーがApp Store / Play Storeからインストールするネイティブバイナリです。__CAPGO_KEEP_0__、ネイティブプラグイン、およびネイティブ構成が含まれます。 users install from the App Store / Play Store. It contains Capacitor, your native plugins, and native configuration.
  • JavaScript バンドル JavaScript bundle (あなたのウェブアプリ) が Capgo でオンデマンドで更新できるようにする。

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

bundleをアップロードしたり、手動でチェックしたりすると、Capgoは ローカルプロジェクト内のnativeパッケージ (あなたのCapacitor/Cordovaプラグインとそのバージョン)を bundleで現在ライブチャンネルに記録されているnativeパッケージ:

  • と比較します 一致すると、変更はJavaScriptのみで.
  • オンデマンドで安全に配信できます プラグインが追加、削除、またはバージョンが変更された場合、bundleはnative-incompatibleです — ユーザーが新しいネイティブバイナリをインストールした後のみに有効になる変更はすべて。

CLIを確認してください。

CLIのセクション
ターミナル画面
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

リリースパイプラインをこの条件でゲートする: これが印刷されたときにライブアップデートを送信し、印刷されたときにネイティブビルドをトリガーする OTAユーザーにとって不互換なアップデートとは何ですか native.

セクション: ユーザーにとって不互換なアップデートとは何ですか

注意

Prevent incompatible deliveries Prevent incompatible deliveries, 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エラーだけです notifyAppReady() 実行される前に投げられたJavaScriptエラーだけをキャッチできるので、互換性のないネイティブcodeを配布することはできません。実行時には、またはネイティブでクラッシュする可能性がある、後でクラッシュする可能性のある不一致は、自動ロールバックでは検出されません。

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

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

実際の修正は、Publish a new native build (the real fix) です。

Publish a new native build (the real fix)

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

既存のチャネルに互換性のないバンドルがすでに活性化されている場合、ネイティブビルドがリリースされるまで、チャネルを最後の互換性のあるビルドに戻して、配信を停止する。

既存のチャネルに互換性のないバンドルがすでに活性化されている場合、ネイティブビルドがリリースされるまで、チャネルを最後の互換性のあるビルドに戻して、配信を停止する。

See ロールバック.

両方の補完的なガード、実際にはネイティブパッケージを検査します:

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

フラグをあなたの bundle upload ステップに追加します。 バンドルのネイティブパッケージがチャンネルの現在のライブバージョンと一致しない場合、 アップロードはゼロ以外のエラーで失敗し、配信は行われず — したがって、パイプラインは静かに公開されるOTAアップデートを阻止します: ターミナル画面

クリップボードにコピー
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.)

ネイティブ版の配信 — metadata + --auto-min-update-version

あなたが 実行する ネイティブ版のビルドとバンドルを一緒に配信する場合、チャネルを戦略に設定し、__CAPGO_KEEP_0__でアップロードする。 metadata __CAPGO_KEEP_0__はアップロードごとに互換性チェックを実行し、バンドルが新しいネイティブ__CAPGO_KEEP_1__が必要な場合、対応するネイティブ版がインストールされていないデバイスがアップデートを受け取らないようにアップデートフロアを上げる: --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:

コピー
# 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

See バージョン対象設定の詳細は、 Version Targeting

Related

If you are using Native Compatibility to keep live updates safe, connect it with Version Targeting to route bundles by native version, ロールバック 不互換のバンドルが配信されたときに復元する 更新タイプ チャンネルバージョンブロッキングを理解し、 Capgo CLI バンドル参照 互換性とリリースタイプのコマンドのために。