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

Prebuilt (React Native précompilé)

Le cœur de React Native livré en binaires précompilés (XCFrameworks iOS, AAR Android) téléchargés au build, au lieu d’être recompilé depuis les sources.

Définition

« Prebuilt », ou React Native précompilé, désigne la distribution du cœur de React Native sous forme de binaires déjà compilés, téléchargés pendant l’installation des dépendances, à la place d’une compilation depuis les sources C++ à chaque build propre. Sur Android, le cœur est consommé depuis longtemps en artefacts Maven (react-android, hermes-android). Sur iOS, la compilation de React Native et de ses dépendances (folly, boost, glog) représentait une grande partie du temps de build ; React Native 0.80 a introduit en expérimental des dépendances précompilées, la 0.81 un cœur précompilé en opt-in (RCT_USE_RN_DEP=1 et RCT_USE_PREBUILT_RNCORE=1), et depuis la 0.84 les XCFrameworks sont téléchargés par défaut au pod install. Expo a suivi la même logique au SDK 58 avec des binaires précompilés d’expo-modules-core sur Android. La contrepartie : pour modifier ou patcher le cœur, ou désactiver Hermes V1, il faut repasser par les sources. Vous rencontrez ce terme dans les logs de pod install et dans la plupart des discussions sur le temps de build.

Dans une vraie app

Pour voir si un projet en profite, pod install affiche le téléchargement des artefacts ReactNativeCore et ReactNativeDependencies, et ios/Pods contient des .xcframework au lieu d’arborescences de sources sous React-Core. RCT_USE_PREBUILT_RNCORE=0 bundle exec pod install revient aux sources ; c’est obligatoire pour patch-package sur le cœur, pour RCT_REMOVE_LEGACY_ARCH=0, et pour revenir à l’ancien Hermes. Depuis la 0.88, les artefacts sont téléchargés d’abord depuis le miroir Maven de React Native, puis depuis Maven Central en secours, ce qui compte derrière un proxy d’entreprise où une des deux sources peut être bloquée.

Le gain annoncé est élevé : les notes de la 0.81 parlent de temps de compilation divisés jusqu’à 10 sur iOS. Expo donne un chiffre pour Android : sur un projet SDK 58 vierge, un build debug propre pour les quatre ABI passe d’environ 80 à 39 secondes sur un M3 Pro. Les builds incrémentaux, eux, changent peu. Le plus gros bénéfice se voit en CI, où chaque build part d’un cache vide, et sur les machines des développeurs qui touchent rarement au natif.

Ce que je vérifie : que la CI ne force pas RCT_USE_PREBUILT_RNCORE=0 sans raison documentée, que le cache CI ne stocke pas des XCFrameworks d’une version précédente de React Native (hash sur Podfile.lock), et sur Android que android.buildExpoModulesCoreFromSource n’est pas activé par un ancien contournement.

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.