Dot.Blog

C#, XAML, WinUI, WPF, Android, MAUI, IoT, IA, ChatGPT, Prompt Engineering

Pourquoi faut-il passer à MAUI ?

Depuis le début du mois précèdent je vous explique ce qu’est MAUI, d’où vient MAUI, ses avantages principaux. Mais pourquoi faut-il passer à MAUI d’où qu’on vienne de l’univers du développement ? 10 raisons à découvrir !

Pourquoi passer à MAUI ?

Bon, je vais passer le couplet lyrique sur la beauté de l’avenir, du sens de la découverte, du progrès en marche qu’on ne peut arrêter et toutes ces balivernes qui nous ont amené à creuser les inégalités dans nos propres pays et à ravager la planète. Non l’avenir n’est pas radieux ou alors dans le sens étymologique de « radiosus » - rayonnant - car le Dieu Râ va nous griller comme des merguez à la fête de l’Huma… A moins que ce ne soient les rayonnements alpha, beta et gamma d'une surprise "lumineuse" du fou de service à l' Est...

Il est vrai que j’écris cela en août et que ma clim n’arrive pas à descendre sous les 28°, alors d’un seul coup la réalité s’impose comme la canicule elle-même. Mais je pense avoir bien assez plombé l’ambiance, on va pouvoir remettre nos nez rouges et nos chapeaux pointus et revenir sous le chapiteau pour finir notre numéro de clown sous les applaudissements des actionnaires en délire. Business as usual.

Donc pourquoi opter pour MAUI pour ses développements mobiles (ou pas) ?

Première réponse, MAUI ou Xamarin.Forms vous participerez de la même façon au désastre écologique donc autant utiliser celui des deux qui est le mieux fichu… c’est-à-dire MAUI.

Je pourrais fermer le billet ici mais ça serait un peu court. Il existe effectivement des raisons rationnelles, outre la précédente, de choisir MAUI.

Un avenir meilleur

Non, je blague. Enfin, quoi que…

Il est vrai que MAUI a quelques arguments qui nous poussent à lui faire confiance (donc à voir l’avenir sous un meilleur jour, au moins pour le code). Après tout l’apocalypse arrivera quand elle le voudra entre-temps il faudra bien payer le loyer donc avoir fait le choix des meilleurs outils !

L'écosystème Xamarin se renforce depuis près d'une décennie maintenant et Xamarin.Forms a pris beaucoup de vitesse au cours des 7 à 8 dernières années. Bien que la promesse ait toujours été là, il y avait des coûts initiaux de développement/plateforme jusqu'à l'acquisition de Microsoft en 2016 - depuis lors, il n'y a plus eu de barrière à l'entrée (l’abonnement annuel était assez cher il faut le dire, faisant partie des premiers à m’intéresser à Xamarin, et ce blog en contient les traces, MVP ou pas, Xamarin était une société isolée qui faisait payer cher son produit, devenu gratuit par la grâce de Microsoft).

La communauté des développeurs a bien accueilli l'écosystème Xamarin en open source et la plate-forme désormais soutenue par Microsoft. Cependant, même les Xamarin.Forms ne semblaient pas tout à fait faire partie intégrante de .NET - c'était comme faire autre chose pour aller sur Android ou iOS. Même le nom de la société créatrice du produit était resté alors que Microsoft a plutôt l’habitude de tout changer rapidement lors de rachat d’entreprises. Malgré l’avancée spectaculaire que représentaient les Xamarin.Forms, l’approche multiplateforme ciblant iOS et Android restaient intrinsèquement difficiles avec de nombreuses dépendances, et les outils Xamarin ont montré quelques défauts au fil des ans, comme tout produit qui est utilisé par de nombreux développeurs d’ailleurs. Plus on est à se servir d’un soft plus on lui trouve des défauts différents. Mais on pouvait espérer un peu mieux il est vrai.

C’est toute cette perception qui change avec .NET MAUI et la vague .NET 6+ dont l’énergie est bien celle de CORE qui ne dit plus son nom depuis au moins .NET 5. Xamarin.iOS et Xamarin.Android sont désormais essentiellement du .NET pour iOS et Android, tous intégrés dans .NET 6+ lui-même, le vrai, pas Mono (par ailleurs incroyablement excellent pour un travail fait en parallèle hors des murs Microsoft)
MAUI repose ainsi de facto un .NET multiplateforme unifié. Les runtimes eux-mêmes sont unifiés dans .NET 6+ et les outils comme Visual Studio inspirent généralement confiance aux développeurs. La qualité de VS n’étant plus à démontrer, ni celle de .NET qui a échappé à l’éradication avant l’arrivée judicieuse du pragmatique Nadella à la tête de Microsoft.

Le bureau à porter de main

Xamarin.Forms est en grande partie une pile multiplateforme conçue pour les mobiles, principalement pour iOS, Android et d'autres plateformes comme Tizen. Cependant, atteindre le bureau avec Xamarin.Forms n'est pas totalement hors de portée : il existe des moteurs de rendu Xamarin.Forms pour Mac et WPF. Mais bien qu'elles aient du potentiel, ces solutions ont été en mode Aperçu et n'ont jamais vraiment acquis la confiance dont les entreprises avaient besoin pour créer des applications de bureau avec les Xamarin.Forms. Pourtant, un XF sous WPF cela aurait été parfait.

Au cours de son histoire récente qui se mêle à celle de Core plus ancien, il y a eu un énorme changement de paradigme dans l'évolution de .NET MAUI - le bureau est devenu un « citoyen de première classe » comme disent les américains, avec une prise en charge naturelle Windows et Mac. L’adoption de cette nouvelle stratégie par .NET MAUI ne réinvente pas la roue pour atteindre le bureau, il n’y a pas de compromis ni de bricolage. Pour ce faire, il utilise deux méthodes établies de WinUI 3 pour Windows et Mac Catalyst pour MacOs. WinUI 3 est le dernier framework UI/UX de bout en bout pour les applications Windows et fonctionne sur Win32 et .NET natif. Mac Catalyst est la solution d'Apple pour amener les applications iOS créées avec UIKit sur le bureau MacOs et augmenter l'expérience du développeur avec des API AppKit/plate-forme supplémentaires selon les besoins.

Avec .NET MAUI, les développeurs peuvent désormais cibler officiellement les applications mobiles et de bureau à partir de la même base de code. Bien sûr, il y a des considérations UX à prendre en compte selon les facteurs de forme, mais enfin nous y sommes !

L’arrivée de Blazor

Il ne s’agit pas du nom d’un superhéros ou d’un Youtubeur connu (genre Defakator qui pourchasse les fake news) mais bien d’un outil de développement et pas n’importe lequel !

Les développeurs .NET qui ont approché Blazor sont très enthousiastes, un framework Web moderne avec du code C# avant et arrière (code behind), exécuté côté serveur ou côté client avec Wasm. Il y a une « clientèle » pour Blazor et Wasm c’est une évidence et elle est différente de celle qui préfère ASP.NET. Mélanger Web et Apps natives avec le même code serait-il alors possible ?

.NET MAUI permet justement cela et apporte la qualité de Blazor au mobile et au bureau via les applications Blazor Hybrid. Essentiellement, .NET MAUI fournit l'amorçage de l'application avec un accès complet à l'API native, puis fournit une BlazorWebView magique, qui peut héberger des applications Blazor entières ou toute autre application Web construite avec les technologies SPA. Le composant BlazorWebView rend WebView2 sur Windows ou WKWebView sur macOS, les deux derniers composants WebView fournissant un excellent canevas pour les applications Blazor.

Les composants Blazor peuvent désormais coexister avec le code .NET MAUI, être stylisés, prendre en charge le routage et activer le partage de code avec les applications Web. Il s'agit d'un changement très bienvenu pour certains contextes applicatifs.

Le projet Unique

L'une des bêtes noires des développeurs avec les solutions Xamarin.Forms existantes est la nature des projets eux-mêmes : une bibliothèque .NET Standard partagée et des projets spécifiques à la plate-forme pour chaque plate-forme cible. Bien qu'il n'y ait rien d'intrinsèquement mauvais avec cette approche, la réalité pour la plupart des solutions Xamarin.Forms du monde réel est que cela donne des projets peu maniables – il y a de nombreuses choses spécifiques à chaque plate-forme que les développeurs doivent se rappeler de faire dans chaque projet, sans parler de s'assurer que les dépendances sont bien synchronisées.

.NET MAUI essaie de résoudre ce problème complexe avec ce qu'on appelle un « projet unique » - un projet consolidé de style SDK. Avec le multi-ciblage, les builds deviennent plus intelligents et savent comment produire des exécutables pour chaque plate-forme concernée, tout en préservant la cohérence de la base de code. Les artefacts/ressources d'application, tels que les polices et les images, peuvent désormais être partagés entre différentes plates-formes. Le système de génération .NET MAUI sait comment les récupérer pour chaque plate-forme ciblée. Vous voulez faire quelque chose de personnalisé pour chaque plate-forme ? Vous pouvez toujours remplacer et le faire - les éléments spécifiques à la plate-forme vont simplement dans des dossiers spécifiques, au lieu de projets lourds – c’est une solution simple et élégante.

Une architecture mieux pensée

.NET MAUI est une opportunité de repartir de zéro sur plusieurs fronts, et les équipes Microsoft n'ont pas laissé passer une telle occasion ! .NET MAUI fournit une bien meilleure architecture d'application, c’est un fait certain. Cela commence par la façon dont les applications sont amorcées - .NET MAUI adopte le constructeur d'hôte générique .NET. Cela apporte de la cohérence avec le reste de .NET et facilite l'injection de dépendances, la prise en charge de MVVM, l'enregistrement des gestionnaires/rendus et une plus grande extensibilité.

L'autre grand changement est la façon dont les applications .NET MAUI rendent l'interface utilisateur native sur chaque plate-forme. Auparavant, cela était piloté par un code appelé moteur de rendu qui prenait le balisage XAML Xamarin.Forms ou l'arborescence visuelle C# et rendait l'interface utilisateur native correspondante. Cependant, les moteurs de rendu avaient des liaisons étroites avec Xamarin.Forms, des dépendances directes sur la pile de l'interface utilisateur native et une personnalisation difficile. .NET MAUI adopte l'approche d'interface avec des gestionnaires - en faisant abstraction du rendu de l'interface utilisateur, des dépendances natives et du balisage de code. Cela ouvre l’horizon des gestionnaires .NET MAUI qui peuvent être utilisés à partir d'autres piles d'interface utilisateur, comme MVU avec Comet, F# ou Reactive UI.

L’accès au matériel

La plupart des appareils mobiles modernes sont bourrés de capteurs de tout genre, et les développeurs ne devraient pas avoir à écrire du Java/Swift ou tout autre code natif pour accéder aux API natives. La merveilleuse solution a été Xamarin.Essentials : un package NuGet qui permet de bénéficier de tous les accès à l'API native via du code C# abstrait.

 

Comment évolue l'accès aux API natives dans .NET MAUI ? Les développeurs ont désormais tout simplement son équivalent « .NET MAUI Essentials ». Toutes les API des périphériques spécifiques aux plates-formes sont regroupées dans une seule bibliothèque, qui est en fait intégrée directement dans .NET MAUI. Les développeurs doivent simplement activer <UseMaui>true</UseMaui>dans le fichier .csproj et importer l'espace de noms Microsoft.Maui.Essentials. Et toutes les API de périphériques multiplateformes deviennent disponibles sans effort et à partir du code C#, peu importe la cible !

La modification du visuel rendue plus rapide

L'un des fléaux avec le développement de Xamarin.Forms a été la boucle interne : à quelle vitesse les développeurs peuvent-ils apporter des modifications au balisage ou au code pendant que l'application est en cours d'exécution et les voir reflétées sur les simulateurs/appareils ?

La solution WPF, WinUI est simple est directe : on dispose d’un éditeur visuel interactif dans Visual Studio et même dans son grand frère à ce niveau, Blend. Le tout avec bien entendu toutes les subtilités de ces plateformes ultra sophistiquées (dessin vectoriel comme dans Illustrator, génération de XAML automatique qui traduit les ajouts au visuel en code, dispositif de données de tests pour afficher de vraies données en conception, etc…).

Mais sous Xamarin.Forms cet aspect n'a traditionnellement pas été une force par rapport à d'autres piles technologiques multiplateformes. Et il y a toujours beaucoup à faire. Des solutions intermédiaires comme XAML Previewer et Hot Restart ont aidé certains sans faire l’unanimité, mais .NET MAUI relève le défi au maximum, sans toutefois s’attaquer à la seule vraie solution, le designer visuel comme WPF/WinUI. Les contraintes du cross-plateforme semblent hélas rendre une telle option impossible, au moins pour l’instant. Restait donc à améliorer ce que les XF proposaient.

Bienvenu donc à « Hot Reload » - le moyen le plus rapide de voir les changements de code en cours d'exécution dans le simulateur ou les devices connectés à la machine de développement sans recompilation complète. Et pour aller plus loin, Hot Reload permet de fonctionner outre avec le code C# mais aussi avec les modifications de balisage d'arborescence visuelle .NET MAUI XAML. Code visuel ou code C#, le procédé ne couvre pas tout à fait 100% des situations mais il apporte un confort indéniable, principalement pour la conception visuelle.

Une belle boîte à outils

 De nombreux développeurs Xamarin.Forms utilisent des boîtes à outils supplémentaires pour améliorer leur expérience de développement, la plus populaire étant la boîte à outils de la communauté Xamarin qui évite de réinventer la roue pour de nombreux besoins récurrents.

Grâce aux efforts de Microsoft et de la communauté, l'expérience Toolkit fait également peau neuve dans .NET MAUI. Bienvenue dans la boîte à outils de la communauté .NET MAUI, un ensemble de bibliothèques destinées à améliorer l'expérience des développeurs .NET MAUI. La boîte à outils de la communauté .NET MAUI est disponible sous la forme de deux packages NuGet - CommunityToolkit.Maui et CommunityToolkit.Maui.Markup - tous deux faciles à ajouter aux applications .NET MAUI exécutées sur .NET 6. À partir d'une collection d'animations, de comportements, de convertisseurs et de contrôles UI autant que des méthodes C# fluides pour les interfaces utilisateur déclaratives - la boîte à outils de la communauté .NET MAUI est là pour vous aider.

On notera que la confusion avec Maui Essentials, déjà évoquée, est encore fréquente. Il s’agit bien de deux librairies différentes. Essentials se concentre plus sur l’accès aux devices et est intégré à MAUI. Quant au Toolkit MAUI de la communauté il s’intéresse plus aux contrôles visuels, aux behaviors, etc. Il existe donc bien deux boîtes à outils ultra complètes et open source qui couvrent une bonne partie des besoins, Essentials et le Community Toolkit.

Migration et modernisation assistée

Avec .NET 6 portant le tag LTS, de nombreuses entreprises envisagent de migrer et de moderniser leurs applications « legacy ». Vous avez des applications de bureau WinForms ou WPF ? L'assistant de mise à niveau .NET peut aider à mettre à jour leurs runtimes vers .NET 6+ et les développeurs peuvent alors commencer à moderniser la pile d'interface utilisateur par petits morceaux. .NET MAUI ouvre des opportunités intéressantes pour porter et migrer les applications de bureau existantes et atteindre de nouvelles plates-formes en dehors de Windows, tout en réutilisant une grande partie du code existant si les applications sont bien conçues. Et avec les applications Blazor Hybrid dans le panier, les développeurs ont une réelle chance de partager beaucoup de code entre les applications natives et Web. C’est une véritable opportunité de modernisation ou de remplacement des vieilles applications pour un environnement hautement unifié et cohérent.

Vous avez des applications Xamarin.Forms existantes ? La migration vers .NET MAUI ne devrait alors pas être pénible avec les bons outils. Utilisez .NET Upgrade Assistant , remappez les espaces de noms, mettez à jour toutes les dépendances vers .NET 6+ et enregistrez tous les services/rendus de compatibilité. On notera tout de même que pour bénéficier des meilleures performances de .NET MAUI il est préférable d’utiliser la nouvelle architecture des handlers. Néanmoins, les rendus personnalisés existants n'ont pas besoin d'être migrés immédiatement et peuvent être transférés vers .NET MAUI avec un minimum d'effort. Tout a été prévu !

Des contrôles visuels tiers gratuits (ou pas)

 Toute nouvelle pile technologique d'interface utilisateur comporte un risque évident : quelle part de la roue devons-nous réinventer ? Heureusement, .NET MAUI arrive dans un écosystème .NET qui sait déjà très bien faire une interface utilisateur multiplateforme. .NET MAUI propose des composants d'interface utilisateur similaires à ceux de Xamarin.Forms et la communauté intervient et interviendra pour combler le reste de l'écart et même aller plus loin. Que ce soit par le biais du Community Toolkit évoqué plus haut ou de packages indépendants, pour la plupart gratuits.

Toutefois certaines Apps réclament des artifices d’UI plus délicats à programmer, grilles complexes, animations particulières, charts, etc. Dans ce cas il existe aussi des composants tiers commerciaux comme Syncfusion ou Telerik. N’étant pas un fan des dépendances extérieures avec des librairies tierces je ne pousserai personne dans cette direction, mais j’avoue que parfois, même ponctuellement, ces composants peuvent faire gagner beaucoup de temps aux développeurs tout en apportant un niveau de confort et de service « pro » aux utilisateurs. Chacun fera ainsi en fonction de ses besoins et ceux de ses utilisateurs. Avec MAUI toutes les solutions sont sur la table !

Conclusion

Oui, il est temps de conclure. Ce grand tour du monde MAUI n’est qu’un aperçu des vastes possibilités offertes par cet environnement, de sa robustesse technique, des opportunités tentaculaires qu’il met à disposition des développeurs. MAUI ce sont les Xamarin.Forms en mieux posées sur un socle .NET rénové (Core), puissant, unifié et cross-plateforme par conception. Le tout entièrement maîtrisé par Microsoft, en open source, et en collaboration avec la communauté qui est très actives (les toolkits notamment).

J’espère que ce « cliché aérien » du pays MAUI vous aidera à mieux situer ses éléments constituants et ses avantages. N’hésitez pas à poser des questions, les commentaires sont là pour ça !

Stay Tuned !

Faites des heureux, PARTAGEZ l'article !