Dans une vraie app
La commande à connaître est npx expo prebuild --clean : elle supprime les dossiers natifs existants avant de régénérer, ce que la doc recommande comme option la plus sûre. Sans --clean, prebuild tente de fusionner avec l’existant et une modification manuelle oubliée peut survivre ou casser. --platform ios limite à une plateforme, --no-install saute l’installation des dépendances. npx expo run:ios et run:android lancent prebuild tout seuls si les dossiers manquent, puis les réutilisent tels quels.
Le piège classique : quelqu’un édite ios/Podfile ou AndroidManifest.xml directement pour débloquer un build, ça marche, et six semaines plus tard un prebuild --clean ou un build EAS efface la modification. Tout changement natif doit vivre dans app.json ou dans un config plugin, y compris les réglages de version de SDK via expo-build-properties. Si les dossiers natifs sont committés, il faut le décider explicitement et le documenter, parce qu’EAS Build ne régénère alors plus rien.
En audit, je regarde si android et ios sont ignorés par git, si prebuild --clean passe sans erreur sur un clone frais, et si le diff entre le projet généré et le projet committé est vide. Un diff non vide, c’est une liste de modifications natives non capturées qu’il faut transformer en plugins.
Termes liés
Config plugin
Une fonction JavaScript déclarée dans app.json qui modifie les projets natifs générés par prebuild (Info.plist, manifest, Gradle, Podfile).
Expo
Le framework open source recommandé par React Native : SDK de modules natifs, CLI, prebuild, Expo Router, et les services cloud EAS.
EAS Build
Le service de build hébergé d’Expo : des profils dans eas.json, la gestion des credentials, et des runners macOS et Linux pour iOS et Android.
Autolinking
Le mécanisme qui découvre les librairies natives dans node_modules et les ajoute au Podfile et à Gradle sans édition manuelle.
Development build
Un build debug de votre propre app qui embarque expo-dev-client : vos modules natifs, plus un launcher pour se connecter à Metro.