Utilisez LogBrew Swift 0.1.6 ou plus récent. Utilisez la CLI LogBrew native
0.1.24 ou plus récente pour importer les artefacts de débogage.
Définir les limites de la capture
Vérifiez quand votre application peut rejouer chaque type de défaillance.
Définissez la valeur de version avant le build. Elle doit identifier la version
et le build de l’application. Utilisez la même valeur dans le SDK, l’import du
dSYM et le filtre des problèmes.
N’ajoutez pas de données utilisateur, de corps de requête ni d’en-têtes aux
métadonnées de plantage.
Ajouter le produit de capture des plantages
Commencez par configurer la télémétrie du SDK pour votre application. Le rejeu utilise ceclient et ce transport.
Ajoutez le SDK public avec Swift Package Manager.
LogBrew pour envoyer la télémétrie. N’ajoutez
LogBrewCrash que si l’application active explicitement la capture native des
plantages ou des blocages.
L’intégration de capture prend en charge iOS 15 ou plus récent. Gardez un seul
objet de capture, détenu par l’application, car les gestionnaires natifs
d’erreurs fatales s’appliquent à tout le processus.
Configurer une identité exacte
Utilisez le même projet, la même version, le même environnement et le même service dans la configuration d’exécution et dans l’import des artefacts. LogBrew ne déduit pas et ne remplace pas ces valeurs.NativeCrashConfiguration a deux limites facultatives :
Une valeur hors de sa plage fait échouer la configuration avec
crash_invalid_configuration.
Activer la capture des blocages
La capture des blocages est désactivée quandwatchdog vaut nil. Pour
l’activer, remplacez la déclaration de watchdog ci-dessus avant d’appeler
install() :
artifactIdentity. Sans elle, la configuration échoue avec
crash_invalid_configuration.
Gardez un seul objet crashCapture pendant toute la durée de vie du processus.
Un second objet de capture ne peut pas s’installer. Son appel à install()
échoue avec crash_capture_owned. Pour changer le seuil, utilisez la nouvelle
valeur au prochain lancement de l’application.
Un blocage terminé est rejoué avec crash.handled à true. Un blocage encore
en cours au moment de l’arrêt du processus est rejoué avec crash.handled à
false.
Les deux formes incluent la métadonnée numérique durationMs. Elles gardent la
même identité d’artefact que les frames des plantages fatals.
Le watchdog se met en pause quand l’application est inactive ou sous un
débogueur. Il suspend aussi la capture en cas de forte pression thermique.
Un seuil court peut signaler comme blocages des traitements normaux du thread
principal. Testez le seuil avec la configuration de build que vous livrez.
L’état géré décrit la reprise. Il ne marque pas le problème comme résolu. Un
blocage géré a quand même figé l’interface : examinez-le aussi.
Rejouer après le lancement
Après l’installation de la capture, rejouez les rapports en attente avec votre client SDK.maxReplayBytes. Vérifiez les trois nombres. Un nombre de rapports en attente
égal à zéro ne prouve pas l’envoi à lui seul.
Activez l’envoi durable avant le rejeu quand une requête échouée doit survivre
à un autre redémarrage. N’appelez pas purge() pendant une reprise habituelle
après un problème de réseau ou d’authentification.
Importer le dSYM correspondant
Archivez l’application avec les informations de débogage activées. Gardez le dSYM du build exact que les utilisateurs exécutent. Inspectez ses UUID d’image.--expect-image-uuid pour chaque architecture requise. La commande
échoue quand l’ensemble des UUID trouvés diffère de l’ensemble attendu.
Vérifiez l’accès au compte. Exécutez ensuite la même commande sans
--dry-run.
status indique le résultat :
Une machine de build peut importer avec une clé d’artefact de projet dans
LOGBREW_TOKEN, au lieu de l’accès au compte. Créez la clé comme indiqué dans
Créer une clé d’artefact. Cet
import renvoie uploaded. Vérifiez ensuite chaque identité avec l’accès au
compte :
status: "found" confirme l’artefact. status: "missing" signifie que
LogBrew n’a aucun artefact pour cette identité.
La résolution s’appuie sur l’UUID d’image et sur l’identité complète de
l’artefact, pas sur le nom du fichier source. Un nouveau build du même code
source peut avoir des UUID différents. Importez le bundle dSYM exact, pas un
dossier de build entier.
Vérifier la lecture depuis LogBrew
Filtrez la liste des problèmes avec le même périmètre d’exécution. Cet exemple sélectionne les problèmesunresolved. Un problème résolu ou archivé
n’apparaît pas.
symbolication. Cet exemple montre
une sélection de champs d’un problème avec un frame résolu, pas la réponse
complète.
Lire les preuves du plantage
Chaque frame a son proprestatus. Le champ symbolication.status utilise les
mêmes valeurs :
Notez un frame non résolu comme non résolu. Ne le présentez pas comme une pile
vide.
LogBrew résout les frames quand vous lisez le problème. Un dSYM importé plus
tard peut résoudre les frames d’un signal plus ancien. Il ne peut pas ajouter
des frames que le signal n’a pas capturés.
Un frame applicatif réduit la recherche dans le code, mais il ne prouve pas la
cause. Pour les Breadcrumbs, la chaîne d’exceptions et les preuves de trace,
lisez l’investigation du problème :
source: "symbolicated" provient d’un
artefact importé. Un frame avec source: "captured" est l’emplacement envoyé
par l’application. Consultez Investiguer un problème
pour les champs de la réponse.
Gardez le périmètre complet (projet, version, environnement et service) à
chaque lecture. N’étendez pas une recherche échouée à d’autres projets.
Vérifier la configuration de production
Utilisez une défaillance de test approuvée dans le build déployé. N’utilisez jamais l’action d’un client comme déclencheur. Vérifiez chaque point dans l’ordre et arrêtez-vous au premier échec :- L’identité d’exécution correspond à l’identité de l’artefact importé.
- Un lancement ultérieur rejoue un signal confirmé, avec zéro rapport supprimé et zéro rapport en attente.
- La liste des problèmes filtrée renvoie le problème de test avec l’état géré attendu.
- Le frame applicatif attendu est résolu.
- Un lancement normal ultérieur n’ajoute pas d’autre occurrence.
Corriger sans risque
Pour investiguer un problème avec l’API dans le cas général, consultez
Investiguer un problème.
