# Tirage Classes — application mobile (Expo / React Native) tirage aléatoire avec pondération par l'ancienneté du dernier tirage Application 100% locale et hors-ligne (aucun compte, aucun serveur) : les classes et l'historique des tirages sont stockés sur l'appareil via AsyncStorage. > **Prérequis :** Node.js ≥ 20.19 (requis par Expo SDK 54). ## Installation rapide (test avec Expo Go) ```bash npm install npx expo install --fix # aligne les versions des dépendances avec le SDK Expo npx expo start ``` Scannez le QR code avec l'app **Expo Go** (iOS ou Android) : l'appli se lance instantanément sur votre téléphone, sans Xcode ni Android Studio. ## Générer une appli installable (sans Expo Go), pour iOS et Android Utilisez EAS Build (gratuit, nécessite un compte Expo) : ```bash npm install -g eas-cli eas login eas build:configure eas build --profile preview --platform all ``` Vous obtenez un lien de téléchargement direct (.apk pour Android à installer directement, .ipa pour iOS via TestFlight ou un profil ad-hoc). ## Fonctionnalités - Créer / modifier / supprimer des classes (nom, nombre d'élèves, pondération max) - Tirer un élève au sort, pondéré par l'ancienneté du dernier tirage - Bouton **Re-tirer** : annule le dernier tirage et en refait un immédiatement - Historique complet des tirages par classe - Aucune authentification, aucun réseau requis après installation ## Structure - `src/models.js` — classes `Classe` et `Tirage` (POO) : logique du tirage pondéré encapsulée en méthodes (`classe.tirer()`, `classe.reTirer()`, `classe.calculerPoids()`), sérialisation JSON (`toJSON()`/`fromJSON()`). Testable indépendamment de React Native. - `src/storage.js` — persistance locale (AsyncStorage), manipule des instances `Classe` - `src/screens/` — écrans (liste, formulaire, détail/tirage) - `App.js` — navigation