Progression
0 %
0/32 étapes terminées
Avancé · 13 min de lecture
Écrire du natif avec Expo Modules
Quand JavaScript ne suffit plus : Swift, Kotlin et config plugins
1Définition
L'Expo Modules API permet d'écrire des modules natifs en Swift et en Kotlin avec une syntaxe déclarative, puis de les appeler depuis JavaScript. Les config plugins, eux, modifient les projets natifs générés sans les éditer à la main.
2Principes fondamentaux
01
Quand passer au natif
Accès à une API système non couverte, SDK propriétaire, traitement lourd (image, audio) ou vue native spécifique. Vérifie d'abord qu'un module existant ne fait pas déjà le travail.
02
Une API déclarative
Un module décrit son nom, ses fonctions synchrones et asynchrones, ses événements et ses vues dans une définition unique, similaire en Swift et en Kotlin.
03
La génération native continue (CNG)
Les dossiers ios/ et android/ peuvent être régénérés à partir de la configuration avec npx expo prebuild. On ne les modifie pas à la main : on écrit des config plugins.
3Exemples pratiques
Un module en Swift
1// ios/TouchePlusModule.swift2import ExpoModulesCore3 4public class TouchePlusModule: Module {5 public func definition() -> ModuleDefinition {6 Name("TouchePlus")7 8 Function("salut") { (prenom: String) -> String in9 return "Salut \(prenom), depuis Swift !"10 }11 12 AsyncFunction("vibrer") { (duree: Int) in13 // appel d'une API système14 }15 }16}Le même module s'écrit presque à l'identique en Kotlin. Côté JS : requireNativeModule('TouchePlus').salut('Awa').
Un config plugin
1// plugins/withCamera.js2const { withInfoPlist } = require('expo/config-plugins');3 4module.exports = function withCamera(config, { message }) {5 return withInfoPlist(config, (cfg) => {6 cfg.modResults.NSCameraUsageDescription = message;7 return cfg;8 });9};Ajouté dans app.json (plugins), il écrit la bonne clé dans Info.plist à chaque génération du projet iOS.
4Erreurs courantes
Modifier ios/ à la main
À éviter
// édition directe de ios/MonApp/Info.plistÀ faire
// un config plugin ou la clé correspondante dans app.jsonPourquoi : Au prochain prebuild, les modifications manuelles sont écrasées.
Tester un module natif dans Expo Go
À éviter
npx expo start // puis ouvrir dans Expo GoÀ faire
npx expo run:ios // ou un development build via EASPourquoi : Expo Go ne contient que les modules du SDK Expo : ton code natif n'y existe pas.
5Subtilités à connaître
- ◆
npx create-expo-module@latest --localcrée un module directement dans ton projet, sans publier de paquet. - ◆Les événements natifs se déclarent avec
Events("surChangement")et s'écoutent côté JS avecaddListener. - ◆Une vue native se déclare avec
View(MaVue.self)et ses props avecProp("couleur").
6Techniques d'expert
Des types partagés
Les Record d'Expo Modules convertissent automatiquement des objets JS en structures Swift/Kotlin typées : fini la validation manuelle de dictionnaires.
Des vues natives performantes
Pour une carte, un lecteur vidéo ou une caméra, exposer une vue native évite d'aller-retour coûteux entre JS et natif à chaque image.
Publier en interne
Un module local peut devenir un paquet privé partagé entre plusieurs apps de l'entreprise.
7Sur le terrain
- Les applis de santé lisent des capteurs (podomètre, fréquence cardiaque) via des modules natifs.
- Les applis de paiement intègrent les SDK natifs des terminaux et des banques.
- Les applis photo déportent le traitement d'image en Swift et Kotlin pour la vitesse.
8Vérifie ta compréhension
Question 1/3
Score 0
Pourquoi ne pas éditer ios/ à la main avec CNG ?
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.