Application iOS native (SwiftUI) développée pour l'Association Française du Syndrome de Rett afin d'accompagner les parents et aidants dans le suivi quotidien d'enfants atteints du syndrome de Rett.
- 🔐 Authentification : Sign in with Apple + session Keychain
- 👤 Profil enfant : prénom, date de naissance, toggle épilepsie, liste médicaments
- 📰 Actualités AFSR : lecture des articles depuis l'API Statamic (pull-to-refresh, cache offline)
- 🚨 Suivi d'épilepsie : chronomètre d'urgence (gros boutons), qualification type/déclencheur, historique, export CSV, intégration
HKCategoryType(.seizure) - 💊 Plan médicamenteux : CRUD médicaments, vue journalière par moment (matin/midi/soir), notifications locales, marquage des prises
- 👁️ Jeu du regard "tarte à la crème" : ARKit
ARFaceTrackingConfiguration, logique de dwell, animations, mode mock simulateur - ⚙️ Réglages : gestion permissions, export CSV complet, effacement, déconnexion
- SwiftUI (iOS 17+)
@Observable(Swift 5.9 macro)- SwiftData (persistance locale)
- HealthKit, ARKit, AuthenticationServices, UserNotifications, WebKit
- Aucune dépendance tierce
RettApp/
├── RettAppApp.swift # Entry point @main
├── ContentView.swift # TabView racine
├── Core/
│ ├── Auth/ # AuthManager + SignInView
│ ├── Profile/ # ChildProfile + ProfileSetupView
│ └── HealthKit/ # HealthKitManager
├── Features/
│ ├── News/ # Actualités AFSR
│ ├── SeizureTracker/ # Suivi crises
│ ├── MedicationTracker/ # Plan & prises
│ ├── EyeGame/ # Jeu ARKit
│ └── Settings/ # Réglages
├── Shared/
│ ├── Components/ # Boutons, cartes, état vide
│ └── Theme/ # AFSRTheme (couleurs, typo, tokens)
└── Resources/
├── Info.plist
├── RettApp.entitlements
├── Assets.xcassets
└── Localizable.strings
RettAppTests/ # Tests unitaires
Les composants partagés gardent le préfixe
AFSR*(AFSRButton,AFSRTheme,AFSRPurple…) car ils incarnent la charte graphique de l'Association Française du Syndrome de Rett.
Le dépôt contient déjà RettApp.xcodeproj. Après clone :
open RettApp.xcodeprojSi tu ajoutes/renommes/déplaces des fichiers sources, régénère le .xcodeproj pour que Xcode les détecte :
# Option 1 — script Ruby (cross-platform, dépendance unique : gem xcodeproj)
gem install xcodeproj --user-install
ruby scripts/generate_xcodeproj.rb
# Option 2 — XcodeGen (macOS)
brew install xcodegen
xcodegen generateLes deux utilisent la même structure de dossiers comme source de vérité.
Après le premier open RettApp.xcodeproj :
- Target RettApp → Signing & Capabilities → sélectionne ton Team
- Vérifie que ces capabilities sont présentes (elles sont déclarées dans
RettApp.entitlementsmais doivent être actives dans ton profil) :- Sign in with Apple
- HealthKit (Clinical Health Records désactivé)
- Push Notifications
- Background Modes → Background fetch
Éditer RettApp/Features/News/Models/NewsArticle.swift :
enum APIConfig {
static var baseURL = URL(string: "https://www.afsr.fr/api")!
static var apiKey: String = "" // bearer token si endpoint protégé
}- Simulateur : le jeu eye-tracking utilise automatiquement un mock (positions aléatoires autour de la cible) — la caméra TrueDepth n'existe pas sur simulateur
- Device physique : nécessite un iPhone X+ ou iPad Pro (Face ID) pour le jeu eye-tracking. Les autres modules fonctionnent sur tout iPhone/iPad iOS 17+
xcodebuild test -scheme RettApp -destination 'platform=iOS Simulator,name=iPhone 15'Tests inclus :
SeizureViewModelTests: calcul durée, transitions d'état, timerGazeProcessorTests: logique de dwell, hit-test, classification horaire
- HealthKit : Apple Santé n'expose pas d'API tierce pour les médicaments. Les prises restent locales (SwiftData) et sont exportables en CSV. Seules les crises sont écrites dans HealthKit (
HKCategoryType(.seizure), iOS 17+). - Multi-profils : HealthKit n'est pas conçu pour gérer plusieurs personnes. Le prénom de l'enfant est stocké en métadonnée (
AFSRChildFirstName). - Confidentialité : aucune donnée de santé n'est envoyée à un serveur tiers. Tout reste sur l'appareil + Apple Santé.
- Widget WidgetKit "Démarrer une crise" depuis l'écran d'accueil
- Sons et assets graphiques personnalisés (splash, confettis)
- Export PDF médical formaté
- Sync iCloud optionnelle (CloudKit + SwiftData)
- Accessibilité : test complet VoiceOver, Dynamic Type jusqu'à XXXL
Copyright © AFSR. Voir LICENSE.