Saltare al contenuto

Compatibilità nativa

A Capgo aggiorna automaticamente il tuo bundle JavaScript JavaScript bundle ma non può cambiare la parte nativa del tuo app — i plugin __CAPGO_KEEP_0__/Cordova, le dipendenze native e la configurazione del progetto nativo che sono stati compilati nel file binario installato. 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 native-incompatible: Capgo può ancora distribuirlo, ma potrebbe bloccarsi o comportarsi in modo anomalo su dispositivi che ancora utilizzano 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.

TLDR: OTA o nativo?

Riepilogo: OTA o nativo?

Capgo può inviare file dal folder di costruzione web generato. Se il cambiamento riguarda solo l'HTML, il CSS, il JavaScript, gli asset o i pacchetti di JavaScript puro inclusi in quel output, invialo come aggiornamento live.

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

prima che i dispositivi installati possano utilizzarlo, trattalo come nativo.Ship with Capgo OTA?Invia con __CAPGO_KEEP_0__ OTA?
PerchéHTML, CSS, JavaScript dell'app, immagini, font e altri asset di costruzione web
Pacchetti di modifica JavaScript puri inclusi nella tua output webIl JavaScript generato fa parte del pacchetto web.
capacitor.config.ts modificheNoLa configurazione Capacitor viene letta nell'app nativa al momento della compilazione.
Aggiungere, rimuovere o aggiornare i plugin Capacitor/CordovaNoIl binario nativo installato deve contenere il binario nativo code corrispondente.
Modifiche al file di progetto iOS o AndroidNoGli utenti esistenti hanno bisogno di un nuovo binario dai negozi.

Capgo fornisce client di aggiornamento 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

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

Tutte le Capacitor app sono distribuite in due layer:

  • The il binario nativo gli utenti installano dallo Store App / Store Google. Contiene Capacitor, i tuoi plugin nativi, e la configurazione nativa.
  • The il pacchetto JavaScript (la tua app web) che Capgo può aggiornare in modo wireless.

Un aggiornamento live sostituisce solo il layer JavaScript. Se il nuovo JavaScript chiama un plugin nativo o API che non è stato compilato nel binario installato, la chiamata fallisce all'esecuzione — che può far crashare l'applicazione o rompere silenziosamente una funzione. In poche parole: Capgo non può aggiornare code nativo, quindi un dispositivo che esegue la versione vecchia del binario nativo non può eseguire in modo sicuro un pacchetto costruito contro nuovi code nativi.

Quando carichi un pacchetto — o esegui la verifica manualmente — Capgo confronta le 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 diretta sul canale:

  • Se corrispondono, la modifica è esclusivamente in JavaScript e è sicuro per essere inviato via aria.
  • Se è stato aggiunto, rimosso o modificato il versione di un plugin, il pacchetto è incompatibile nativo — quelle 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 diretta 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

Sottosezione intitolata “Ottieni un verdetto leggibile da macchina (CI)”

Per le pipeline,

collapsa il controllo in una sola parola: bundle releaseType Fermata dei comandi

Copia negli appunti
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

Registra la pipeline di rilascio su questo: invia un aggiornamento live quando lo stampa OTAe attiva una compilazione nativa quando lo stampa native.

Cosa significa un aggiornamento incompatibile per i tuoi utenti

Sottotitolo “Cosa significa un aggiornamento incompatibile per i tuoi utenti”

Sui dispositivi che ancora eseguono il binario nativo più vecchio il componente nativo mancante __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 eppure ancora rompere l'applicazione per gli utenti esistenti, e per cui __CAPGO_KEEP_1__ può avvertirti quando un pacchetto incompatibile va live., 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() runs, but it isn’t a substitute for shipping compatible native code — a mismatch that crashes later, or crashes natively, can slip past it.

ma non è un sostituto per la consegna di un binario nativo compatibile — un mismatch che causa crash più tardi, o crash nativamente, può sfuggire a esso.

Come inviare cambiamenti nativi in modo sicuro

Sottosezione intitolata “Come inviare cambiamenti nativi in modo sicuro”

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

Quando un bundle richiede nuove 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 l'aggiornamento live funziona correttamente.

Ripristina se un bundle incompatibile è già live

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

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

Due guardie complementari, entrambe delle quali verificano effettivamente i 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 live del canale, l'upload fallisce con un uscita non zero e non viene spedito nulla — 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

Carichi 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 posto il flusso di lavoro di costruzione nativa del Capgo Builder; rifiutando fallisce. (Non può essere combinato con --ignore-metadata-check.)

Consegna tramite versione nativa — metadata + --auto-min-update-version

Quando si fa invia la costruzione nativa e il pacchetto insieme, impostare il canale sulla metadata e caricare con --auto-min-update-version. Capgo esegue il controllo di compatibilità su ogni caricamento e, quando un pacchetto richiede una nuova costruzione nativa code, innalza il livello di aggiornamento in modo che i dispositivi che non hanno installato la costruzione nativa corrispondente non ricevano l'aggiornamento:

Scheda di 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

Flusso di lavoro nativo + OTA Canali di sviluppo/produzione, quando mantenere , e come inviare una linea di base nativa intenzionale.

Riferimento per la compatibilità del pacchetto, il tipo di rilascio e le opzioni di caricamento.

Sezione intitolata “Continua con la compatibilità nativa”

Se stai utilizzando Compatibilità nativa per mantenere aggiornate in sicurezza le live updates, connettile con Target di versione context Pagina/Area: Pagina di marketing delle soluzioni Capgo. Ruolo: Intestazione di sezione o pagina. Visualizzato in: pagina soluzioni/target-di-versione.astro. Chiave di messaggio `solutions_version_targeting_title` (Titolo della versione di soluzioni). | Pagina/Area: Pagina di marketing delle soluzioni Capgo. Ruolo: Etichetta di UI breve o elemento di navigazione. Visualizzato in: pagina soluzioni/target-di-versione.astro. Chiave di messaggio `solutions_version_targeting` (Target di versione delle soluzioni). per gestire i bundle in base alla versione nativa, Annullamenti per recuperare quando un bundle incompatibile viene distribuito, Capgo CLI bundle reference per comprendere il blocco di versione del canale, e il riferimento del bundle per la compatibilità e il comando releaseType.