{"id":937,"date":"2024-09-16T15:58:28","date_gmt":"2024-09-16T14:58:28","guid":{"rendered":"https:\/\/coding4phone.com\/?p=937"},"modified":"2026-03-13T12:39:53","modified_gmt":"2026-03-13T11:39:53","slug":"retour-dexperience-net-maui","status":"publish","type":"post","link":"https:\/\/coding4phone.com\/?p=937","title":{"rendered":"Comment .NET MAUI m&rsquo;a r\u00e9concili\u00e9 avec le multi-plateformes"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cela fait en gros un an que je d\u00e9veloppe des applications en utilisant .NET MAUI, et j&rsquo;ai eu envie de partager avec vous mon exp\u00e9rience.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Un peu d&rsquo;histoire (rapidos)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Depuis de nombreuses ann\u00e9es je d\u00e9veloppe des applications mobiles natives. Cela signifie que je dois conna\u00eetre les plateformes (qui sont tr\u00e8s diff\u00e9rentes les unes des autres), les langages associ\u00e9s (chaque cr\u00e9ateur de plateforme poss\u00e8de son langage et par d\u00e9faut c&rsquo;est ce langage l\u00e0 qu&rsquo;il faut utiliser).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aujourd&rsquo;hui il y a 2 grandes plateformes mobiles qui sont iOS et Android, mais Il y a quelques temps il y avait une plateforme suppl\u00e9mentaire qui \u00e9tait fournie par Microsoft et qui s&rsquo;appelait Windows Phone. Je vous parle de cette plateforme, aujourd&rsquo;hui disparue, car elle va jouer un r\u00f4le important pour la suite.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Donc en r\u00e9sum\u00e9, le d\u00e9veloppement mobile multi-plateformes se r\u00e9sumait \u00e0 \u00e7a pour moi :<\/p>\n\n\n\n<figure class=\"wp-block-table aligncenter\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Plateformes<\/strong><\/td><td><strong>Outils de d\u00e9veloppement<\/strong><\/td><td><strong>Langage<\/strong>s<\/td><\/tr><tr><td>iOS<\/td><td>Xcode<\/td><td>Objectif C ou Swift<\/td><\/tr><tr><td>Android<\/td><td>Android Studio<\/td><td>Java ou Kotlin<\/td><\/tr><tr><td>Windows Phone<\/td><td>Visual Studio<\/td><td>C#<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">En ce qui me concerne, j&rsquo;avais aussi une activit\u00e9 dans le d\u00e9veloppement de clients lourds pour Windows en utilisant la technologie .NET (WinForm et WPF) en C#. <br><br>Comme vous le savez tr\u00e8s certainement, les applications WPF sont d\u00e9velopp\u00e9es en utilisant un moteur de rendu bas\u00e9 sur une d\u00e9finition des \u00e9crans via le langage XAML qui permet de d\u00e9finir \u00e9norm\u00e9ment de choses plus ou moins complexes d&rsquo;une mani\u00e8re simple et claire. Lorsque la plateforme Windows Phone est sortie, quelle fut ma joie de d\u00e9couvrir qu&rsquo;elle utilisait un sous ensemble de WPF (Silverlight) et que les \u00e9crans \u00e9taient cr\u00e9\u00e9s en XAML. Juste trop bien !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A comparer avec les outils de cr\u00e9ation UI fournis par iOS ou par Android, la cr\u00e9ation d&rsquo;\u00e9crans avec XAML c&rsquo;\u00e9tait juste que du bonheur. J&rsquo;ai eu l&rsquo;occasion (et la joie) de d\u00e9velopper plusieurs applications Windows Phone et \u00e0 chaque fois la d\u00e9finition des \u00e9crans \u00e9tait d&rsquo;une simplicit\u00e9 d\u00e9concertante.<\/p>\n\n\n\n<p class=\"has-text-align-left wp-block-paragraph\">Windows Phone faisait tourner une version adapt\u00e9e de .NET et tout le code \u00e9tait r\u00e9alis\u00e9 en C# avec l&rsquo;outil Visual Studio. Cot\u00e9 productivit\u00e9 c&rsquo;\u00e9tait vraiment top ! G\u00e9n\u00e9ralement j&rsquo;arrivais \u00e0 coder une m\u00eame application Windows Phone \/ iOS \/ Android beaucoup plus vite pour Windows Phone que pour les autres. Encore une fois, que du bonheur !<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Et puis la plateforme Windows Phone a fini par disparaitre, victime, selon moi, d&rsquo;une politique bien foireuse de la part de Microsoft (mais \u00e7a c&rsquo;est une autre histoire).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Et .NET MAUI fut<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Je passerai sous silence l&rsquo;\u00e9poque XAMARIN (qui est l&rsquo;anc\u00eatre de MAUI), car je ne l&rsquo;ai jamais utilis\u00e9 pour le travail. A l&rsquo;\u00e9poque de mes tests (en 2017) c&rsquo;est XAMARIN Forms qui m&rsquo;int\u00e9ressait le plus mais il faut bien dire que la techno n&rsquo;\u00e9tait pas tr\u00e8s s\u00e8che. Il y a avait beaucoup de limitations et de bugs cot\u00e9 applications g\u00e9n\u00e9r\u00e9es et outils de d\u00e9veloppement utilis\u00e9s qui m&rsquo;ont tr\u00e8s vite d\u00e9gout\u00e9s. Je sais que la techno a ensuite bien \u00e9volu\u00e9 (MAUI en est la preuve) mais je n&rsquo;avais jamais retent\u00e9 l&rsquo;op\u00e9rations (on ne peut pas \u00eatre partout \u00e0 la fois).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avec le temps, j&rsquo;en ai eu assez de d\u00e9velopper plusieurs fois la m\u00eame application pour des plateformes diff\u00e9rentes. En fait c&rsquo;est super fun de d\u00e9velopper pour la 1\u00e8re plateforme, puis ensuite c&rsquo;est du portage et \u00e0 force c&rsquo;est plus gonflant qu&rsquo;autre chose. De plus pour maintenir les applications une fois en production, ou les faire \u00e9voluer, c&rsquo;est gal\u00e8re de faire plusieurs fois la m\u00eame chose (d\u00e9veloppement cool + portages chiants).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quand j&rsquo;ai entendu parler de .NET MAUI, j&rsquo;ai eu envie d&rsquo;aller voir o\u00f9 en \u00e9tait la techno. Les plan\u00e8tes \u00e9taient align\u00e9es, j&rsquo;en avais marre de g\u00e9rer en permanence du code \u00e9crit dans des langages diff\u00e9rents pour des plateformes diff\u00e9rentes donc j&rsquo;ai lev\u00e9 un sourcil et j&rsquo;ai creus\u00e9 la question.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e8s mes premiers essais j&rsquo;ai retrouv\u00e9 le confort de d\u00e9veloppement que j&rsquo;aimais tant \u00e0 l&rsquo;\u00e9poque de Windows Phone. Le C#, le XAML, Visual Studio, le bonheur retrouv\u00e9 ! En quelques minutes j&rsquo;ai cr\u00e9\u00e9 des \u00e9crans assez complexes que j&rsquo;aurai mis un temps fou \u00e0 r\u00e9aliser avec les outils iOS ou Android. La puissance du C# permet de cr\u00e9er du code de grande qualit\u00e9 (m\u00eame si j&rsquo;aime beaucoup Swift d&rsquo;Apple). Le tout produit des applications rapides, fluides et magnifiques directement pour iOS, Android et Windows sans que cela n\u00e9cessite la prise en compte des plateformes dans le code (ou rarement).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"837\" height=\"510\" data-attachment-id=\"955\" data-permalink=\"https:\/\/coding4phone.com\/?attachment_id=955#main\" data-orig-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2024\/09\/retour_maui_img1.png?fit=837%2C510&amp;ssl=1\" data-orig-size=\"837,510\" data-comments-opened=\"1\" data-image-title=\"retour_maui_img1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2024\/09\/retour_maui_img1.png?fit=837%2C510&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2024\/09\/retour_maui_img1.png?resize=837%2C510&#038;ssl=1\" alt=\"\" class=\"wp-image-955\" srcset=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2024\/09\/retour_maui_img1.png?w=837&amp;ssl=1 837w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2024\/09\/retour_maui_img1.png?resize=300%2C183&amp;ssl=1 300w, https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2024\/09\/retour_maui_img1.png?resize=768%2C468&amp;ssl=1 768w\" sizes=\"auto, (max-width: 837px) 100vw, 837px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">Le confort de d\u00e9veloppement et le r\u00e9sultat obtenu m&rsquo;ont bluff\u00e9. Et je vous parle d&rsquo;une \u00e9poque o\u00f9 MAUI \u00e9tait sous .NET 6, et avait encore pas mal de bugs sous le capot. Aujourd&rsquo;hui on est en .NET 8 et les choses se sont \u00e9norm\u00e9ment am\u00e9lior\u00e9es. Les outils de d\u00e9veloppement fonctionnent tr\u00e8s bien et les applications g\u00e9n\u00e9r\u00e9s sont robustes. Je travaille quotidiennement avec .NET MAUI depuis plus d&rsquo;un an et je me r\u00e9gale.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bien s\u00fbr tout n&rsquo;est pas magique, il faut parfois adapter le code C# ou le XAML suivant la plateforme cibl\u00e9e et g\u00e9n\u00e9ralement \u00e7a se passe tr\u00e8s bien (et c&rsquo;est simple \u00e0 faire), mais \u00e7a reste quelque chose de rare il faut bien le dire.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dans mon dernier d\u00e9veloppement MAUI, l&rsquo;application communique en Bluetooth Low Energy avec des appareils industriels. J&rsquo;ai donc d\u00e9velopp\u00e9 une biblioth\u00e8que de communication BLE pour MAUI. Cette biblioth\u00e8que prend en charge iOS, Android et Windows. MAUI permet de d\u00e9velopper du code plateforme en C# au sein m\u00eame du projet, ce qui est une souplesse dingue ! Je n&rsquo;ai eu aucun mal \u00e0 cr\u00e9er ce code pour ces 3 plateformes avec le m\u00eame outil. J&rsquo;avais l&rsquo;avantage d&rsquo;avoir plusieurs fois dans le pass\u00e9 d\u00e9velopp\u00e9 des applications utilisant le Bluetooth Low Energy pour ces 3 plateformes, mais l\u00e0 je l&rsquo;ai fait avec le m\u00eame outil, Visual Studio, et le m\u00eame langage, C#. Le r\u00e9sultat est juste parfait, la communication sur les 3 plateformes est parfaitement fonctionnelle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Pour le d\u00e9veloppement multi-plateformes, .NET MAUI est un outil d&rsquo;une puissance formidable. Gr\u00e2ce \u00e0 lui je d\u00e9veloppe des applications pour 3 plateformes (iOS, Android et Windows) avec Visual Studio qui est un outil de d\u00e9veloppement tr\u00e8s puissant dans un langage moderne, C#, port\u00e9 par les technologies .NET et XAML, qui permettent de g\u00e9n\u00e9rer des applications robustes, belles et fluides avec efficacit\u00e9.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vous l&rsquo;avez compris, j&rsquo;ai adopt\u00e9 .NET MAUI \u00e0 200% car c&rsquo;est un outil que je trouve fantastique ! Et je vous jure que je ne suis pas pay\u00e9 par Microsoft pour \u00e9crire \u00e7a.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quelques liens utiles<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/learn.microsoft.com\/fr-fr\/dotnet\/maui\/what-is-maui?view=net-maui-8.0\" target=\"_blank\" rel=\"noreferrer noopener\">Qu&rsquo;est ce que .NET MAUI ?<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/learn.microsoft.com\/fr-fr\/dotnet\/maui\/get-started\/first-app?view=net-maui-8.0&amp;pivots=devices-android&amp;tabs=vswin\" target=\"_blank\" rel=\"noreferrer noopener\">Cr\u00e9er votre 1\u00e8re application .NET MAUI<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.youtube.com\/watch?v=8Ri5nJsapOI\">Platform-Specific Code in .NET MAUI Using Dependency Injection<\/a> (YouTube)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.e-naxos.com\/Blog\/category\/MAUI\" target=\"_blank\" rel=\"noreferrer noopener\">Le blog d&rsquo;Olivier Dahan<\/a> (Maitre Jedi .NET MAUI)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Un peu de lecture (avec du vrai papier) ?<\/h2>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.amazon.fr\/dp\/B0CKD2BPS1?ref_=cm_sw_r_em_ud_dp_FF0TSGHQTQYHD2FP04PV\" target=\"_blank\" rel=\"noreferrer noopener\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"213\" height=\"261\" data-attachment-id=\"964\" data-permalink=\"https:\/\/coding4phone.com\/?attachment_id=964#main\" data-orig-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2024\/09\/retour_maui_img2.png?fit=213%2C261&amp;ssl=1\" data-orig-size=\"213,261\" data-comments-opened=\"1\" data-image-title=\"retour_maui_img2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2024\/09\/retour_maui_img2.png?fit=213%2C261&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2024\/09\/retour_maui_img2.png?resize=213%2C261&#038;ssl=1\" alt=\"\" class=\"wp-image-964\"\/><\/a><\/figure>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Cela fait en gros un an que je d\u00e9veloppe des applications en utilisant .NET MAUI, et j&rsquo;ai eu envie de partager avec vous mon exp\u00e9rience.<\/p>\n<p><a href=\"https:\/\/coding4phone.com\/?p=937\">Lire la suite<\/a><\/p>\n","protected":false},"author":1,"featured_media":967,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Cela fait en gros un an que je d\u00e9veloppe des applications en utilisant .NET MAUI, et j'ai eu envie de partager avec vous mon exp\u00e9rience.","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[8,5,39,25,11,43],"tags":[13,12,17,14,16],"class_list":["post-937","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dotnet","category-maui","category-android","category-csharp","category-ios","category-windows","tag-dotnet","tag-maui","tag-android","tag-csharp","tag-ios"],"jetpack_publicize_connections":[],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pfoe4s-f7","jetpack-related-posts":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/coding4phone.com\/wp-content\/uploads\/2024\/09\/retour_maui_img3.png?fit=1200%2C738&ssl=1","_links":{"self":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/937","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=937"}],"version-history":[{"count":49,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/937\/revisions"}],"predecessor-version":[{"id":1899,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/posts\/937\/revisions\/1899"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=\/wp\/v2\/media\/967"}],"wp:attachment":[{"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=937"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=937"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/coding4phone.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=937"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}