Aller au contenu

Compatibilité native

Un Capgo live update remplace l’application bundle JavaScript instantanément, mais il ne peut pas modifier natif partie de votre application — les plugins Capacitor/Cordova, les dépendances natives et la configuration du projet natif qui sont compilés dans le binaire installé. Si un nouveau bundle nécessite des code natifs que le binaire installé ne contient pas, le bundle est incompatible avec le natif: Capgo peut toujours le livrer, mais il peut planter ou dysfonctionner sur les appareils qui exécutent encore l’ancien build natif.

Cette page explique comment Capgo détecte la compatibilité native, ce qu’une mise à jour incompatible signifie pour vos utilisateurs et comment déployer des modifications natives en toute sécurité.

Capgo peut envoyer des fichiers depuis votre dossier de build web généré. Si la modification ne concerne que le HTML, le CSS, le JavaScript, les assets ou les packages JavaScript purs intégrés à cette sortie, déployez-la comme live update.

Utilisez une release d'app native lorsqu'une modification met à jour capacitor.config.tsla configuration de plugin stockée dans la config Capacitor, les plugins ou dépendances natifs, Capacitor lui-même, ou les fichiers de projet iOS/Android. Test pratique : si la modification doit mettre à jour le projet natif via npx cap sync ou npx cap copy avant que les appareils installés puissent l'utiliser, considérez-le comme natif.

ModificationDéployer avec Capgo OTA ?Pourquoi
HTML, CSS, JavaScript de l'app, images, polices et autres assets du build webOuiIls sont chargés depuis le bundle web à l'exécution.
Modifications de packages en JavaScript pur intégrées à votre sortie webOuiLe JavaScript généré fait partie du bundle web.
capacitor.config.ts modificationsNonLa configuration Capacitor est intégrée à l’application native au moment du build.
Ajout, suppression ou mise à niveau de plugins Capacitor/CordovaNonLe binaire natif installé doit contenir le code natif correspondant.
Modifications des fichiers de projet iOS ou AndroidNonExisting users need a new binary from the stores.

Capgo fournit des clients de mise à jour dédiés pour chaque runtime hybride :

PluginÀ utiliser quand
@capgo/capacitor-updaterApplications iOS/Android Capacitor
@capgo/cordova-updaterApplications Cordova iOS 7+ / Android 13+
@capgo/electron-updaterApplications de bureau Electron

Les vérifications de compatibilité native s’appliquent quel que soit le plugin client : elles comparent les dépendances natives enregistrées dans le bundle avec le binaire installé.

Chaque application Capacitor est livrée en deux couches :

  • Le binaire natif les utilisateurs l’installent depuis l’App Store / Play Store. Il contient Capacitor, vos plugins natifs et la configuration native.
  • Le Bundle JavaScript (votre application web) que Capgo peut mettre à jour via OTA.

Un live update ne remplace que la couche JavaScript. Si ce nouveau JavaScript appelle un plugin natif ou API qui n'est pas compilé dans le binaire installé, l'appel échoue à l'exécution — ce qui peut faire planter l'app ou casser une fonctionnalité sans erreur visible. En résumé : Capgo ne peut pas mettre à jour le code natif, donc un appareil qui exécute l'ancien build natif ne peut pas exécuter sans risque un bundle compilé contre un nouveau code natif.

Lorsque vous envoyez un bundle — ou que vous lancez la vérification manuellement — Capgo compare les packages natifs de votre projet local (vos plugins Capacitor/Cordova et leurs versions) avec les packages natifs enregistrés pour le bundle actuellement actif sur le canal:

  • S'ils correspondent, le changement est uniquement JavaScript et peut être déployé via OTA en toute sécurité.
  • Si un plugin a été ajouté, supprimé ou a changé de version, le bundle est incompatible avec le natif — ces changements ne prennent effet qu’une fois que les utilisateurs ont installé un nouveau binaire natif.
Fenêtre de terminal
bunx @capgo/cli@latest bundle compatibility com.example.app --channel production

Le CLI affiche un tableau de chaque package natif avec sa version locale, la version en ligne sur le canal et un statut :

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

Pour les pipelines, bundle releaseType réduit la vérification à un seul mot :

Fenêtre de terminal
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

Conditionnez votre pipeline de release à ce résultat : déployez un live update s’il affiche OTA, et déclenchez un build natif s’il affiche native.

Ce qu'une mise à jour incompatible signifie pour vos utilisateurs

Section intitulée « Ce que signifie une mise à jour incompatible pour vos utilisateurs »

Sur les appareils qui exécutent encore l' ancien binaire natif, l'absence du code natif peut provoquer des crashs ou des fonctionnalités cassées — même si la mise à jour a été téléchargée et appliquée « avec succès ». C'est pourquoi une live update peut être en ligne et distribuée tout en cassant l'app pour les utilisateurs existants, et pourquoi Capgo peut vous avertir lorsqu'un bundle incompatible est mis en ligne.

de Capgo rollback automatique peut intercepter une erreur JavaScript levée avant notifyAppReady() s'exécute, mais cela ne remplace pas le déploiement de code natif compatible — une incompatibilité qui provoque un crash ultérieur, ou un crash natif, peut passer inaperçue.

Publier un nouveau build natif (la vraie solution)

Section intitulée « Publier un nouveau build natif (la vraie solution) »

Lorsqu'un bundle nécessite du nouveau code natif, compilez et soumettez un nouveau binaire à l'App Store / Play Store (ou reconstruisez avec le Cloud Build de Capgo). Une fois que les utilisateurs ont mis à jour le binaire, les dépendances natives du bundle correspondent et le live update s'exécute correctement.

Faire un rollback si un bundle incompatible est déjà en ligne

Section intitulée « Faire un rollback si un bundle incompatible est déjà en ligne »

Si un bundle incompatible est déjà actif sur un canal, rebasculez le canal sur le dernier build compatible pour arrêter de le servir jusqu'à la sortie du build natif. Voir Rollbacks.

Deux garde-fous complémentaires qui inspectent tous deux vos packages natifs :

Faire échouer l'upload en CI — --fail-on-incompatible

Ajoutez le flag à votre bundle upload étape. Si les packages natifs du bundle ne correspondent pas à la version live actuelle du canal, l'upload échoue avec un code de sortie non nul et rien n'est déployé — votre pipeline vous empêche ainsi de publier en silence une mise à jour OTA qui ne prendra effet qu'après l'installation d'un build natif par les utilisateurs :

Fenêtre de terminal
bunx @capgo/cli@latest bundle upload --channel production --fail-on-incompatible

Les uploads compatibles — et les cas où la vérification ne peut pas s'exécuter (nouveau canal, ou absence de métadonnées distantes) — passent tels quels. Dans un terminal interactif, il propose à la place le flux de build natif Capgo Builder ; un refus entraîne l'échec. (Ne peut pas être combiné avec --ignore-metadata-check.)

Contrôlez la livraison par version native — metadata + --auto-min-update-version

Lorsque vous faire déployez le build natif et le bundle ensemble, placez le canal sur le metadata stratégie et envoyez avec --auto-min-update-versionCapgo effectue le contrôle de compatibilité à chaque upload et, lorsqu'un bundle nécessite de nouvelles code natives, relève le seuil de mise à jour pour que les appareils qui n'ont pas installé le build natif correspondant ne le reçoivent pas :

Fenêtre de terminal
# 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

Consultez Ciblage de version pour l'ensemble des options de ciblage.

Si vous utilisez Compatibilité native pour garantir la sécurité des live updates, connectez-l’à Ciblage de version pour router les bundles par version native, Rollbacks pour récupérer lorsqu'un bundle incompatible est déployé, Types de mise à jour pour comprendre le blocage de version par canal, et les Capgo CLI références de bundle pour les commandes compatibility et releaseType.