Guide de Dépannage et Résolution des Anomalies
Ce guide rassemble les solutions éprouvées pour diagnostiquer et corriger rapidement les anomalies transversales pouvant survenir lors de l'exploitation de TkushPatch.
1. Anomalies Liées au CLI et à la Compilation
Erreur : shorebird.yaml not found ou Missing app_id
- Symptôme : Lors de l'exécution de
tk-ota-push releaseoutk-ota-push patch, le CLI affiche une erreur indiquant l'absence du fichier de configuration. - Cause : La commande est exécutée depuis un sous-dossier ou le projet n'a pas été initialisé.
- Solution :
- Placez-vous à la racine exacte de votre projet Flutter contenant
pubspec.yaml. - Exécutez
tk-ota-push initpour régénérer le fichiershorebird.yaml. - Vérifiez la présence des deux clés obligatoires :
app_id: "VOTRE-APP-UUID"
base_url: "https://api.tkushpatch.domaine.cm"
- Placez-vous à la racine exacte de votre projet Flutter contenant
Erreur : Patch rejected: Native code modified (native_bridge_ok: false)
- Symptôme : La commande
tk-ota-push patchéchoue en signalant une modification du code natif sous-jacent. - Cause : Des dépendances ajoutées dans
pubspec.yamlincluent du code C++, Java/Kotlin ou Swift non présent dans la release Store de base. - Solution :
- Un patch OTA ne peut contenir que du code Dart pur.
- Si vous avez ajouté des packages natifs (ex. nouveau plugin d'appareil photo ou Bluetooth), vous devez obligatoirement créer une nouvelle release de base Store (
tk-ota-push release android) et la soumettre aux magasins d'applications.
2. Anomalies de Distribution et Statut des Patchs
Symptôme : Le patch est publié mais le smartphone ne le télécharge pas
Vérifiez méthodiquement les 5 causes classiques :
Arbre de décision pour la résolution d'anomalies
- Le patch est au statut
STAGED? ➔ Rendez-vous dans le menu Approbations de la Console Web pour valider le correctif. - Le patch est au statut
ROLLED_BACK? ➔ Le correctif a été révoqué. Publiez un nouveau patch correctif incrémental. - L'appareil ne reçoit pas la mise à jour ? ➔ Vérifiez que le terminal correspond au canal configuré, aux pays ciblés et au pourcentage de déploiement actif.
Erreur HTTP 429 Too Many Requests
- Symptôme : Les requêtes mobiles renvoient une erreur 429 avec l'en-tête
Retry-After: 60. - Cause : Le Rate-Limiter Token Bucket (
DataPlaneRateLimitFilter) a détecté plus de 120 requêtes par minute depuis l'adresse IP cliente. - Solution :
- Si tous vos terminaux mobiles sortent via la même passerelle proxy d'entreprise, activez l'en-tête de confiance dans
application.propertiesdu serveur :ota.rate-limit.trust-forwarded-header=true
ota.rate-limit.capacity-per-minute=300
- Si tous vos terminaux mobiles sortent via la même passerelle proxy d'entreprise, activez l'en-tête de confiance dans
3. Cryptographie et Signature moteur cryptographique
Erreur : RSA signature verification failed (ring::error::Unspecified)
- Symptôme : Le smartphone télécharge le patch mais le rejette immédiatement avec une erreur dans les logs Android/iOS
adb logcat. - Cause 1 : La clé publique intégrée dans l'application au moment du build Store ne correspond pas à la clé privée utilisée pour signer le patch.
- Vérification : Avez-vous compilé l'application avec un compte développeur différent ou ciblé par mégarde une instance de pré-production ?
- Cause 2 : Incompatibilité du format de signature. Le serveur doit signer l'ASCII hexadécimal de 64 caractères du digest SHA-256 (
hash.toLowerCase().getBytes(US_ASCII)), et non les octets bruts.
Erreur Console : Service de signature indisponible (HTTP 503)
- Symptôme : Impossible d'approuver ou de signer un patch sur l'écran
/approvals. - Cause : Le conteneur moteur cryptographique a redémarré et se trouve dans l'état scellé (Sealed).
- Solution :
- Connectez-vous au serveur moteur de signature.
- Procédez au déverrouillage avec vos clés Shamir : Contactez l'administrateur système pour réactiver le service de signature.
- Dès que
sealed: false, rechargez la console pour reprendre les signatures.
4. Comportement Mobile Runtime et Désobfuscation
Symptôme : Le patch est téléchargé mais les changements ne s'affichent pas
- Cause : Par défaut, le moteur Flutter applique le patch au prochain redémarrage à froid de l'application pour ne pas perturber l'expérience utilisateur en pleine session.
- Solution :
- Fermez complètement l'application (tuez le processus dans le sélecteur d'applications).
- Relancez-la. La modification doit apparaître immédiatement.
- Pour forcer un redémarrage instantané, utilisez l'option
TkOtaPush.restartApp()fournie par le SDK dans vos écrans de mise à jour bloquante.
Symptôme : L'application plante au lancement puis revient à l'ancienne version
- Cause : Le mécanisme de sécurité Rollback 2-Crashs a détecté une exception fatale non interceptée au démarrage avec le nouveau patch.
- Solution pour diagnostiquer :
- Rendez-vous sur la console
/symbols. - Récupérez la trace de crash depuis
adb logcatou votre outil de crash-reporting. - Collez la trace obfusquée dans le désobfuscateur pour identifier la ligne exacte de code Dart ayant provoqué l'exception :
#00 abs 00000072a3194 binaire d'application + 0x12a3194
=> package:mon_app/services/api_service.dart:42:15 in fetchData() - Corrigez le bug Dart et publiez un
Patch #2correctif.
- Rendez-vous sur la console