Zum Inhalt springen

Native Compatibility

Ein Capgo Live-Update ersetzt die JavaScript-Bundle Ihres Apps. Ein __CAPGO_KEEP_0__ live update ersetzt die JavaScript-Bundle Ihres Apps. unmittelbar, aber es kann die native Komponente deiner App nicht ändern — die __CAPGO_KEEP_0__/Cordova-Plugins, native Abhängigkeiten und native Projekt-Konfiguration, die in die installierte Binärdatei kompiliert werden. Wenn eine neue Bundle native __CAPGO_KEEP_1__ erwartet, die die installierte Binärdatei nicht hat, ist das Bundle als inkompatibel markiert. native Ein Teil deiner App — die Capacitor/Cordova-Plugins, native Abhängigkeiten und native Projekt-Konfiguration, die in die installierte Binärdatei kompiliert werden. Wenn eine neue Bundle native code erwartet, die die installierte Binärdatei nicht hat, ist das Bundle als inkompatibel markiert. native-incompatible: Capgo kann es immer noch liefern, aber es kann auf Geräten, die noch die ältere native Build laufen, abstürzen oder sich falsch verhalten.

Diese Seite erklärt, wie Capgo native Kompatibilität erkennt, was eine inkompatible Aktualisierung für deine Benutzer bedeutet und wie du native Änderungen sicher verschicken kannst.

Capgo kann Dateien aus deinem generierten Web-Build-Ordner senden. Wenn die Änderung nur auf HTML, CSS, JavaScript, Assets oder reinen JavaScript-Paketen, die in diesem Output gebündelt sind, Einfluss hat, verschicke sie als Live-Update.

Wenn eine Änderung eine native App aktualisiert capacitor.config.tsPlugin-Konfiguration in Capacitor Konfiguration, native Plugins oder Abhängigkeiten, Capacitor selbst oder iOS/Android-Projektdateien gespeichert. npx cap sync Ein praktischer Check: Wenn die Änderung die native App über npx cap copy oder

vorher auf installierten Geräten verwenden kann, behandeln Sie es als native.Ship with Capgo OTA?Mit __CAPGO_KEEP_0__ OTA liefern?
WozuHTML, CSS, App-JavaScript, Bilder, Schriftarten und andere Web-Build-AssetsJa
Sie werden zum Laufzeit aus dem Web-Bundle geladen.Rein-JavaScript-Paket-Änderungen in Ihrem Web-Ausgang gebündelt werden.The generierte JavaScript ist Teil der Web-Bundle.
capacitor.config.ts ÄnderungenNeinCapacitor-Konfiguration wird bei der Zeit der native App gelesen.
Hinzufügen, entfernen oder Capacitor/Cordova-Plugins aktualisierenNeinDie installierte native Binärdatei muss die passende native code enthalten.
Änderungen an iOS- oder Android-ProjektdateienNeinBestehende Benutzer benötigen eine neue Binärdatei aus den Stores.

Capgo stellt für jeden hybriden Runtime einen dedizierten Updater-Client bereit:

PluginVerwenden Sie wenn
@capgo/capacitor-updaterCapacitor-iOS/Android-Anwendungen
@capgo/cordova-updaterCordova iOS 7+ / Android 13+ Apps
@capgo/electron-updaterElektron-Desktop-Anwendungen

Native-Kompatibilitätsprüfungen gelten unabhängig vom Client-Plugin – sie vergleichen die im Bundle aufgezeichneten nativen Abhängigkeiten mit dem installierten Binärdatei.

Jede Capacitor-Anwendung wird in zwei Schichten geliefert:

  • Der nativ binäre Benutzer installieren es aus dem App Store / Play Store. Es enthält Capacitor, Ihre native Plugins und die native Konfiguration.
  • Die JavaScript-Bundle (Ihre Web-Anwendung) das Capgo über die Luft aktualisieren kann.

Ein Live-Update ersetzt nur die JavaScript-Schicht. Wenn das neue JavaScript eine native Komponente oder API aufruft, die nicht in der installierten Binärdatei kompiliert wurde, schlägt die Aufrufanfrage bei der Ausführung fehl – was das Programm zum Absturz bringen oder stillschweigend eine Funktion brechen kann. Kurz gesagt: Capgo kann native code nicht aktualisieren, also kann ein Gerät, das die alte native Version läuft, nicht sicher eine Bundle ausführen, die gegen neue native code erstellt wurde.

Wenn Sie ein Bundle hochladen – oder die Überprüfung manuell durchführen – vergleicht Capgo die native Pakete im lokalen Projekt (Ihre Capacitor/Cordova-Plugins und ihre Versionen) mit den native Paketen, die für das Bundle aktuell im Kanal:

  • registriert sind. Wenn sie übereinstimmen, ist die Änderung nur auf JavaScript-Basis sicher zum Luftübertrag über die Luft zu schicken.
  • Wenn ein Plugin hinzugefügt, entfernt oder eine Versionsänderung vorgenommen wurde, ist das Bundle nicht für native Geräte geeignet — diese Änderungen wirken sich erst dann aus, wenn die Benutzer ein neues natives Binärprogramm installieren.
Terminalfenster
bunx @capgo/cli@latest bundle compatibility com.example.app --channel production

Die CLI druckt eine Tabelle jedes native Pakets mit seiner lokalen Version, der Version live auf dem Kanal und einem Status:

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

Für Pipelines bundle releaseType kollabiert die Überprüfung in ein einzelnes Wort:

Terminalfenster
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

Sperren Sie Ihre Releasepipeline auf diese: Verschicken Sie ein Live-Update, wenn es druckt OTA, und lösen Sie ein natives Build, wenn es druckt native.

Auf Geräten, die noch immer mit ältere native Binärdatei, das fehlende native code kann zu Crashes oder gebrochenen Funktionen führen – trotzdem wurde die Aktualisierung heruntergeladen und angewendet „mit Erfolg“. Dies ist der Grund, warum eine Live-Update live und geliefert werden kann, aber dennoch die App für bestehende Nutzer kaputt machen kann, und warum Capgo Sie warnen kann, wenn ein inkompatibles Bundle live geht.

Capgo's Automatische Rollback-Funktion Kann einen vor dem Ausführen geworfenen JavaScript-Fehler fangen notifyAppReady() läuft, aber es ist kein Ersatz für die Lieferung von kompatiblen nativen code — ein Missmatch, das später abstürzt, oder abstürzt, kann an ihm vorbeikommen.

Wie man native Änderungen sicher bereitstellt

Wie man native Änderungen sicher bereitstellt

Ein neues natives Build veröffentlichen (die wahre Lösung)

Abschnitt mit dem Titel “Ein neues natives Build veröffentlichen (die wahre Lösung)”

Wenn eine Bundle eine neue native code benötigt, müssen Sie ein neues Binärdatei zum App Store / Play Store hochladen (oder mit Capgo Cloud Build neu erstellen). Sobald die Benutzer die Binärdatei aktualisieren, passen sich die native Abhängigkeiten der Bundle an und die Live-Update-Funktion funktioniert wie erwartet.

Wenn bereits ein inkompatibles Bundle live ist, rückgängig machen

Abschnitt mit dem Titel “Wenn bereits ein inkompatibles Bundle live ist, rückgängig machen”

Wenn bereits ein inkompatibles Bundle auf einem Kanal aktiv ist, kehre den Kanal zur letzten kompatiblen Version zurück, um es bis zum Erscheinen des nativen Builds nicht zu liefern. Siehe Rücksetzungen.

Zwei komplementäre Wächter, die beide tatsächlich Ihre native Pakete überprüfen:

Fehlermeldung im CI — --fail-on-incompatible

Fügen Sie die Flagge Ihrem bundle upload Schritt. Wenn die Pakete des Bundles nicht mit der derzeit liveen Version des Kanals übereinstimmen, schlägt die Upload- mit einer nicht-Null-Ausgabe fehl und wird nichts geliefert — also hält Ihre Pipeline Sie davon ab, ein OTA-Update stillschweigend zu veröffentlichen, das erst nach dem Installieren eines nativen Builds wirksam werden kann: — fügen Sie die Flagge Ihrem

Terminalfenster
bunx @capgo/cli@latest bundle upload --channel production --fail-on-incompatible

Kompatible Uploads — und Fälle, in denen die Überprüfung nicht durchgeführt werden kann (ein neuer Kanal oder keine Remote-Metadaten) — werden unverändert weitergeleitet. In einem interaktiven Terminal bietet es den Capgo-Builder die native-Build-Flow an; Ablehnung scheitert. (Kann nicht mit --ignore-metadata-check.)

Lieferung durch native Version — metadata + --auto-min-update-version

Wenn Sie den native Build und das Bundle zusammen schicken, legen Sie den Kanal auf die metadata Strategie und laden Sie mit --auto-min-update-version. Capgo führt die Kompatibilitätsprüfung auf jedem Upload durch und, wenn ein Bundle neue native code benötigt, hebt es den Update-Fußboden an, damit Geräte, die noch nicht die entsprechende native Build installiert haben, es nicht erhalten:

Terminalfenster
# 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

Versionzielung für die vollständige Liste der Zielmöglichkeiten. Zugehörige

Zugehörige Sektion mit dem Titel “Zugehörige”

Fortsetzung von Native Kompatibilität

translations für die Native-Kompatibilität

Wenn Sie Native-Kompatibilität benutzen, um live Updates sicher zu halten, verbinden Sie es mit Version-Zielsetzung um Bundles nach nativer Version zu routen, Rückgänge um wiederherzustellen, wenn ein inkompatibles Bundle abgesandt wird, Update-Typen um den Kanalversionen zu verstehen, die Blockierung und das Capgo CLI Bundle-Bezug für die Kompatibilität und die releaseType-Befehle.