Aller au contenu

Source maps - Introduction

En prod, ton bundle JS est minifié en un seul fichier index.android.bundle (ou iOS). Une stack trace ressemble à :

TypeError: undefined is not an object
at index.android.bundle:3:18745
at index.android.bundle:3:21302
at index.android.bundle:1:9412

Impossible de savoir où ça plante.

Metro génère un fichier .map qui mappe chaque position du bundle vers la position originale. Pionne résout cette correspondance côté serveur, à l’ingest, et tu vois :

TypeError: undefined is not an object
at CheckoutScreen.tsx:42:18 in handlePay
at Button.tsx:18:5 in onPress
at App.tsx:12:3 in render
  1. Metro génère un .map au build EAS (ou local).
  2. Tu uploades le .map vers Pionne, identifié par (project_id, release, platform).
  3. Le SDK envoie l’event avec son release et platform.
  4. Le serveur Pionne retrouve le .map, déminifie chaque frame, stocke la stack lisible.

Le triplet qui matche un event à un sourcemap :

ChampSource dans le SDKExemple
project_idToken pio_live_...déduit côté serveur
releasePionne.init({ release })1.0.0
platformAuto via Platform.OSios ou android

Le release doit matcher exactement entre le SDK et l’upload du sourcemap.

Après un upload, déclenche un crash en prod. Dans le dashboard, l’event doit afficher des chemins de fichiers .tsx/.ts et non index.android.bundle. Si ce n’est pas le cas :

  • Vérifie que release matche exactement.
  • Vérifie que la plateforme matche (iOS vs Android).
  • Vérifie le statut de l’upload dans Settings → Source maps de l’app.