Saltare al contenuto

Compatibilità nativa

Una Capgo live update sostituisce la tua app' pacchetto JavaScript istantemente, ma non può cambiare il native 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 nativo: Capgo può ancora consegnarlo, ma potrebbe bloccarsi o comportarsi in modo anomalo su 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 folder di output web generato. Se il cambiamento influisce solo su HTML, CSS, JavaScript, asset o pacchetti di JavaScript puri inclusi in quel output, invialo come live update.

Usa un rilascio di app nativa quando un cambiamento aggiorna capacitor.config.ts, la configurazione del plugin memorizzata in Capacitor config, plugin nativi o dipendenze, Capacitor stesso o file del progetto iOS/Android. Un controllo pratico: se il cambiamento deve aggiornare il progetto nativo attraverso npx cap sync o npx cap copy prima di installare i dispositivi possono utilizzarlo come nativo.

CambiaConsegnare con Capgo OTA?Perché
HTML, CSS, JavaScript dell'applicazione, immagini, font e altri asset di costruzione webSìSono caricati dal bundle web in esecuzione.
Modifiche al pacchetto JavaScript puro raccolte nella tua output webSìIl JavaScript generato fa parte del bundle web.
capacitor.config.ts Le modificheNoCapacitor configura la applicazione nativa al momento della compilazione.
Aggiungere, rimuovere o aggiornare i plugin Capacitor / CordovaNoIl binario nativo installato deve contenere il code nativo corrispondente.
Modifiche ai file del progetto iOS o AndroidNoGli utenti esistenti hanno bisogno di un nuovo binario dai negozi.

Capgo fornisce client di aggiornamento dedicati per ogni runtime ibrido:

PluginUsare quando
@capgo/capacitor-updaterCapacitor app iOS/Android
@capgo/cordova-updaterCordova app iOS 7+ / Android 13+
@capgo/electron-updaterApp Electron desktop

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

Ogni Capacitor app viene distribuita in due layer:

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

Un live update sostituisce solo il layer JavaScript. Se il nuovo JavaScript chiama un plugin nativo o API che non è stato compilato nella versione binaria installata, la chiamata fallisce all'esecuzione — il che può far crashare l'app 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 pacchetto costruito contro nuovi code nativi.

Quando carichi un pacchetto — o esegui la verifica manualmente — Capgo confronta i pacchetti nativi nel tuo progetto locale (i tuoi Capacitor/Cordova plugin e le loro versioni) con i pacchetti nativi registrati per il pacchetto attualmente in distribuzione sul canale:

  • Se corrispondono, la modifica è JavaScript-solo e sicura da inviare in modo wireless.
  • Se è stato aggiunto, eliminato o modificato il versione di un plugin, il pacchetto è incompatibile con il nativo — tali modifiche hanno effetto solo quando gli utenti installano un nuovo binario nativo.
Fermata di terminale
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 live 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:

Fenestra 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 flusso di rilascio su questo: invia un live update quando stampa OTAe attiva una costruzione nativa quando stampa native.

Cosa significa un aggiornamento incompatibile per i tuoi utenti

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

Su dispositivi ancora in esecuzione con binario nativo più vecchio, 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 rollback automatico può catturare un errore JavaScript lanciato prima notifyAppReady() Esegue le prove, ma non è un sostituto per la distribuzione di applicazioni native compatibili code.

Pubblica una nuova versione nativa (la vera soluzione)

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

Quando un bundle richiede nuove versioni native di code, costruisci e invia una nuova versione binaria su App Store / Play Store (o ricostruisci con Capgo Cloud Build). Una volta che gli utenti aggiornano la versione binaria, le dipendenze native del bundle si allineano e live update funziona correttamente.

Ripristina se un bundle incompatibile è già in linea

Sezione intitolata “Ripristina se un bundle incompatibile è già in linea”

Se un bundle incompatibile è già attivo su un canale, ripristina il canale alla versione compatibile più recente per fermare la 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:

Fallire 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 — in modo che il tuo pipeline non pubblichi un aggiornamento OTA in silenzio che non potrà avere effetto fino a quando gli utenti non installano una versione nativa:

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

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

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

Quando desideri fa invia la costruzione nativa e il bundle insieme, metti il canale sulla metadata strategy e caricamento con --auto-min-update-versionEsegui Capgo il controllo di compatibilità su ogni caricamento e, quando un bundle richiede nuove librerie native code, solleva il livello di aggiornamento in modo che i dispositivi che non hanno installato la versione nativa corrispondente non ricevano l'aggiornamento:

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

Vedi Versione di riferimento per l'intero set di opzioni di targeting.

Se stai utilizzando Compatibilità nativa per mantenere gli aggiornamenti live sicuri, collega il Target di versione per route bundle con versione nativa, Rollbacks per recuperare quando un bundle incompatibile viene distribuito, Tipi di Aggiornamento per comprendere il blocco della versione del canale e il Capgo CLI riferimento al bundle per i comandi di compatibilità e releaseType.