PD-96 — Initialisation du projet mobile iOS (React Native + TypeScript)¶
📚 Navigation User Story
| Document | | | ---------- | -- | | 📋 **Spécification** | *(ce document)* | | 🛠️ [Plan d'implémentation](PD-96-plan.md) | | | ✅ [Critères d'acceptation](PD-96-acceptability.md) | | | 📝 [Retour d'expérience](PD-96-rex.md) | | [← Retour à mobile-ios](../PD-195-epic.md) · [↑ Index User Story](index.md)Références¶
- EPIC : MOBILE-IOS
- JIRA : PD-96
- Repo(s) concernés : mobile-ios
Objectif¶
Initialiser le socle technique de l'application mobile iOS ProbatioVault afin de disposer d'un projet React Native fiable, maintenable et sécurisé, servant de base à l'ensemble des développements fonctionnels et cryptographiques ultérieurs.
Cette User Story vise à établir un environnement de développement standardisé, testé et intégré au pipeline CI/CD.
Description fonctionnelle¶
L'application mobile iOS doit disposer d'un projet React Native fonctionnel, configuré avec TypeScript en mode strict, des outils de qualité de code, des tests unitaires et une structure de dossiers claire.
Le projet doit permettre :
- le développement d'écrans applicatifs iOS ;
- l'intégration ultérieure de modules de sécurité et de cryptographie ;
- l'exécution de tests automatisés ;
- une validation systématique via un pipeline CI/CD.
Aucune fonctionnalité métier n'est attendue à ce stade, hormis un écran de test confirmant le bon démarrage de l'application.
Spécifications techniques¶
| Élément | Valeur |
|---|---|
| Framework | Expo SDK 54 |
| Langage | TypeScript strict |
| Tests | Jest avec coverage ≥ 80% |
| Build | EAS Build (Expo Application Services) |
| CI/CD | GitLab CI (lint, type-check, test, sonar, build EAS) |
| Qualité | ESLint + Prettier + SonarQube |
Périmètre¶
Inclus¶
- Projet Expo initialisé (SDK 54).
- Configuration de TypeScript en mode strict (
noImplicitAny,strictNullChecks). - Arborescence conforme (
src/components,screens,services,hooks,store). - Mise en place des outils de linting (ESLint) et de formatage (Prettier).
- Mise en place des tests unitaires Jest avec seuil de couverture ≥ 70%.
- Création d'une structure de dossiers scalable et lisible.
- Configuration de la navigation applicative de base.
- Mise en place d'un pipeline CI/CD GitLab (lint, type-check, test, sonar, build EAS).
- Intégration SonarQube pour analyse qualité.
- Documentation de la structure et des conventions du projet.
Exclu¶
- Implémentation de fonctionnalités métier.
- Implémentation de la cryptographie client-side.
- Intégration Android, Web ou Desktop.
- Gestion de comptes utilisateurs ou d'authentification.
- Déploiement App Store ou signature Apple.
Contraintes¶
- Qualité & maintenabilité
- TypeScript doit être configuré en mode strict.
- Les règles ESLint doivent inclure des règles de sécurité.
- Le formatage du code doit être homogène et automatisé.
-
La structure du projet doit être documentée et cohérente.
-
Tests
- Les tests unitaires doivent être exécutables localement et en CI.
- Un seuil minimal de couverture doit être appliqué.
-
L'échec des tests ou du lint doit bloquer le pipeline.
-
CI/CD
- Le pipeline GitLab doit exécuter lint, tests et build iOS.
-
Le build iOS doit être reproductible sans intervention manuelle.
-
Sécurité
- Aucun secret ne doit être présent dans le code.
- Les dépendances doivent être auditables.
- Les outils de sécurité statique doivent être activés dès l'initialisation.
Diagrammes¶
Pipeline CI/CD — Diagramme de séquence¶
Le pipeline GitLab CI exécute les étapes de validation de manière séquentielle. L'échec d'une étape bloque les suivantes (INV : tests et lint bloquants).
sequenceDiagram
participant Dev as Développeur
participant GL as GitLab CI
participant ES as ESLint + Prettier
participant TS as TypeScript (tsc)
participant JT as Jest
participant SQ as SonarQube
participant EAS as EAS Build
Dev->>GL: git push
GL->>ES: Lint (ESLint + Prettier)
alt Lint KO
ES-->>GL: Erreur lint
GL-->>Dev: Pipeline FAILED
else Lint OK
ES-->>GL: OK
GL->>TS: Type-check (tsc --noEmit, strict)
alt Type-check KO
TS-->>GL: Erreur TS strict
GL-->>Dev: Pipeline FAILED
else Type-check OK
TS-->>GL: OK
GL->>JT: Tests Jest (coverage >= 70%)
alt Tests KO ou coverage < 70%
JT-->>GL: Échec tests / seuil non atteint
GL-->>Dev: Pipeline FAILED
else Tests OK
JT-->>GL: OK (coverage >= 70%)
GL->>SQ: Analyse SonarQube
alt Quality Gate ERROR
SQ-->>GL: QG FAILED
GL-->>Dev: Pipeline FAILED
else Quality Gate OK
SQ-->>GL: QG PASSED
GL->>EAS: Build iOS (EAS Build)
alt Build KO
EAS-->>GL: Erreur build
GL-->>Dev: Pipeline FAILED
else Build OK
EAS-->>GL: Artefact .ipa
GL-->>Dev: Pipeline SUCCESS
end
end
end
end
end Pipeline CI/CD — Diagramme d'états¶
Chaque étape du pipeline est un état. La transition vers l'état suivant n'est possible que si l'étape courante réussit (INV : aucun secret dans le code, ESLint avec règles de sécurité, TypeScript strict).
stateDiagram-v2
[*] --> Lint
Lint --> TypeCheck : lint OK
Lint --> Failed : lint KO
TypeCheck --> Tests : tsc strict OK
TypeCheck --> Failed : erreur TS
Tests --> Sonar : coverage >= 70%
Tests --> Failed : tests KO / coverage < 70%
Sonar --> Build_EAS : Quality Gate PASSED
Sonar --> Failed : Quality Gate ERROR
Build_EAS --> Success : artefact .ipa généré
Build_EAS --> Failed : build KO
Success --> [*]
Failed --> [*]
state Failed {
direction LR
[*] --> PipelineFailed
note right of PipelineFailed : Bloque le merge.\nCorrection requise.
} Hypothèses¶
- L'équipe de développement dispose d'un environnement Node.js compatible.
- Expo est retenu comme base technique pour la phase initiale.
- Les outils standards de l'écosystème React Native sont suffisants pour les besoins actuels.
- Les modules de sécurité avancés seront ajoutés dans des User Stories dédiées.
Liens documentaires¶
- Architecture :
- Mobile iOS Architecture Overview
- EPIC :
- MOBILE-IOS
- Qualité & Sécurité :
- Conventions de développement ProbatioVault
- Politique de qualité et de tests