Saltare al contenuto

Compatibilità nativa

Un aggiornamento live Capgo sostituisce il pacchetto JavaScript dell'applicazione Include installazione, sincronizzazione e la guida markdown della fonte. istantaneamente, ma non può cambiare la nativo 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 incompatibile con il nativo: Capgo può ancora consegnarlo, ma potrebbe bloccarsi o comportarsi in modo anomalo sui dispositivi che ancora eseguono la versione nativa più vecchia.

Questa pagina spiega come Capgo rileva la compatibilità nativa, cosa significa un aggiornamento incompatibile per i tuoi utenti e come inviare cambiamenti nativi in modo sicuro.

Capgo può inviare file dal tuo cartello di output generato web. Se il cambiamento riguarda solo HTML, CSS, JavaScript, asset o pacchetti pure-JavaScript inclusi in quel output, invialo come aggiornamento in tempo reale.

Utilizza una versione di app nativa quando un cambiamento aggiorna capacitor.config.tsla configurazione del plugin archiviata in Capacitor config, plugin nativi o dipendenze, Capacitor stesso, o file del progetto iOS/Android. npx cap sync Una verifica pratica: se il cambiamento deve aggiornare il progetto nativo attraverso npx cap copy o

prima che i dispositivi installati possano utilizzarlo, trattalo come nativo.Ship with Capgo OTA?Consegnare con __CAPGO_KEEP_0__ OTA?
PerchéHTML, CSS, app JavaScript, immagini, font e altri asset di costruzione web
Sono caricati dal bundle web in esecuzione.Le modifiche al pacchetto Pure-JavaScript incorporate nel tuo output webIl JavaScript generato fa parte del bundle web.
capacitor.config.ts ModificheNoIl Capacitor config non viene letto nell'app nativa al momento della compilazione.
Aggiungere, rimuovere o aggiornare Capacitor/Cordova pluginNoIl binario nativo installato deve contenere il code nativo corrispondente.
Modifiche al file di progetto iOS o AndroidNoGli utenti esistenti hanno bisogno di un nuovo binario dai negozi.

Capgo dispiega client aggiornatori dedicati per ogni runtime ibrido:

PluginUsa quando
@capgo/capacitor-updaterCapacitor app iOS/Android
@capgo/cordova-updaterApplicazioni iOS 7+ / Android 13+ di Cordova
@capgo/electron-updaterApplicazioni desktop di Electron

Verifiche di compatibilità native si applicano comunque indipendentemente dal plugin del client — confrontano le dipendenze native registrate del pacchetto con il binario installato.

Ogni app Capacitor parte in due strati:

  • Il binario nativo gli utenti installano dall'App Store / Play Store. Contiene Capacitor, i tuoi plugin nativi, e la configurazione nativa.
  • La bundle JavaScript (la tua app web) che Capgo può aggiornare in tempo reale.

Un aggiornamento in tempo reale sostituisce solo il layer JavaScript. Se il nuovo JavaScript chiama un plugin nativo o API che non è compilato nella versione binaria installata, la chiamata fallisce all'esecuzione — il che può far crashare l'applicazione o rompere silenziosamente una funzionalità. In poche parole: Capgo non può aggiornare i code nativi, quindi un dispositivo che esegue la versione binaria nativa vecchia non può eseguire in sicurezza un bundle costruito contro nuovi code nativi.

Quando carichi un bundle — o esegui la verifica manualmente — Capgo confronta i pacchetti nativi in your local project (your Capacitor/Cordova plugins and their versions) against the native packages recorded for the bundle attualmente in canale:

  • Se corrispondono, la modifica è solo JavaScript e sicuro da spedire in rete.
  • Se è stato aggiunto, eliminato o modificato il versione di un plugin, il pacchetto è incompatibile nativo — tali modifiche hanno effetto solo quando gli utenti installano un nuovo binario nativo.
Fermata di sistema
bunx @capgo/cli@latest bundle compatibility com.example.app --channel production

La CLI stampa una tabella di ogni pacchetto nativo con la sua versione locale, la versione in vita sul canale e uno stato:

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

Per pipeline, bundle releaseType collapsa il controllo in una sola parola:

Finestra del terminale
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

Blocca il tuo pipeline di rilascio su questo: invia un aggiornamento live quando lo stampa OTAe attiva un build nativo quando lo stampa native.

What significa un aggiornamento incompatibile per i tuoi utenti

Sottosezione intitolata “What significa un aggiornamento incompatibile per i tuoi utenti”

On dispositivi ancora in esecuzione con il binario nativo più vecchio, la mancanza di __CAPGO_KEEP_0__ può causare crash o funzionalità rotte — anche se l'aggiornamento è stato scaricato e applicato con successo. Questo è il motivo per cui un aggiornamento live può essere live e consegnato, ma ancora rovinare l'app per gli utenti esistenti, e per cui __CAPGO_KEEP_1__ può avvertirti quando un pacchetto incompatibile va live. __CAPGO_KEEP_0__’s, 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 esegua, ma non è un sostituto per l'invio di un __CAPGO_KEEP_0__ nativo compatibile — un mismatch che causa un crash successivo, o un crash nativo, può sfuggire a esso. Come inviare modifiche native in modo sicuro notifyAppReady() runs, but it isn’t a substitute for shipping compatible native code — a mismatch that crashes later, or crashes natively, can slip past it.

Publica una nuova versione binaria nativa (la vera soluzione)

Sezione intitolata “Publica una nuova versione binaria nativa (la vera soluzione)”

Quando un pacchetto richiede un nuovo __CAPGO_KEEP_0__ nativo, costruisci e invia una nuova versione binaria sullo Store App / Play (o ricostruisci con __CAPGO_KEEP_1__ Cloud Build). Una volta che gli utenti aggiornano la versione binaria, le dipendenze native del pacchetto si allineano e l'aggiornamento live funziona correttamente.

Section titled “How to ship native changes safely”

When a bundle needs new native code, build and submit a new binary to the App Store / Play Store (or rebuild with Capgo Cloud Build). Once users update the binary, the bundle’s native dependencies line up and the live update runs correctly.

Ritorna indietro se un pacchetto incompatibile è già in linea

Sezione intitolata “Ritorna indietro se un pacchetto incompatibile è già in linea”

Se un pacchetto incompatibile è già attivo su un canale, ripristina il canale alla versione compatibile più recente per fermare la sua distribuzione fino a quando non è disponibile la versione nativa. Vedi Ripristini.

Due guardiani complementari, entrambi dei quali effettuano effettivamente l'ispezione dei tuoi pacchetti nativi:

Fallisci l'upload in CI — --fail-on-incompatible

Aggiungi la flag alla tua bundle upload passo. Se i pacchetti nativi del bundle non corrispondono alla versione attualmente in linea del canale, l'upload fallisce con un codice di uscita non zero e nulla viene spedito — quindi il tuo pipeline ti impedisce di pubblicare in modo silenzioso un aggiornamento OTA che non può avere effetto fino a quando gli utenti non installano una versione nativa:

Finestra del terminale
bunx @capgo/cli@latest bundle upload --channel production --fail-on-incompatible

Le caricature compatibili — e i casi in cui il controllo non può essere eseguito (un nuovo canale, o nessuna metadata remota) — passano invariati. In un terminale interattivo offre il flusso di costruzione nativa del Capgo Builder al posto; rifiutare fallisce. (Non può essere combinato con --ignore-metadata-check.)

La consegna della porta da versione nativa — metadata + --auto-min-update-version

Quando sei spedisce il costruito nativo e il pacchetto insieme, metti il canale sul metadata e carica con --auto-min-update-version. Capgo esegue il controllo di compatibilità su ogni caricamento e, quando un pacchetto ha bisogno di nuovi code nativi, innalza il livello di aggiornamento affinché i dispositivi che non hanno installato il costruito nativo corrispondente non lo ricevano:

Finestra del terminale
# 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

Version Targeting per l'intero set di opzioni di targeting. Sottosezione intitolata “Relazionato”

Version-number rules like

Se stai utilizzando Compatibilità nativa per mantenere aggiornate in sicurezza, connettila con Target di versione per indirizzare i bundle in base alla versione nativa, Rollback per recuperare quando un bundle incompatibile viene distribuito, Tipi di aggiornamento per comprendere il blocco di versione del canale, e il Capgo CLI riferimento del bundle per le compatibilità e i comandi di rilascio.