Aller directement au contenu

Débogage

GitHub

Si vous obtenez un refus de cloud code et avez besoin de guides de remédiation plus approfondis, voir Problèmes de mise à jour courants..

Les journaux Capgo peuvent inclure des métadonnées pour l'événement. Dans le tableau de bord, filtrez par l'action en snake_case code et cliquez sur la cellule de métadonnées pour copier le payload JSON complet. Les métadonnées sont particulièrement utiles pour les événements de crash et de WebView car elles peuvent inclure le message d'erreur, l'URL de source, la ligne et la colonne, l'état du processus, la pression de mémoire ou la raison spécifique au système d'exploitation. Les anciens journaux peuvent toujours afficher des alias camelCase legacy listés en parenthèses.

Chaque titre de section correspond à l'action code affichée dans la table des journaux de console, vous pouvez donc y accéder directement.

Limites de plan et réponses normales.

Sous-titre « Limites de plan et réponses normales ».

Refus de serveur liés à la facturation, à la limitation ou à des états non d'erreur.

Ce qu'il signifie.

Capgo a détecté un trafic qui ressemble à celui provenant de Google ou d'infrastructures de cloud. Les mises à jour moins de quatre heures sont ignorées afin que le trafic des bots ne soit pas comptabilisé comme des appareils facturables.

Que faire

Ignorez ceci sur les utilisateurs réels. Réessayez depuis des réseaux normaux et des appareils réels, ou attendez et vérifiez à nouveau plus tard.

Ce que cela signifie

Votre application est configurée pour bloquer les requêtes provenant des adresses IP des centres de données Google et Apple connus. La protection s'applique aux vérifications de mise à jour, aux statistiques et aux demandes de canal-self, de sorte que les sondes hébergées en cloud et les exécutants de fournisseur peuvent recevoir cette réponse même lorsque la configuration de l'application est autrement valide.

Que faire

Réessayez depuis un appareil physique sur un réseau utilisateur normal. Si le trafic provenant du fournisseur est intentionnel, désactivez temporairement Block provider infrastructure requests dans la section Information de l'onglet de l'application, puis activez-le à nouveau après le test. Les nouvelles applications activez cette option par défaut ; les applications existantes conservent leur paramétrage précédemment désactivé jusqu'à ce qu'il soit modifié.

Ce que cela signifie

Votre organisation a atteint ses limites de plan ou de dispositif. Le dispositif ne recevra pas les mises à jour jusqu'à ce que vous augmentiez votre plan ou que le cycle de facturation suivant réinitialise l'utilisation.

Ce que faire

Augmentez votre plan dans le tableau de bord ou attendez le cycle de facturation suivant.

Ce que cela signifie

Le dispositif dispose déjà de la dernière version disponible pour son canal. C'est un état normal, pas une erreur.

Ce que cela signifie

Le dispositif a envoyé trop de demandes d'actualisation ou de canal dans une fenêtre de temps courte.

Ce que faire

Arrêtez de faire appel aux APIs de mise à jour à l'intérieur des boucles de rendu. Appelez-les setChannel / getChannel seulement à partir d'actions de l'utilisateur, et définissez-les defaultChannel dans capacitor.config.

Les refus du serveur côté backend causés par des métadonnées de version native non valides.

Ce que cela signifie

La version de l'application native dans la configuration est manquante ou non valide semver (x.y.z).

Ce que faire

Définissez plugins.CapacitorUpdater.version à valid semver, vérifiez-le dans le Testeur de SemVerReconstruire ensuite et réinstaller l'application native.

Refus de backend lorsqu'une politique de canal bloque une plateforme, un type de construction ou une classe de dispositif.

Ce que cela signifie

Le dispositif exécute iOS, mais les mises à jour d'iOS sont désactivées pour ce canal.

Ce que faire

Activer iOS dans le canal si cela était accidentel, ou rediriger les builds iOS vers un canal dédié lorsque le blocage est intentionnel.

Ce que cela signifie

The appareil tourne sous Android, mais les mises à jour d'Android sont désactivées pour ce canal.

Qu'est-ce à faire

Activer Android dans le canal si c'était une erreur, ou rediriger les builds d'Android vers un canal dédié lorsque le blocage est intentionnel.

Qu'est-ce que cela signifie

L'appareil tourne sous Electron, mais les mises à jour d'Electron sont désactivées pour ce canal.

Qu'est-ce à faire

Activer Electron dans le canal si c'était une erreur, ou rediriger les builds d'Electron vers un canal dédié lorsque le blocage est intentionnel.

Qu'est-ce que cela signifie

L'appareil est une build de développement, mais les builds de dev sont bloqués pour ce canal.

Qu'est-ce à faire

Autoriser les builds de développement dans un canal de test, ou garder ce canal en version de production et déplacer les appareils de développement vers un autre canal.

Ce que cela signifie

Un build de production appelé /updates, mais les mises à jour de production sont bloquées pour ce canal.

Ce qu'il faut faire

Autoriser les mises à jour de production dans le canal si cela était une erreur, ou rediriger les builds de production vers le canal correct.

Ce que cela signifie

Un téléphone ou une tablette réelle a été bloqué car ce canal bloque les appareils réels.

Ce qu'il faut faire

Activer les mises à jour d'appareils réels si cela était une erreur, ou garder la restriction et rediriger les appareils réels vers un autre canal.

Ce que cela signifie

L'appareil est un émulateur, mais les mises à jour de l'émulateur sont désactivées pour ce canal.

Ce que faire

Activer les mises à jour de l'émulateur dans un canal de test, ou garder ce canal émulateur bloqué et utiliser un autre canal pour la validation de l'émulateur.

Refus du serveur lorsqu'une règle de semver ou de métadonnées bloque le bundle cible.

Ce que cela signifie

La mise à jour automatique est désactivée par la politique de compatibilité du canal. Les métadonnées incluent auto_update avec une règle correspondante comme major, minor, patch, metadataou none.

Qu'est-ce à faire

Modifier la politique d'actualisation automatique du canal pour permettre votre lancement prévu.

Qu'est-ce que cela signifie

Le canal a un bundle plus ancien que la base de ligne du dispositif et bloque l'envoi d'actualisations sous la version native.

Qu'est-ce à faire

Publier un bundle à ou au-dessus de la base de ligne native, ou désactiver la protection sous-native dans le canal.

Qu'est-ce que cela signifie

Le canal nécessite min_update_version, mais la version native du dispositif est inférieure à ce seuil.

Qu'est-ce à faire

Définir min_update_version sur le bundle ou la version de sortie à partir d'une version native plus récente.

Ce que cela signifie

Le canal bloque les sauts de version majeure, par exemple 1.x.x à 2.x.x.

Qu'est-ce à faire

Aligner la stratégie de canal avec votre plan de mise à jour majeure, ou permettre les sauts majeurs pour cette piste. Voir Problèmes de mise à jour courants.

Ce que cela signifie

The channel bloque les sauts de version mineure par rapport à la base native du dispositif (version_build), par exemple 1.2.3 à faire 1.3.0.

Qu'est-ce à faire

Alignez la stratégie de canal avec votre plan de mise à jour mineure, ou autorisez les sauts mineurs pour ce suivi.

Ce que cela signifie

Le canal bloque les modifications au niveau de la version de patch tout en conservant le même MAJOR.MINOR.PATCH préfixe; seuls les changements de suffixe sont autorisés.

Qu'est-ce à faire

Alignez la cadence de publication avec la politique du canal, ou autorisez les sauts de patch pour ce suivi.

Les refus de serveur provoqués par une configuration de canal manquante ou incohérente.

Ce que cela signifie

Le dispositif a tenté de se lier à un canal privé qui ne permet pas la liaison automatique de dispositifs (allow_device_self_set est faux) et le canal n'est pas public.

Ce que faire

Activer allow_device_self_set sur le canal ou passer le dispositif à un canal public ou autorisé.

Ce que cela signifie

Le canal utilise disable_auto_update: "version_number" mais le bundle min_update_version est null, donc Capgo ne peut pas décider quelles appareils devraient mettre à jour.

Qu'est-ce à faire

Remplissez la configuration manquante pour cette règle ou passez à un mode d'auto-mise à jour plus simple.

Ce que cela signifie

Aucun canal par défaut n'est configuré et l'appareil n'a pas de surcouche de canal.

Qu'est-ce à faire

Définissez un canal par défaut dans le tableau de bord ou configurez defaultChannel dans la construction.

Refus de backend lorsque Capgo ne peut pas servir ou déchiffrer le bundle.

Ce que cela signifie

Capgo a échoué à générer une URL de téléchargement signée valide et aucune substitution de manifeste n'était disponible.

Ce que faire

Ré-uploader le bundle, régénérer les manifestes et vérifier les paramètres R2 ou du bundle public.

Ce que cela signifie

Le bundle attribué au canal n'a pas de contenu téléchargeable : aucun external_url, aucun r2_path, pas une version intégrée, et aucune entrée de manifeste.

Ce que faire

Reconstruire et ré-uploader la version, puis confirmer que le bundle a un contenu de fichier réel.

Ce que cela signifie

La clé publique de chiffrement du dispositif ne correspond pas à la clé utilisée pour chiffrer le bundle. Les métadonnées peuvent inclure device_key_id, bundle_key_id, et version.

Ce à quoi faire

Comparer les ID de clés du dispositif et du bundle dans la console. Publier avec la même clé et des versions de plugin correspondantes CLI.

La configuration de l'application et les clients de legacy

Section intitulée “App configuration and legacy clients”

Les refus de serveur causés par la configuration de l'application ou les versions de mise à jour non supportées.

Ce que cela signifie

The application a envoyé un identifiant de appareil personnalisé, mais cette application ne prend pas en charge les identifiants personnalisés, donc l'identifiant est ignoré.

Qu'est-ce qu'il faut faire

Arrêtez d'envoyer des identifiants personnalisés, ou activez les identifiants personnalisés uniquement lorsque votre flux de travail les nécessite.

Qu'est-ce que cela signifie

server.url est défini dans Capacitor la configuration, donc la WebView charge une URL distante au lieu de fichiers de bundle locaux. Capgo les mises à jour en direct nécessitent des fichiers locaux et server.url est déconseillé en production.

Qu'est-ce qu'il faut faire

Supprimez ou effacez server.url pour les builds de production et gardez les payloads de mise à jour locaux. Cela code peut apparaître comme un refus du serveur ou comme un statut du côté appareil.

Qu'est-ce que cela signifie

The plugin de mise à jour est v4, que le serveur ne prend plus en charge.

Qu'est-ce à faire

Mettez à jour le plugin et CLI à v5+ (préférez v8) avec Capacitor v5+, reconstruisez, et republiez les métadonnées du bundle.

Événements côté appareil pour le flux de mise à jour normal, d'activation et de reversion.

Qu'est-ce que cela signifie

Action de test interne utilisée pour vérifier la pipeline de statistiques.

Qu'est-ce que cela signifie

Capgo a envoyé des informations de téléchargement pour une nouvelle version vers l'appareil.

Ce que cela signifie

Un bundle a été activé sur le dispositif.

Ce que cela signifie

Ce qu'il faut faire

Vérifiez les journaux natifs avec

et vérifiez l'intégrité du bundle, des chemins et du npx @capgo/cli@latest app debug flux. notifyAppReady Section intitulée « reset »

Ce qu'il faut faire

Le dispositif a été réinitialisé vers le bundle intégré.

Ce que cela signifie

Un bundle a été supprimé sur le dispositif.

Événements côté appareil pour la progression de téléchargement, la validation de l'archive et les erreurs d'installation.

Ce que cela signifie

La séquence de téléchargement a commencé à 0% de progression.

Ce que cela signifie

A un nouveau bundle a été téléchargé — progression indiquée à 10%.

Ce que cela signifie

A un nouveau bundle a été téléchargé — progression indiquée à 20%.

Ce que cela signifie

A un nouveau bundle a été téléchargé — progression indiquée à 30%.

Ce que cela signifie

A un nouveau bundle a été téléchargé — progression indiquée à 40%.

Ce que cela signifie

A un nouveau bundle a été téléchargé — progression indiquée à 50%.

Ce que cela signifie

A un nouveau bundle a été téléchargé — progression indiquée à 60%.

Ce que cela signifie

A un nouveau bundle a été téléchargé — progression indiquée à 70%.

Ce que cela signifie

A un nouveau bundle a été téléchargé — progression indiquée à 80%.

Ce que cela signifie

A un nouveau bundle a été téléchargé — le progrès est indiqué à 90%.

Ce que cela signifie

Le téléchargement du bundle s'est terminé avec succès.

Ce que cela signifie

Le dispositif a commencé à télécharger le manifeste d'actualisation.

Ce que cela signifie

Le dispositif a terminé de télécharger le manifeste d'actualisation.

Ce que cela signifie

The appareil a commencé à télécharger l'archive du bundle.

Ce que cela signifie

L'appareil a terminé de télécharger l'archive du bundle.

Ce que cela signifie

Une entrée de manifeste n'a pas pu être téléchargée. version_name use version:fileName pour identifier l'asset.

Ce que faire

Réparez l'asset manquant ou bloqué, régénérez le manifeste et ré-uploadez le bundle.

What cela signifie

Un fichier de manifeste a échoué la validation de son checksum.

What faire

Ré-uploader le bundle avec une version actuelle CLI et vérifier les checksums de manifeste.

What cela signifie

Un fichier de manifeste a échoué la décompression Brotli.

What faire

Vérifier les paramètres de compression et ré-uploader les assets affectés.

What cela signifie

Le bundle a échoué à se télécharger.

Qu'est-ce à faire

Vérifiez la connectivité réseau, l'expiration des URL signées, la disponibilité du CDN et l'espace de stockage du dispositif.

Ce que cela signifie

Le bundle a été installé mais l'application n'a jamais appelé notifyAppReadyAinsi, Capgo a été annulé.

Qu'est-ce à faire

Appelez notifyAppReady() après que votre application ait terminé de se démarrer. Le texte de journal natif notifyAppReady was not called, roll back current bundle correspond à ce code.

Ce que cela signifie

The bundle téléchargé a échoué à la validation de son checksum. Causes courantes : décalage CRC32 vs SHA256 provenant d'un ancien CLI upload, ou décalage de clé de chiffrement sur les anciens plugins qui affichent la défaillance de déchiffrement sous forme de défaillance de checksum.

Qu'est-ce à faire

Ré-uploader avec un CLI/plugin (SHA256) actuel. Si vous utilisez la chiffrement, vérifiez que la clé publique de l'application correspond à la clé d'upload, ou mettez à niveau le plugin 8.3.0+ pour une défaillance explicite keyMismatch Erreur.

Qu'est-ce que cela signifie

Le bundle téléchargé a échoué à se déchiffrer.

Qu'est-ce à faire

Vérifiez les clés de chiffrement et ré-uploader le bundle avec la paire de clés correspondante.

Qu'est-ce que cela signifie

Le zip contient des chemins Windows illégaux.

Qu'est-ce à faire

Rétablir le bundle sur les chemins Unix ou nettoyer les chemins d'archive avant l'envoi.

Qu'est-ce que cela signifie

Les chemins de fichiers à l'intérieur du zip ne sont pas canoniques.

Qu'est-ce à faire

Corriger la génération des chemins d'archive avant l'envoi.

Qu'est-ce que cela signifie

Le zip contient des chemins de répertoire non valides.

Qu'est-ce à faire

Corriger la structure du zip avant l'envoi.

Ce que cela signifie

Le dispositif a échoué à dézipper le bundle téléchargé.

Ce que faire

Vérifiez l'intégrité de l'archive et les formats de compression pris en charge.

Ce que cela signifie

Le téléchargement a échoué car le dispositif a manqué de mémoire.

Ce que faire

Réduisez la taille du bundle ou réessayez sur un dispositif avec plus de mémoire libre.

Diagnostics de crash, de mémoire et de WebView côté appareil. Inspectez toujours le métadonnées JSON dans le tableau de bord.

Ce que cela signifie

L'application est passée en arrière-plan.

Ce que cela signifie

L'application est passée en avant-plan.

Ce que cela signifie

Crash du niveau JavaScript ou Capacitor. Les métadonnées peuvent inclure le message, la pile, la source et le contexte de bundle actif.

Ce à quoi faire

Inspectez les métadonnées et les journaux natifs. Associez le rapport d'erreur JS et natif (par exemple Sentry) pour localiser le chemin de code en panne.

Ce que cela signifie

Crash de la plateforme native. Les métadonnées peuvent inclure la plateforme, la raison, le pilote et les détails du processus.

Ce que faire

Utilisez les journaux de crash Xcode ou Logcat et corrèlez-les avec le bundle actif à partir des métadonnées.

Ce que cela signifie

Événement Application Android Non Répondante.

Ce que faire

Inspectez les traces ANR dans Logcat et réduisez le travail de blocage de la tâche principale après les mises à jour.

Ce que cela signifie

The OS a tué l'application après pression de mémoire.

Qu'est-ce que vous devez faire.

Réduire l'utilisation de la mémoire après l'activation de la mise à jour et inspecter les métadonnées pour les signaux de disponibilité de la mémoire.

Qu'est-ce que cela signifie.

L'OS a tué l'application en raison d'une utilisation excessive de ressources.

Qu'est-ce que vous devez faire.

Inspecter les métadonnées pour le type de ressource ou la raison de la plateforme.

Qu'est-ce que cela signifie.

Le mise à jour ou le démarrage a échoué avant que le runtime normal soit prêt.

Qu'est-ce que vous devez faire.

Inspectez les métadonnées pour l'étape qui a échoué et le message d'erreur.

Ce que cela signifie

Avertissement de mémoire iOS.

Ce que faire

Inspectez le contexte de mémoire dans les métadonnées et réduisez l'utilisation maximale après les mises à jour.

Ce que cela signifie

Erreur JavaScript non gérée dans la Vue Web. Les métadonnées peuvent inclure le message, l'URL de la source, la ligne, la colonne et la pile.

Ce que faire

Installez la gestion des erreurs dans les couches JS et natives pour capturer exactement la ligne qui a échoué en production.

Ce que cela signifie

Rejet de promesse non gérée dans le WebView.

Ce à faire

Capturer les échecs asynchrones avec JS et le rapportage d'erreurs natives.

Ce que cela signifie

Une ressource du WebView n'a pas pu s'charger.

Ce à faire

Utiliser l'URL de métadonnées et les détails de statut pour corriger les actifs endommagés ou les règles de réseau.

Ce que cela signifie

Une politique de sécurité du contenu a bloqué une ressource.

Qu'est-ce à faire

Ajuster CSP en utilisant la directive de métadonnées et les détails de la zone URI bloquée.

Ce que cela signifie

La session WebView précédente n'a pas fermé proprement, ce qui peut indiquer des boucles de crash après une mise à jour.

Qu'est-ce à faire

Corréler avec les événements de crash et d'erreur WebView avant et après le redémarrage.

Ce que cela signifie

Le processus de rendu Android WebView a quitté.

Qu'est-ce à faire

Inspecter les signaux de crash du rendu dans les journaux de métadonnées et natifs.

Ce que cela signifie

Le processus de contenu de la vue Web iOS a été terminé.

Que faire

Inspecter le bundle actif et l'URL de la page à partir des métadonnées.

Événements du contexte côté appareil qui aident à corriger le comportement de mise à jour avec les changements d'OS, de version native ou de canal.

Ce que cela signifie

La version de l'OS du dispositif a changé entre les vérifications.

Ce qu'il signifie

La version de l'application native a été modifiée, ce qui aide à séparer les modifications des bundles natives et web.

Ce qu'il signifie

Le dispositif a interrogé son canal actuel.

Ce qu'il signifie

Un canal a été défini avec succès pour le dispositif.

Ce qu'il signifie

L'application a été désinstallée ou les données Capgo ont été effacées.

État du bundle

État du paquet
  • SUCCESS: l'installation du paquet est terminée
  • ERROR: l'installation ou le téléchargement a échoué
  • PENDING: Téléchargement terminé, en attente de la mise à jour
  • DELETED: Le paquet a été supprimé, mais il est toujours présent pour les statistiques
  • DOWNLOADING: Un paquet est actuellement téléchargé

Il existe une commande de débogage pour les utilisateurs Capgo de Cloudflare.

Fenêtre de terminal
npx @capgo/cli@latest app debug

Cela vous permettra de vérifier tous les événements se produisant dans l'application et de trouver une solution si les mises à jour ne se produisent pas.

pour trouver vos logs sur Xcode

pour trouver vos logs sur Android Studio

  • Failed to download from maps to download_fail
  • notifyAppReady was not called, roll back current bundle maps to update_fail

Pour déboguer sur iOS, vous devez déposer l'application sur votre ordinateur, vous pouvez le faire comme ceci :

Xcode dispose d'une fonctionnalité intégrée pour inspecter le système de fichiers des applications installées par les développeurs sur un appareil iOS. Menu Xcode Fenêtre montrant l'option Dispositifs et Simulateurs

Pour y parvenir :

  • Connectez votre appareil à votre Mac et sélectionnez Fenêtre > Dispositifs dans le menu bar Xcode.
  • Sélectionnez votre appareil dans le panneau de gauche sous la section Dispositifs.
  • Cela affichera une liste des applications installées par les développeurs pour cet appareil.
  • Sélectionnez l'application que vous souhaitez inspecter puis sélectionnez l'icône de 3 points près du bas de l'écran.
  • Voici où vous pouvez visualiser le système de fichiers actuel en sélectionnant Télécharger une capture d'écran.

Le panneau Xcode des appareils affichant l'option de téléchargement du conteneur d'application

En sélectionnant Télécharger le conteneur…, vous téléchargerez et exporterez une capture d'écran du système de fichiers sous forme de fichier .xcappdata que vous pouvez parcourir.

Fichier xcappdata téléchargé avec le menu contextuel Afficher le contenu du package

Cliquez avec le bouton droit sur ce fichier et sélectionnez Afficher le contenu du package pour ouvrir le dossier.

Ouvrez le dossier App Data, et vous devriez maintenant voir quelques dossiers comme Documents, Library, tmp, etc.

Structure du dossier du conteneur d'application iOS affichant les dossiers Documents et Library

Vous trouverez ensuite une version dans 2 dossiers :

library/NoCloud/ionic_built_snapshots est nécessaire après le redémarrage de l'application

et documents/versions pour le rechargement chaud

Pour déboguer sur Android, vous devez accéder à l'appareil depuis Android Studio :

  • Cliquez sur Vue > Outils de fenêtre > Explorateur de fichiers de l'appareil ou cliquez sur le bouton Explorateur de fichiers de l'appareil dans la barre des outils de fenêtre pour ouvrir l'Explorateur de fichiers de l'appareil.
  • Sélectionnez un appareil dans la liste déroulante.
  • Ouvrez le chemin data/data/APP_NAME/APP_NAME est votre ID d'application.

Explorateur de fichiers de l'appareil d'Android Studio montrant le répertoire des données de l'application

Ensuite Trouvez le versions répertoire pour voir toutes les versions

Comprendre les journaux de crash de production IOS

Section intitulée “Comprendre les journaux de crash de production IOS”

Si vous utilisez Débogage pour planifier le travail de plugin natif, connectez-le avec En utilisant @capgo/capacitor-moteur de mise à jour pour la capacité native dans En utilisant @capgo/capacitor-moteur de mise à jour, Répertoire du plugiciel Capgo pour le flux de travail du produit dans Répertoire du plugiciel Capgo, Plugiciels Capacitor par Capgo pour le détail d'implémentation dans Plugiciels Capacitor par Capgo, Ajouter ou Mettre à jour les plugiciels pour le détail d'implémentation dans Ajouter ou Mettre à jour les plugiciels, et Alternatives de plugiciels d'entreprise Ionic pour le flux de travail du produit dans Alternatives de plugiciels d'entreprise Ionic.