Capture automatique
Dès l’appel à Pionne.init(), le SDK installe trois mécanismes globaux pour capturer ce qui passerait normalement à la trappe.
1. Erreurs JS non gérées
Section intitulée « 1. Erreurs JS non gérées »Pionne s’abonne à ErrorUtils.setGlobalHandler (mécanisme React Native standard). Toute exception qui remonte jusqu’à la boucle de rendu sans être catchée est capturée avec mechanism: { type: 'global', handled: false }.
// Capturé automatiquement, aucun code requisfunction MyScreen() { throw new Error('Boom');}2. Promesses rejetées (Hermes)
Section intitulée « 2. Promesses rejetées (Hermes) »Sur Hermes, Pionne active HermesInternal.enablePromiseRejectionTracker :
// Ces deux cas sont capturésfetch('/x').then((r) => r.nopeNotAFunction());
(async () => { throw new Error('async crash');})();3. Erreurs dans les timers
Section intitulée « 3. Erreurs dans les timers »Pionne wrappe setTimeout, setInterval et requestAnimationFrame pour catcher les exceptions qui s’échappent du callback :
setTimeout(() => { throw new Error('Timer crash'); // capturé avec mechanism.type = 'timer'}, 1000);Limites en mode développement
Section intitulée « Limites en mode développement »| Cas | Comportement |
|---|---|
| RedBox dev | Affichée par RN, l’event est aussi envoyé |
| HMR / Fast Refresh | Les handlers sont préservés à travers les reloads |
| Hermes en dev | Promise tracker actif uniquement après Pionne.init |
| Metro symbolication | Stacks lisibles en dev, voir source maps pour la prod |
Désactiver en développement
Section intitulée « Désactiver en développement »Le SDK envoie tout par défaut, même en dev. Si tu veux uniquement la prod :
Pionne.init({ token: '...', enabled: !__DEV__, // pas d'envoi en dev});Tester l’auto-capture
Section intitulée « Tester l’auto-capture »<Button title="Crash sync" onPress={() => { throw new Error('sync'); }} /><Button title="Crash async" onPress={async () => { throw new Error('async'); }} /><Button title="Crash timer" onPress={() => setTimeout(() => { throw new Error('timer'); }, 100)} />Les trois doivent apparaître dans le dashboard sans try/catch.