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

Autolinking

Le mécanisme qui découvre les librairies natives dans node_modules et les ajoute au Podfile et à Gradle sans édition manuelle.

Définition

L’autolinking est le mécanisme par lequel un projet React Native découvre le code natif des librairies installées dans node_modules et le relie automatiquement au build iOS et Android. Avant lui, ajouter une dépendance native demandait d’éditer le Podfile, settings.gradle, MainApplication et parfois le projet Xcode à la main, avec les commandes react-native link qui laissaient des résidus. Aujourd’hui, le script react_native_pods.rb appelé par le Podfile (use_native_modules!) lit la sortie de react-native config et ajoute chaque librairie comme pod local ; sur Android, autolinkLibrariesWithApp dans settings.gradle et app/build.gradle génère la liste des packages à enregistrer. Les modules Expo ont leur propre autolinking, piloté par expo-module.config.json, qui coexiste avec celui de la CLI. Un module natif introuvable au runtime alors que le package est installé est presque toujours un problème d’autolinking, surtout dans un monorepo où la dépendance a été hissée à la racine.

Dans une vraie app

Dans un projet, l’autolinking se voit dans le Podfile (config = use_native_modules!), dans android/settings.gradle (le plugin React Native Gradle) et dans android/app/build.gradle (autolinkLibrariesWithApp()). Chaque librairie doit fournir un .podspec à sa racine et, côté Android, un build.gradle ; une librairie qui en manque ne sera pas linkée, sans erreur explicite. Pour exclure une librairie sur une plateforme ou pointer vers un chemin local, react-native.config.js accepte une entrée dependencies avec platforms.ios: null ou root.

Le cas qui fait perdre des heures est le monorepo. L’autolinking cherche dans le node_modules de l’app ; une dépendance hissée à la racine du workspace ou installée en mode isolé (pnpm) peut lui échapper. Expo a ajouté experiments.autolinkingModuleResolution dans app.json au SDK 54, activé automatiquement pour les apps en monorepo depuis le SDK 55. Quand un module natif « n’existe pas » au runtime alors que le package est installé, je commence par npx expo-modules-autolinking search ou npx react-native config pour voir ce que le build voit réellement.

Avec le support expérimental de Swift Package Manager (React Native 0.87 et 0.88), l’autolinking iOS prend une seconde forme : npx react-native spm génère les références de packages, et une librairie doit alors fournir un Package.swift (ou le générer avec npx react-native spm scaffold), ses réglages SwiftPM allant dans la section swiftpmConfig de son package.json.

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.