Source maps - Introduction
Le problème
Section intitulée « Le problème »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:9412Impossible de savoir où ça plante.
Avec source maps
Section intitulée « Avec source maps »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 renderComment ça marche
Section intitulée « Comment ça marche »- Metro génère un
.mapau build EAS (ou local). - Tu uploades le
.mapvers Pionne, identifié par(project_id, release, platform). - Le SDK envoie l’event avec son
releaseetplatform. - Le serveur Pionne retrouve le
.map, déminifie chaque frame, stocke la stack lisible.
Identifier un build
Section intitulée « Identifier un build »Le triplet qui matche un event à un sourcemap :
| Champ | Source dans le SDK | Exemple |
|---|---|---|
project_id | Token pio_live_... | déduit côté serveur |
release | Pionne.init({ release }) | 1.0.0 |
platform | Auto via Platform.OS | ios ou android |
Le release doit matcher exactement entre le SDK et l’upload du sourcemap.
Deux façons d’uploader
Section intitulée « Deux façons d’uploader »- EAS Build (recommandé) → setup auto en une commande.
- Build manuel / CI custom → upload manuel avec la CLI.
Vérifier que ça marche
Section intitulée « Vérifier que ça marche »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
releasematche exactement. - Vérifie que la plateforme matche (iOS vs Android).
- Vérifie le statut de l’upload dans Settings → Source maps de l’app.