Dans une vraie app
Dans un projet React Native à jour, ls ios/Pods montre des .xcframework pour React Native, ses dépendances tierces (boost, folly, glog, fmt) et Hermes ; RCT_USE_PREBUILT_RNCORE=0 bundle exec pod install force le retour aux sources, utile pour déboguer dans le cœur ou appliquer un patch. Avec SwiftPM, ce sont les mêmes XCFrameworks qui sont consommés, plus deux bundles d’en-têtes (ReactNativeHeaders, ReactNativeDependenciesHeaders) introduits en 0.87.
Les erreurs typiques se lisent au link : « building for iOS Simulator, but linking in object file built for iOS » signale un binaire sans tranche simulateur arm64, fréquent avec un SDK tiers ancien ; la solution est une version à jour du SDK, pas l’exclusion d’architecture EXCLUDED_ARCHS=arm64 qui condamne au simulateur Rosetta. Un XCFramework signé par son éditeur peut aussi échouer à la vérification de signature si Xcode est configuré pour l’exiger.
Pour une librairie maison distribuée en binaire, la question à poser est la compatibilité des versions : un XCFramework Swift compilé sans « library evolution » (BUILD_LIBRARY_FOR_DISTRIBUTION) ne fonctionne qu’avec la version exacte du compilateur qui l’a produit, et un XCFramework compilé contre une version de React Native ne se linke pas forcément avec la suivante. C’est la raison pour laquelle les binaires du cœur sont publiés par version exacte et téléchargés depuis le miroir Maven de React Native, avec Maven Central en secours.
Termes liés
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.
Swift Package Manager (SwiftPM)
Le gestionnaire de paquets officiel de Swift, intégré à Xcode, que React Native adopte en remplacement de CocoaPods (expérimental en 0.87 et 0.88).
CocoaPods
Le gestionnaire de dépendances iOS historique de React Native (Podfile, pod install, .xcworkspace), en maintenance et en cours de remplacement par SwiftPM.
Hermes
Le moteur JavaScript de Meta pour React Native, par défaut depuis la 0.70, qui précompile le bundle en bytecode au build.