Aller au contenu
useffect.sh
Planifier 30 min avec un senior
Outillage

Prebuild (Continuous Native Generation)

La commande Expo qui génère les dossiers android et ios à partir de app.json et des config plugins, au lieu de les maintenir à la main.

Définition

Prebuild est la commande d’Expo (npx expo prebuild) qui génère les projets natifs android et ios à partir d’un template correspondant à votre version de SDK, puis y applique votre configuration app.json et vos config plugins. C’est l’implémentation par Expo d’un principe plus large, la Continuous Native Generation (CNG) : les projets natifs sont des artefacts éphémères, produits quand on en a besoin (build, debug) et régénérables à tout moment, et la source de vérité est la configuration. Prebuild remplace la maintenance manuelle de fichiers comme Info.plist, AndroidManifest.xml ou le Podfile, et les merges douloureux à chaque upgrade de React Native. Dans un projet qui l’utilise, android et ios sont dans le .gitignore, et EAS Build lance prebuild automatiquement quand ces dossiers sont absents. Un dossier ios absent du dépôt mais présent sur le disque après un build en est la signature, tout comme un tableau plugins dans app.json qui liste des config plugins.

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.

Nos offres sur ce sujet

Sources

Les 35 termes du glossaire

Un de ces sujets bloque votre app ?

30 minutes avec un senior pour regarder le problème dans votre code. Gratuit.