Application iOS de gestion de tâches et de projets — Projet UA2
Cours 25921 IFM · Développement d'applications mobiles pour iOS · H-2026
Mimo-Minder est une application iOS native conçue avec SwiftUI qui permet de gérer ses tâches quotidiennes et ses projets de façon claire, fluide et personnalisée. Elle repose sur une interface soignée, une architecture MVVM rigoureuse, une persistance JSON locale et un onboarding animé au premier lancement.
| Onboarding (Bienvenue) | Accueil (Tableau de bord) | Liste des tâches | Liste des projets | Création rapide | Profil utilisateur | Mascotte (Mimo) |
|---|---|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
- Vue d'ensemble en temps réel : tâches urgentes, projets actifs, progression globale
- Raccourcis rapides vers chaque section de l'app via une grille de navigation
- Affichage adaptatif selon le profil de l'utilisateur (prénom, avatar)
- Liste complète des tâches avec filtrage (Toutes / Aujourd'hui / En cours / Terminées / Archivées) et tri (Date · Priorité · Alphabétique)
- Vue de détails complète : titre, date, priorité, tags, checklist, notes, projet lié
- Édition inline directement dans la vue de détail
- Swipe gauche → supprimer / archiver
- Swipe droit → marquer comme terminée
- Double tap → compléter instantanément
- Menu contextuel (long press) → Modifier · Terminer · Archiver · Supprimer
- Liste des projets avec filtrage (Tous / Actifs / En pause / Terminés / Archivés)
- Vue de détail avec jauge de progression et jauge de temps écoulé
- Association des tâches existantes à un projet
- Swipe → archiver / supprimer
- Menu contextuel (long press) → Changer le statut · Archiver · Supprimer
- Formulaire unique pour créer une tâche ou un projet (bascule animée)
- Champs : titre, date limite, priorité, tags, checklist, couleur d'accent, description
- Validation instantanée avec feedback haptique
- Prénom, adresse e-mail, avatar parmi 6 personnages
- Données sauvegardées en JSON et restaurées à chaque lancement
- Affiché uniquement au premier lancement (
@AppStorage) - Slide de bienvenue plein-écran (dégradé animé)
- 6 slides de présentation des fonctionnalités (layout deux colonnes : vidéo en boucle + description)
- Saisie du prénom et de l'e-mail avant d'accéder à l'app
Le projet suit le pattern MVVM (Model — View — ViewModel) avec une séparation claire des responsabilités :
Mimo-minder/
├── App/
│ ├── mimoMinderApp.swift # Point d'entrée, injection des environnements
│ ├── AppTheme.swift # Tokens de design (couleurs, typographie)
│ └── NavDestination.swift # Destinations de navigation typées
│
├── Models/
│ ├── Task.swift # Modèle de tâche (struct, Codable)
│ ├── Project.swift # Modèle de projet (struct, Codable)
│ └── Enum.swift # Enums : priorité, statut, filtres, destinations
│
├── ViewModels/
│ ├── TaskViewModel.swift # CRUD tâches, filtrage, tri, persistance
│ └── ProjetViewModel.swift # CRUD projets, archivage, liaison tâches
│
├── Services/
│ ├── PersistenceManager.swift # Sauvegarde/chargement JSON dans Documents/
│ ├── NavigationState.swift # État de navigation partagé entre vues
│ └── ToastManager.swift # Notifications toast non-bloquantes
│
├── Views/
│ ├── MainView.swift # Conteneur principal (sidebar + onglets)
│ ├── HomeView.swift # Tableau de bord
│ ├── TachesView.swift # Liste des tâches
│ ├── TaskDetailView.swift # Détail et édition d'une tâche
│ ├── ProjetsView.swift # Liste des projets
│ ├── ProjectDetailView.swift # Détail et édition d'un projet
│ ├── CreateView.swift # Formulaire de création
│ ├── ProfileView.swift # Profil utilisateur
│ └── OnboardingView.swift # Écran de bienvenue (premier lancement)
│
├── Components/
│ ├── TaskCard.swift # Carte de tâche (gestes, menu contextuel)
│ ├── ProjectCard.swift # Carte de projet (gestes, menu contextuel)
│ ├── TaskCardList.swift # Liste réutilisable de tâches
│ ├── ProjectCardList.swift # Liste réutilisable de projets
│ ├── NavigationGrid.swift # Grille de raccourcis (HomeView)
│ ├── SideNavBar.swift # Navigation latérale
│ └── ToastOverlay.swift # Overlay de notifications
│
└── Helpers/
└── helpers.swift # Extensions utilitaires (Color, Date, etc.)
| ID | Exigence | Implémentation |
|---|---|---|
| F-01 | Liste d'éléments | TaskCardList + ProjectCardList depuis TaskViewModel / ProjetViewModel |
| F-02 | Vue de détails | TaskDetailView + ProjectDetailView via NavigationStack |
| F-03 | Min. 2 gestes | Swipe (swipeActions), Double-tap (TapGesture(count:2)), Long-press (contextMenu) |
| F-04 | Min. 1 menu contextuel | .contextMenu sur TaskCard et ProjectCard |
| F-05 | Interface SwiftUI | 100 % SwiftUI, responsive, dark/light mode |
| A-01 | Architecture MVVM | @Observable · TaskViewModel · ProjetViewModel · séparation stricte |
| A-02 | Commentaires | // MARK:, docstrings ///, commentaires inline dans tous les fichiers |
| A-03 | NavigationStack |
NavigationStack + .navigationDestination dans TachesView, HomeView, ProjetsView |
| Geste | Où | Action |
|---|---|---|
| Swipe gauche | TaskCard, ProjectCard |
Supprimer, archiver |
| Swipe droit | TaskCard |
Marquer comme terminée |
| Double-tap | TaskCard |
Compléter la tâche instantanément |
| Long-press | TaskCard, ProjectCard |
Ouvre le menu contextuel |
| Technologie | Rôle |
|---|---|
| SwiftUI + iOS 17 | Interface utilisateur complète |
@Observable (Swift 5.9) |
ViewModels réactifs sans ObservableObject |
AVFoundation + AVKit |
Vidéos en boucle dans l'onboarding |
JSONEncoder / JSONDecoder |
Persistance locale des données |
UserDefaults + @AppStorage |
Préférences légères (filtre, tri, onboarding) |
UIImpactFeedbackGenerator |
Retour haptique sur les interactions clés |
- Cloner ou décompresser le dossier du projet
- Ouvrir
Tuto-swift.xcodeprojdans Xcode 16+ - Sélectionner un simulateur iPhone (iOS 17+)
⌘ + Rpour lancer l'application
Aucune dépendance externe · Aucun Swift Package Manager requis
Nom : Kryss Rayane
GitHub : Kryss_Sampi
Projet UA2 — IFM 25921
Enseignant : Mathieu Robson
Session : Hiver 2026






