Xamarin a longtemps été la réponse de Microsoft au développement mobile cross-platform en C#. Mais Microsoft a annoncé la fin du support de Xamarin pour le 1er mai 2024 : plus aucune mise à jour, plus aucun correctif de sécurité. Le successeur officiel, .NET MAUI (Multi-platform App UI), reprend l’approche « un code, plusieurs plateformes » en la modernisant au sein de la plateforme .NET unifiée. Migrer de Xamarin vers MAUI est donc devenu une obligation de calendrier, et un chantier qui mérite d’être mené avec méthode.
Pourquoi Xamarin arrive en fin de vie
Xamarin était bâti sur Xamarin.Forms (pour l’UI) et Xamarin.iOS/Xamarin.Android (pour les bindings natifs), un écosystème séparé du .NET Core. Avec la fin de support de mai 2024, les applications Xamarin ne reçoivent plus de correctifs de sécurité, et les soumissions aux stores deviennent risquées : Apple et Google exigent des SDK à jour, et les anciennes versions de Xamarin finiront par ne plus être acceptées. .NET MAUI intègre le développement mobile dans la plateforme .NET moderne, avec un SDK unique, une meilleure intégration aux outils et une feuille de route active.
| Critère | Xamarin.Forms | .NET MAUI |
|---|---|---|
| Support | Terminé (mai 2024) | Actif |
| Plateforme | Xamarin (écosystème séparé) | .NET unifié |
| UI | XAML (ancien) | XAML modernisé + Handlers |
| Projet | Multi-projets | Projet unique |
| Tooling | Visual Studio | Visual Studio + .NET CLI |
Ce qui change entre Xamarin.Forms et MAUI
MAUI n’est pas une simple montée de version : c’est une évolution architecturale. Les principaux changements sont :
- Le modèle de projet : MAUI introduit un projet unique qui cible toutes les plateformes (iOS, Android, macOS, Windows), contre les multiples projets Xamarin.
- Le système de rendu : les
Renderersde Xamarin.Forms sont remplacés par des Handlers, plus légers et plus performants, qui mappent les contrôles vers les vues natives. - La structure des ressources : MAUI introduit un nouveau système de ressources (
Resources/Styles,Resources/Images) et de thème. - Les API .NET modernes : accès à toute la bibliothèque de classes .NET, à la configuration, à l’injection de dépendances native et aux nouveautés C#.
- Les namespaces :
Xamarin.Forms.*devientMicrosoft.Maui.*etMicrosoft.Maui.Controls.*.
Les étapes d’une migration maîtrisée
- Audit de l’application : inventorier les pages, les custom renderers, les effects, les dépendances NuGet et les plateformes ciblées.
- Mise à jour de l’environnement : passer à .NET 8, Visual Studio à jour, et vérifier les workloads MAUI.
- Création du projet MAUI : générer un projet MAUI et migrer progressivement les ressources, le code partagé et le XAML.
- Portage des renderers en handlers : convertir les custom renderers et effects vers les handlers MAUI, ou vers des solutions modernes (dessin, plateformes spécifiques).
- Migration des dépendances : remplacer les packages Xamarin abandonnés par leurs équivalents MAUI ou par des alternatives.
- Tests sur chaque plateforme : valider sur simulateurs et appareils réels iOS et Android, puis publier une version de test (TestFlight, Play Console interne).
- Bascule et publication : publier la version MAUI en production et retirer l’ancienne version Xamarin.
Les pièges à anticiper
Le premier piège est la sous-estimation des custom renderers : les applications Xamarin matures accumulent souvent des renderers personnalisés dont le portage vers les handlers représente l’essentiel du travail. Le deuxième piège est l’écosystème de dépendances : certaines bibliothèques Xamarin populaires n’ont pas été portées en MAUI et exigent un remplacement. Le troisième piège est la gestion du cycle de vie et des permissions : les API spécifiques aux plateformes ont été réorganisées, et les accès aux fonctionnalités natives (caméra, GPS, notifications) doivent être revalidés. Enfin, prévoyez une période de stabilisation : les premières versions MAUI ont connu des évolutions rapides, et un audit régulier des mises à jour est nécessaire.
Gérer les ressources, les images et le cycle de vie des plateformes
MAUI réorganise en profondeur la gestion des ressources : les fichiers d’images, de polices et de styles migrent vers une structure unifiée (Resources/Images, Resources/Fonts, Resources/Styles), et le système de thème (clair/sombre) s’appuie sur des dictionnaires de ressources typés. Les applications Xamarin qui utilisaient des ressources par plateforme (drawable Android, asset catalog iOS) doivent être réorganisées, ce qui représente souvent un volume de travail non négligeable.
Le cycle de vie et les APIs natives ont également évolué :
- Les
DependencyServicede Xamarin sont remplacés par l’injection de dépendances native de MAUI (builder.Services) ; - Les accès aux fonctionnalités natives (caméra, GPS, notifications, stockage) passent par des APIs réorganisées, parfois via des packages communautaires ;
- La gestion des permissions et la configuration des manifestes (AndroidManifest, Info.plist) doivent être revalidées pour chaque plateforme.
Enfin, la stratégie de release doit être anticipée : les identifiants d’application, les clés de signature et les profils de provisioning doivent être conservés ou régénérés, et il faut prévoir une publication en phase de test (TestFlight, test interne Android) pour valider le comportement sur des appareils réels avant la mise en production.
Portage des renderers en handlers et gestion des dépendances
Le chantier le plus lourd d’une migration Xamarin vers MAUI est le portage des custom renderers en handlers. Là où un renderer Xamarin.Forms encapsulait toute la logique de rendu d’un contrôle dans une classe dédiée par plateforme, le handler MAUI se compose d’un mapper de propriétés et d’un handler natif plus léger, plus performant et plus simple à faire évoluer. La conversion d’un renderer existant consiste à répartir sa logique entre les mappers (propriétés) et le handler natif (création de la vue), une refactorisation qui se fait contrôle par contrôle, avec un test sur chaque plateforme à chaque étape.
La gestion des dépendances NuGet est le second grand poste de travail. Les packages Xamarin.Essentials sont intégrés nativement à MAUI (capteurs, stockage, connectivité, géolocalisation), mais leur namespace et certaines API ont changé. Les bibliothèques Xamarin abandonnées doivent être remplacées par leurs équivalents MAUI, ou par .NET MAUI Community Toolkit qui regroupe de nombreux contrôles et helpers. Dressez un tableau des packages utilisés, de leur statut de compatibilité et de la solution de remplacement, puis traitez les plus critiques en premier. Un audit de dépendances réalisé tôt évite de découvrir en fin de projet qu’un composant central n’a pas d’équivalent et bloque la publication.
Parallèlement, la gestion du cycle de vie des applications évolue : la méthode de démarrage et la fenêtre principale se définissent désormais au niveau de l’application MAUI (création du MauiProgram, configuration des services, injection de dépendances native). Validez aussi la signature des applications : conservez les keystores Android et les certificats iOS existants afin de ne pas forcer une réinstallation chez vos utilisateurs. Enfin, un plan de tests sur appareils réels, couvrant les parcours critiques sur iOS comme sur Android, doit accompagner chaque lot migré avant toute soumission aux stores.
L’accompagnement d’un expert
Migrer une application Xamarin vers MAUI est un projet qui combine portage du code, réécriture des renderers et validation sur chaque plateforme. Chez Performances Digital, nous pilotons cette transition de bout en bout : audit de l’application, stratégie de migration, portage des renderers en handlers, remplacement des dépendances et tests sur appareils réels. Notre méthode garantit une application publiée et stable à chaque étape, sans rupture de disponibilité sur les stores.
La fin de support de Xamarin est passée : reporter la migration, c’est exposer votre application à des soumissions aux stores de plus en plus risquées. Demandez votre devis gratuit : nous évaluerons votre application Xamarin et vous remettrons une feuille de route de migration vers .NET MAUI, adaptée à votre base de code et à vos plateformes cibles.