En détail
Migration Xamarin vers MAUI

Quel challenge ! Selon Microsoft, une opération simplissime qui consisterait essentiellement à remplacer les espaces de noms dans les déclarations des fichiers XAML. Une migration qui ne devait poser aucun problème.
Dans la pratique, c’était bien différent.
En 2020 : portage vers MAUI 6.0. La plateforme manque encore de stabilité. L’application reste abonnée aux NullReferenceExceptions. Il faudra attendre juin 2023 et MAUI 7.0 pour disposer d’une version qui montre des signes encourageants de fiabilité. La difficulté est aussi l’indisponibilité de certains packages nugets utilisés par sous Xamarin. Heureusement, une stabilité plus éprouvée s’annonce avec les versions 8.0 et suivantes.
Ce portage est cependant une vraie opportunité.
MAUI s’intègre dans un véritable environnement multiplateforme : Windows, Android, iOS, Linux. Plutôt que de migrer chaque application Xamarin individuellement, une refonte de l’architecture globale peut être imaginée. À présent, une part substantielle du code peut devenir commune à toute une série d’applications, de services, … qu'il s'agisse d'applications front-end, de back-end ou d'applications mobiles. Cela permet donc de repenser la topologie du code avec une vraie API, de véritables moteurs métiers, … communs à un ensemble de projets bien plus vaste, qui dépasse largement le seul périmètre d'une application Xamarin. La compilation de bibliothèques de classes avec des clauses de compilation comme #if IOS ou #if ANDROID devient un outil puissant de standardisation du code au sein d’applications très différentes.
Retirer les composants obsolètes
En Xamarin, la StackLayout était notre ami. En MAUI, il ne l’est plus. Les valeurs FillAndExpand sont à bannir. Le composant Grid devient le composant de référence. La ListView tire aussi sa révérence au profit de la CollectionView. Et Frame devient Border. Autant de dépréciations qu’il est nécessaire de suivre au fur et à mesure afin de rester aligné avec les évolutions de la plateforme.
Le XAML dynamique aussi impacté.
Une application que je devais migrer permettait à des utilisateurs de définir dans une application « desktop » du code XAML injecté de façon dynamique dans l’application portable. Bien entendu, toute une série de mots-clés XAML ont soit disparu, soit été modifiés. Les tailles par défaut modifiées sous Android (Font="Large" est devenu FontSize="Medium"), les grilles doivent définir explicitement toutes les colonnes et toutes les lignes, certains StackLayout sont de bons candidats pour devenir des VerticalStackLayouts ou HorizontalStackLayouts, … Tout ceci modifié de manière transparente par du code spécifique, afin d’assurer un maximum de rétrocompatibilité avec les paramétrages existants.
En définitive, ce portage, d'abord perçu comme une difficulté, s'est révélé être une véritable opportunité. Il a permis de repenser l'architecture globale, de mutualiser davantage de code et de repositionner les applications sur une plateforme moderne, plus ouverte et plus pérenne.
