Retour au portfolio
đ Informations gĂ©nĂ©rales
Nom du projet : Coach v1 - Application de calcul d'IMG
Date de création : Projet BTS SIO SLAM
Auteur : Abdelmalek Elidrissi
Type : Application mobile multiplateforme
đŻ Objectifs du projet
- Calcul de l'IMG (Indice de Masse Grasse)
- Ăvaluation de la condition physique selon le sexe
- Affichage visuel des résultats avec des indicateurs
- Interface utilisateur simple et intuitive
đ ïž Technologies utilisĂ©es
Framework
.NET MAUI
C#
XAML
Plateformes supportées
Android
iOS
Windows
macOS (MacCatalyst)
Architecture
MSTest
đ± .NET MAUI : PrĂ©sentation dĂ©taillĂ©e
Qu'est-ce que .NET MAUI ?
.NET MAUI (Multi-platform App UI) est un framework open-source développé par Microsoft qui permet de créer des applications natives pour plusieurs plateformes à partir d'un seul code source partagé.
đŻ Objectif principal : DĂ©velopper une fois, dĂ©ployer partout (Android, iOS, Windows, macOS) avec des performances natives et une expĂ©rience utilisateur optimale sur chaque plateforme.
Historique et évolution
Principaux concepts et architecture
1. Code partagé (Shared Code)
Le code métier, la logique et les modÚles de données sont écrits une seule fois dans un projet partagé et fonctionnent sur toutes les plateformes.
// Exemple : Code partagé dans MauiAppCoach.Core
public class Profil
{
// Cette classe fonctionne sur Android, iOS, Windows, macOS
public double CalculIMG() { ... }
}
2. Code spécifique par plateforme (Platform-Specific Code)
Pour accéder aux fonctionnalités natives de chaque plateforme, MAUI permet d'écrire du code spécifique dans le dossier Platforms/.
Platforms/
âââ Android/ # Code spĂ©cifique Android
âââ iOS/ # Code spĂ©cifique iOS
âââ Windows/ # Code spĂ©cifique Windows
âââ MacCatalyst/ # Code spĂ©cifique macOS
3. XAML (eXtensible Application Markup Language)
Langage déclaratif pour créer l'interface utilisateur de maniÚre séparée de la logique métier.
<ContentPage>
<StackLayout>
<Entry x:Name="entPoids" />
<Button Text="Calculer" Clicked="btCalculer_Clicked" />
</StackLayout>
</ContentPage>
Avantages du XAML :
- Séparation claire entre UI et logique
- Design visuel facilité
- Binding de données déclaratif
- Styles et ressources réutilisables
Architecture recommandée pour structurer les applications MAUI :
Model
Représente les données et la logique métier (ex: classe Profil)
View
Interface utilisateur définie en XAML (ex: MainPage.xaml)
ViewModel
Intermédiaire entre View et Model, gÚre la logique de présentation et le binding
5. Handlers et Renderers
MAUI utilise un systĂšme de handlers pour mapper les contrĂŽles XAML vers les contrĂŽles natifs de chaque plateforme :
- Android : Les contrĂŽles MAUI sont rendus comme des vues Android natives
- iOS : Conversion en UIKit (UIView, UIButton, etc.)
- Windows : Utilisation de WinUI 3
- macOS : Utilisation de AppKit
Avantages de .NET MAUI
đ Performance native
Les applications compilées sont des applications natives, pas des applications web dans un conteneur. Performance équivalente aux apps développées nativement.
đ° CoĂ»t de dĂ©veloppement rĂ©duit
Un seul code source pour plusieurs plateformes = moins de temps de développement et de maintenance.
đ Partage de code maximal
Jusqu'à 90% de code partagé entre les plateformes, réduisant la duplication et les bugs.
đ ïž ĂcosystĂšme .NET
AccÚs à toutes les bibliothÚques .NET ( .NET10-android , .NET10-ios , .NET10-windows , .NET10 macOs ) et outils de l'écosystÚme .NET.
đŠ Hot Reload
Modifications du code visibles instantanément sans recompiler, accélérant le développement.
đš Interface native
Chaque plateforme utilise ses contrÎles natifs, garantissant une expérience utilisateur authentique.
ContrĂŽles et composants principaux
MAUI fournit une bibliothĂšque riche de contrĂŽles UI :
ContrĂŽles de base
Button - Bouton cliquable
Entry - Champ de saisie texte
Label - Texte affiché
Image - Affichage d'images
RadioButton - Sélection unique
Layouts
StackLayout - Empilement vertical/horizontal
Ressources et styles
MAUI permet de centraliser les ressources (couleurs, styles, images) :
// Dans App.xaml ou ResourceDictionary
<Color x:Key="PrimaryColor">#007ACC</Color>
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="BackgroundColor" Value="{StaticResource PrimaryColor}" />
</Style>
Comparaison avec d'autres technologies
| Technologie |
Avantages |
Inconvénients |
| .NET MAUI |
Performance native, code partagé, écosystÚme .NET |
Courbe d'apprentissage, taille des apps |
| React Native |
ĂcosystĂšme JavaScript, hot reload |
Performance inférieure, dépendances natives |
| Flutter |
Performance, UI personnalisable |
Langage Dart, moins de packages |
| Développement natif |
Performance maximale, accĂšs complet aux APIs |
Code dupliqué, maintenance multiple |
Utilisation dans le projet Coach v1
Dans ce projet, .NET MAUI a été utilisé pour :
- Interface utilisateur : Création de l'UI avec XAML (
MainPage.xaml)
- Logique métier : Code partagé dans
MauiAppCoach.Core (classe Profil)
- Ressources : Images stockées dans
Resources/Images/
- Multiplateforme : MĂȘme code fonctionne sur Android, iOS, Windows, macOS
đĄ Pourquoi .NET MAUI pour ce projet ?
Le choix de .NET MAUI permet de créer une application mobile professionnelle avec un seul code source, tout en bénéficiant des performances natives et de l'expérience utilisateur optimale sur chaque plateforme. C'est idéal pour une application de calcul comme Coach v1 qui nécessite une interface simple mais efficace.
đ Structure du projet
Coach V1/
âââ MauiAppCoach/ # Application principale
â âââ MainPage.xaml # Interface utilisateur principale
â âââ MainPage.xaml.cs # Code-behind de la page principale
â âââ App.xaml # Application XAML
â âââ App.xaml.cs # Point d'entrĂ©e de l'application
â âââ AppShell.xaml # Navigation et structure de l'app
â âââ Platforms/ # Code spĂ©cifique par plateforme
â â âââ Android/
â â âââ iOS/
â â âââ Windows/
â â âââ MacCatalyst/
â âââ Resources/ # Ressources (images, styles)
â â âââ Images/
â â â âââ smiley_parfait.png
â â â âââ smiley_surpoids.png
â â â âââ smiley_tropmaigre.png
â â â âââ smiley.png
â â âââ Styles/
â âââ Tests/ # Tests unitaires
âââ MauiAppCoach.Core/ # BibliothĂšque de classes partagĂ©e
â âââ Modele/
â âââ Profil.cs # ModĂšle de donnĂ©es pour le calcul IMG
âââ TestProjectCoach/ # Projet de tests
âââ MauiAppCoach.slnx # Solution Visual Studio
đ§ FonctionnalitĂ©s implĂ©mentĂ©es
1. Calcul de l'IMG (Indice de Masse Grasse)
L'application calcule l'IMG selon la formule de Deurenberg :
IMG = (1.2 Ă poids / tailleÂČ) + (0.23 Ă Ăąge) - (10.83 Ă sexe) - 5.4
OĂč :
- poids : en kilogrammes
- taille : en centimĂštres (convertie en mĂštres)
- ùge : en années
- sexe : 1 pour homme, 0 pour femme
2. Ăvaluation selon le sexe
Pour les femmes (sexe = 0)
- IMG < 25 : Trop maigre
- 25 †IMG < 30 : Parfait
- IMG â„ 30 : Surpoids
Pour les hommes (sexe = 1)
- IMG < 15 : Trop maigre
- 15 †IMG < 20 : Parfait
- IMG â„ 20 : Surpoids
3. Interface utilisateur
Champs de saisie :
- Poids (en kg)
- Taille (en cm)
- Ăge (en annĂ©es)
- Sélection du sexe (Homme/Femme) via radio buttons
Affichage des résultats :
- Message textuel (Trop maigre / Parfait / Surpoids)
- Valeur de l'IMG avec une décimale
- Image indicative (smiley) selon le résultat :
- smiley_parfait.png
- smiley_surpoids.png
- smiley_tropmaigre.png
4. ModÚle de données
La classe Profil encapsule :
- Les données d'entrée (sexe, poids, taille, ùge)
- Le calcul de l'IMG
- La détermination du message et de l'image à afficher
- Les méthodes getters pour accéder aux résultats
đ» Code principal
Classe Profil
public class Profil
{
private int sexe;
private int poids;
private int taille;
private int age;
private double img;
private string message;
private string image;
public Profil(int sexe, int poids, int taille, int age)
{
this.sexe = sexe;
this.poids = poids;
this.taille = taille;
this.age = age;
CalculIMG();
ResultatIMG();
}
private void CalculIMG()
{
double tailleEnMetres = taille / 100.0;
img = (1.2 * poids / (tailleEnMetres * tailleEnMetres))
+ (0.23 * age)
- (10.83 * sexe)
- 5.4;
}
private void ResultatIMG()
{
if (sexe == 0) // Femme
{
if (img < 25)
{
message = "Trop maigre.";
image = "smiley_tropmaigre.png";
}
else if (img < 30)
{
message = "Parfait.";
image = "smiley_parfait.png";
}
else
{
message = "Surpoids.";
image = "smiley_surpoids.png";
}
}
else // Homme
{
if (img < 15)
{
message = "Trop maigre.";
image = "smiley_tropmaigre.png";
}
else if (img < 20)
{
message = "Parfait.";
image = "smiley_parfait.png";
}
else
{
message = "Surpoids.";
image = "smiley_surpoids.png";
}
}
}
}
MainPage.xaml.cs
private void btCalculer_Clicked(object sender, EventArgs e)
{
int poids = Convert.ToInt32(entPoids.Text);
int taille = Convert.ToInt32(entTaille.Text);
int age = Convert.ToInt32(entAge.Text);
int sexe = rdHomme.IsChecked ? 1 : 0;
Profil profil = new Profil(sexe, poids, taille, age);
CounterLabel.Text = "Votre IMG : " + profil.GetMessage() +
profil.GetImg().ToString("0.0");
imgResultat.Source = profil.GetImage();
}
đž Aperçu de l'application Coach v1
Voici un aperçu réel de l'application Coach v1 en exécution sur un émulateur Android (ici un Pixel 7 - API 33) :
Ăcran principal de l'application Coach v1 : saisie des donnĂ©es et rĂ©sultat de l'IMG.
Description détaillée de l'écran
- En haut, le titre Coach dans la barre d'application, dans la couleur principale de l'application.
- Trois champs de saisie alignés verticalement :
- Poids (65 kg dans l'exemple)
- Taille (171 cm)
- Ăge (19 ans)
- Un groupe de boutons radio pour le sexe :
- Homme (sélectionné dans la capture)
- Femme
- Un bouton principal « Calculer IMG » qui déclenche le calcul à partir des valeurs saisies.
- En dessous, un smiley qui change en fonction du résultat (ici un visage neutre pour un IMG proche de la limite).
- Enfin, le texte de résultat « Votre IMG : 14.8 » qui affiche la valeur calculée formatée avec une décimale.
Interprétation de cet aperçu :
Avec les valeurs de l'exemple (65 kg, 171 cm, 19 ans, Homme), l'application calcule un IMG de 14.8. Cela correspond Ă la catĂ©gorie « Trop maigre » pour un homme, d'oĂč l'affichage d'un smiley qui n'est pas entiĂšrement satisfait. Cet Ă©cran illustre concrĂštement le lien entre la formule mathĂ©matique, la logique mĂ©tier de la classe Profil et le retour visuel donnĂ© Ă l'utilisateur.
đ Installation et dĂ©marrage
Prérequis
- Visual Studio 2022 ou supérieur
- .NET MAUI workload installé
- SDK Android (pour Android)
- Xcode (pour iOS, sur macOS uniquement)
- Windows SDK (pour Windows)
Ătapes d'installation
- Ouvrir la solution
Ouvrir MauiAppCoach.slnx dans Visual Studio
- Restaurer les packages NuGet
dotnet restore
- Compiler l'application
dotnet build
- Lancer l'application
- Sélectionner la plateforme cible (Android, iOS, Windows)
- Appuyer sur F5 ou cliquer sur "Démarrer"
Plateformes disponibles
- Android : Ămulateur ou appareil physique
- iOS : Simulateur iOS (sur macOS uniquement)
- Windows : Application Windows native
- macOS : Application macOS via MacCatalyst
đĄ Points techniques remarquables
Architecture
- Séparation ModÚle/Interface
- Code partagé (MauiAppCoach.Core)
- Code spécifique par plateforme
Calculs
- Formule IMG validée (Deurenberg)
- Conversion cm â mĂštres
- Précision avec une décimale
Interface utilisateur
- XAML déclaratif
- Code-behind C#
- Ressources centralisées
Tests
- Tests unitaires
- MSTest framework
- Validation des calculs
đ DifficultĂ©s rencontrĂ©es et solutions
ProblĂšme 1 : Configuration multiplateforme
Configuration des différentes plateformes (Android, iOS, Windows).
Solution : Utilisation de .NET MAUI qui simplifie la configuration multiplateforme avec des fichiers manifestes spécifiques par plateforme.
ProblÚme 2 : Conversion des unités
Conversion correcte de la taille de centimĂštres en mĂštres pour le calcul.
Solution : Division par 100.0 pour obtenir des mÚtres avec précision décimale.
ProblÚme 3 : Résulat neutre ( ni réussite ni échec )
Obtenir les bons résultat lors de l'exécution des tests unitaires
Solution : Faire référence à l'outil de test et appeler aux différentes solutions.
ProblÚme 4 : Gestion des résultats selon le sexe
Seuils différents pour hommes et femmes.
Solution : Implémentation de la méthode `ResultatIMG()` avec conditions spécifiques selon la valeur de `sexe`.
đ AmĂ©liorations possibles
Fonctionnalités
- Validation des entrées
- Gestion des erreurs (Try-catch)
- Historique des calculs
- Graphiques d'évolution
- Objectifs de poids/IMG
Technique
- Export PDF/CSV
- Localisation multilingue
- ThĂšmes (mode sombre/clair)
- Base de données
- Synchronisation cloud
đ CompĂ©tences dĂ©veloppĂ©es
Développement mobile
- .NET MAUI framework
- XAML déclaratif
- C# orienté objet avancé
Architecture
Code partagé entre plateformes
Modularité (projets séparés)
Calculs et logique métier
- Implémentation formules mathématiques
- Validation des données
- Tests unitaires
Multiplateforme
- Android (configuration et développement)
- iOS (sur macOS)
- Windows (application native)
- macOS (MacCatalyst)
đ Conclusion
Ce projet a permis de découvrir le développement d'applications mobiles multiplateformes avec .NET MAUI. L'application combine une interface utilisateur simple avec une logique de calcul précise pour fournir un outil utile de calcul d'IMG.
L'utilisation de .NET MAUI démontre la capacité à créer des applications natives pour plusieurs plateformes à partir d'un seul code source, ce qui est un avantage majeur pour le développement moderne.
Points forts :
- Application multiplateforme fonctionnelle
- Code bien structuré avec séparation des responsabilités
- Interface utilisateur intuitive
- Tests unitaires pour valider la logique
Prochaines étapes : Amélioration de l'interface utilisateur, ajout de fonctionnalités avancées (historique, graphiques), validation des entrées et gestion des erreurs.