{"id":4329,"date":"2024-10-16T15:06:10","date_gmt":"2024-10-16T13:06:10","guid":{"rendered":"https:\/\/www.bayoomed.com\/?post_type=news&#038;p=4329"},"modified":"2024-10-16T15:12:58","modified_gmt":"2024-10-16T13:12:58","slug":"from-xamarin-forms-to-net-maui","status":"publish","type":"news","link":"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/","title":{"rendered":"From Xamarin.Forms to .NET MAUI"},"content":{"rendered":"<p><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-1 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 70vw + );margin-left: calc(- \/ 2 );margin-right: calc(- \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-0 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:0px;--awb-margin-bottom-large:20px;--awb-spacing-left-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:0px;--awb-spacing-left-medium:0px;--awb-width-small:100%;--awb-order-small:0;--awb-spacing-right-small:0px;--awb-margin-bottom-small:0px;--awb-spacing-left-small:0px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-1 fusion-sep-none fusion-title-text fusion-title-size-two\" style=\"--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:0px;--awb-margin-left-small:0px;\"><h2 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:39;line-height:var(--awb-typography1-line-height);\"><h2>Challenges and learnings when migrating a Xamarin.Forms app to .NET MAUI<\/h2><\/h2><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"--awb-flex-grow:0;--awb-flex-grow-medium:0;--awb-flex-grow-small:0;--awb-flex-shrink:0;--awb-flex-shrink-medium:0;--awb-flex-shrink-small:0;width:calc( 100% + ) !important;max-width:calc( 100% + ) !important;margin-left: calc(- \/ 2 );margin-right: calc(- \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-0 fusion_builder_column_inner_5_6 5_6 fusion-flex-column fusion-flex-align-self-stretch\" style=\"--awb-bg-size:cover;--awb-width-large:83.333333333333%;--awb-margin-top-large:20px;--awb-margin-bottom-large:40px;--awb-spacing-left-large:0px;--awb-width-medium:75%;--awb-order-medium:0;--awb-spacing-right-medium:0px;--awb-spacing-left-medium:0px;--awb-width-small:75%;--awb-order-small:0;--awb-spacing-right-small:0px;--awb-spacing-left-small:0px;\" data-scroll-devices=\"small-visibility,medium-visibility,large-visibility\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-text fusion-text-1 fusion-text-no-margin\" style=\"--awb-text-color:var(--awb-color8);--awb-margin-bottom:-20px;\"><p><strong>Author: Simon Hirschel<br \/>\n<\/strong>Software Engineer at BAYOOMED<\/p>\n<\/div><\/div><\/div><\/div><div class=\"fusion-builder-row fusion-builder-row-inner fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"--awb-flex-grow:0;--awb-flex-grow-medium:0;--awb-flex-grow-small:0;--awb-flex-shrink:0;--awb-flex-shrink-medium:0;--awb-flex-shrink-small:0;width:calc( 100% + ) !important;max-width:calc( 100% + ) !important;margin-left: calc(- \/ 2 );margin-right: calc(- \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column_inner fusion-builder-nested-column-1 fusion_builder_column_inner_5_6 5_6 fusion-flex-column fusion-flex-align-self-stretch\" style=\"--awb-bg-size:cover;--awb-width-large:83.333333333333%;--awb-margin-top-large:20px;--awb-margin-bottom-large:20px;--awb-spacing-left-large:0px;--awb-width-medium:75%;--awb-order-medium:0;--awb-spacing-right-medium:0px;--awb-spacing-left-medium:0px;--awb-width-small:75%;--awb-order-small:0;--awb-spacing-right-small:0px;--awb-spacing-left-small:0px;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-center fusion-content-layout-column\"><div class=\"fusion-text fusion-text-2 fusion-text-no-margin\" style=\"--awb-text-color:var(--awb-color8);--awb-margin-top:-20px;--awb-margin-bottom:-20px;\"><p><strong>Co-author: Sebastian Wittor<br \/>\n<\/strong>Project Manager Medical Engineering at BAYOOMED<\/p>\n<\/div><\/div><\/div><\/div><div class=\"fusion-text fusion-text-3\"><p>&nbsp;<\/p>\n<p>With the release of .NET MAUI 6 in May 2022, we were faced with the question of whether a migration of the no longer supported Xamarin.Forms was necessary for our current project. There was also a deadline for iOS releases. From this point on, it would no longer be permitted to bring apps with outdated frameworks to the App Store. We now had to decide whether to rush blindly into the migration or look for alternative solutions. In the end, we decided to migrate our project to .NET MAUI 6 and later also to upgrade to .NET MAUI 8. You can read how we came to this decision in this blog article.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-2 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 70vw + );margin-left: calc(- \/ 2 );margin-right: calc(- \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-1 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:0px;--awb-margin-bottom-large:20px;--awb-spacing-left-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:0px;--awb-spacing-left-medium:0px;--awb-width-small:100%;--awb-order-small:0;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-2 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:0px;--awb-margin-left-small:0px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:30;line-height:var(--awb-typography1-line-height);\"><h3>The first upgrade<\/h3><\/h3><\/div><div class=\"fusion-text fusion-text-4\"><p>Microsoft provides a tool to update smaller Xamarin apps to MAUI. It replaces common usages and some settings with the new MAUI equivalents. Unfortunately, it doesn&#8217;t do much more than that and it still took a lot of work to get the app to compile without a lot of bugs. With MAUI, it is also recommended to switch from multiple projects for each platform to a single project with dedicated folders for each platform. We also needed to find replacements for some SOUPs that were essential to the inner workings of our app. These included Xamarin Essentials, which fortunately had a replacement in the MAUI Community Toolkit, and MvvmCross. As there was no equivalent replacement for MvvmCross, we had to remove and replace it. Since we were using MvvmCross for both views, view models, navigation and lifecycle events for the app, this was the biggest hurdle we had to overcome to get the app back up and running. Ultimately, this caused a lot of delays and required rewriting most of our parent views and view models to incorporate newly created events that were similar to the way MvvmCross handled them. In addition, we had to rework our entire navigation system to allow parameters to be passed and returned in the same way as before. Both of these changes were very time consuming and required a lot of testing and debugging before they worked in a way that allowed us to start making changes to the actual functionality of the app and its views.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-3 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 70vw + );margin-left: calc(- \/ 2 );margin-right: calc(- \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-2 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:0px;--awb-margin-bottom-large:20px;--awb-spacing-left-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:0px;--awb-spacing-left-medium:0px;--awb-width-small:100%;--awb-order-small:0;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-3 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:0px;--awb-margin-left-small:0px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:30;line-height:var(--awb-typography1-line-height);\"><h3>Changed view<\/h3><\/h3><\/div><div class=\"fusion-text fusion-text-5\"><p>One of the main issues was that controls in .NET MAUI do not work in the same way as in Xamarin.Forms. This difference means that some familiar UI elements require customization to work correctly in the new framework. In addition, the default values for padding, margins and other layout-related variables have changed. As a result, a significant amount of customization is required to make the views look similar to their previous versions. This requires customizing these properties for almost every single view in the application, which can be a time-consuming and painstaking task. Visual issues are also common during the migration process. Many views have inconsistencies that can only be resolved by further rewriting. Each view must be carefully reviewed and modified to fix these visual issues and ensure a consistent and polished look and feel across the application.<\/p>\n<\/div><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-3 fusion_builder_column_1_1 1_1 fusion-flex-column\" style=\"--awb-bg-color:var(--awb-color1);--awb-bg-color-hover:var(--awb-color1);--awb-bg-size:cover;--awb-width-large:100%;--awb-margin-top-large:0px;--awb-spacing-right-large:0px;--awb-margin-bottom-large:20px;--awb-spacing-left-large:0px;--awb-width-medium:100%;--awb-order-medium:0;--awb-spacing-right-medium:0px;--awb-spacing-left-medium:0px;--awb-width-small:100%;--awb-order-small:0;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-4 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color8);--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:0px;--awb-margin-left-small:0px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:30;line-height:var(--awb-typography1-line-height);\"><h3>MvvmCross<\/h3><\/h3><\/div><div class=\"fusion-text fusion-text-6\"><p>MvvmCross played a crucial role in our development process with Xamarin and saved us a lot of work. It was deeply integrated into our codebase and handled essential aspects such as app launch, app lifecycle and acted as a singleton provider. This extensive integration meant that MvvmCross was interwoven with almost every part of our application. However, the removal of MvvmCross during the migration to .NET MAUI caused numerous issues. We had to rewrite many lifecycle events for our view models as the previous implementation relied heavily on MvvmCross. We also had to develop our own navigation service manually as the built-in navigation provided by MvvmCross was no longer available. Almost all of our views had to be changed due to the absence of MvvmCross. This major overhaul was necessary to ensure that the views worked correctly and complied with the requirements of the new framework. Despite the challenges, overcoming these issues was essential for a successful migration to .NET MAUI and allowed us to maintain and improve the functionality of our application.<\/p>\n<\/div><div class=\"fusion-title title fusion-title-5 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color8);--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:0px;--awb-margin-left-small:0px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:30;line-height:var(--awb-typography1-line-height);\"><h3>Bugs, bugs, bugs<\/h3><\/h3><\/div><div class=\"fusion-text fusion-text-7\"><div>\n<p>When .NET MAUI was released as &#8220;production-ready&#8221; with .NET 6, we expected a smooth transition. However, the reality was very different. We encountered numerous errors that had a significant impact on our development process.<\/p>\n<\/div>\n<p>Firstly, some view elements did not work as expected. In addition, there were noticeable performance issues that made certain features, such as the carousel view, practically unusable. We also experienced several issues with MAUI running in Visual Studio 2022, especially after certain updates. Connection issues with MAUI on the Mac and deployment issues for iOS in the AppCenter further complicated the situation. Debugging also proved to be particularly difficult. The Visual Studio 2022 debugger often had issues with MAUI, making it difficult to identify and fix problems efficiently. Although fixes were promised, they were often delayed and only made available with the next .NET upgrade. These upgrades sometimes fixed existing issues but also introduced new ones, creating a cycle of troubleshooting and customization. Despite these challenges, we continued to work on the bugs and performance issues and endeavored to make the most of the new capabilities of .NET MAUI. Even though the journey was full of obstacles, each fix and workaround brought us closer to a stable and fully functional application.<\/p>\n<\/div><div class=\"fusion-title title fusion-title-6 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:0px;--awb-margin-left-small:0px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:30;line-height:var(--awb-typography1-line-height);\"><h3>Non-app-related challenges<\/h3><\/h3><\/div><div class=\"fusion-text fusion-text-8\"><p>In addition to the technical hurdles, we faced several non-app-related challenges that complicated our migration to .NET MAUI. One of the main issues was the low developer capacity. With only a limited number of developers available, the workload became overwhelming and slowed down progress significantly. In addition, our focus was split due to other ongoing projects, so we could not fully concentrate on the migration process. This was exacerbated by the continuous release of updates and new features for Xamarin, which required additional time and effort to integrate and manage alongside the migration to .NET MAUI. These factors complicated the migration process overall, so we had to carefully allocate our time and priorities to make steady progress despite the constraints.<\/p>\n<\/div><div class=\"fusion-title title fusion-title-7 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:0px;--awb-margin-left-small:0px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:30;line-height:var(--awb-typography1-line-height);\"><h3>MAUI migration analysis before the migration attempt<\/h3><\/h3><\/div><div class=\"fusion-text fusion-text-9\"><p>Before embarking on the migration to .NET MAUI, it is important to thoroughly analyze the potential challenges and requirements. Ask yourself the following questions to better estimate the migration effort:<\/p>\n<\/div><ul style=\"--awb-size:20px;--awb-item-padding-bottom:30px;--awb-line-height:34px;--awb-icon-width:34px;--awb-icon-height:34px;--awb-icon-margin:14px;--awb-content-margin:48px;--awb-circlecolor:var(--awb-color4);--awb-circle-yes-font-size:17.6px;\" class=\"fusion-checklist fusion-checklist-1 fusion-checklist-default type-icons\"><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-yes\"><i class=\"fusion-li-icon fa-question fas\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<div class=\"iconlist_content_wrap\">\n<p class=\"entry-content-header\"><b>SOUP compatibility: Which SOUPs (Software of Unknown Pedigree) need to be replaced because they are not compatible with MAUI?<\/b><\/p>\n<p style=\"font-size: 18px\" data-fusion-font=\"true\">Effects: Assess the impact of the individual SOUPs on your project.<br \/><span style=\"font-size: 18px\" data-fusion-font=\"true\">Replacements: Determine if there are MAUI-specific replacements for these SOUPs.<\/span><\/p>\n<\/div>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-yes\"><i class=\"fusion-li-icon fa-question fas\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<div class=\"iconlist_content_wrap\">\n<header class=\"entry-content-header\">\n<header class=\"entry-content-header\"><b style=\"font-size: 20px\" data-fusion-font=\"true\">Project structure: Does the project use MAUI or native views?<\/b><\/header>\n<div class=\"iconlist_content \">\n<p><span style=\"font-size: 18px\" data-fusion-font=\"true\">Experience: Migration with native views tends to be faster, as has been observed in other projects.<\/span><\/p>\n<p><span style=\"font-size: 18px\" data-fusion-font=\"true\">View breakage: Be prepared for views to break due to errors and changes to the default values for control variables.<\/span><\/p>\n<ul>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\"> Carousel views: Performance issues are common; consider using a different SOUP instead.<\/span><\/li>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\"> GestureRecognizers: There are problems in earlier versions of .NET MAUI.<\/span><\/li>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\"> Margins: Many margins need to be adjusted due to changes to the default values.<\/span><\/li>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\"> Issue tracking: Monitor issue tracking regularly for updates and corrections.<\/span><\/li>\n<\/ul>\n<\/div>\n<\/header>\n<\/div>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-yes\"><i class=\"fusion-li-icon fa-question fas\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<div class=\"iconlist_content_wrap\">\n<div class=\"iconlist_content_wrap\">\n<header class=\"entry-content-header\">\n<header class=\"entry-content-header\">\n<p class=\"av_iconlist_title iconlist_title \"><b>MvvmCross dependency: Do you use MvvmCross?<\/b><\/p>\n<\/header>\n<div class=\"iconlist_content \">\n<p><span style=\"font-size: 18px\" data-fusion-font=\"true\">Replace: There is no simple alternative, so individual solutions are required:<\/span><\/p>\n<ul>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\">Lifecycle Events<\/span><\/li>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\">Navigation<\/span><\/li>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\">CustomAppStart<\/span><\/li>\n<\/ul>\n<p style=\"font-size: 18px\" data-fusion-font=\"true\">Increase in effort: The migration effort will increase considerably due to the deep integration of MvvmCross in most projects, which leads to a &#8220;ripple effect&#8221;.<\/p>\n<\/div>\n<\/header>\n<\/div>\n<\/div>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-yes\"><i class=\"fusion-li-icon fa-question fas\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p><b>Custom views and controls: Do you use custom views, renderers or controls?<br \/>\n<\/b><span style=\"font-size: 18px\" data-fusion-font=\"true\">Modifications: Most elements require minor or major modifications to function in MAUI.<\/span><\/p>\n<p style=\"font-size: 18px\" data-fusion-font=\"true\">Renderer: Expect complete changes in the way renderers work, including renaming and possible reformulation.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-yes\"><i class=\"fusion-li-icon fa-question fas\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\">\n<p><b>Define target .NET MAUI version: Which .NET MAUI version should be migrated to?<br \/>\n<\/b><span style=\"font-size: 18px\" data-fusion-font=\"true\">Version selection: Select the last production-ready version.<\/span><\/p>\n<p style=\"font-size: 18px\" data-fusion-font=\"true\">Bug Fixes: Be aware that some problems can only be fixed in later versions, which may require further upgrades during development.<\/p>\n<\/div><\/li><li class=\"fusion-li-item\" style=\"\"><span class=\"icon-wrapper circle-yes\"><i class=\"fusion-li-icon fa-question fas\" aria-hidden=\"true\"><\/i><\/span><div class=\"fusion-li-item-content\"><b><span style=\"font-size: 20px\" data-fusion-font=\"true\">Please also note:<\/span><br \/>\n<\/b><\/p>\n<ul>\n<li style=\"padding-left: 0px;font-size: 18px\" data-fusion-font=\"true\"><span style=\"font-size: 18px\" data-fusion-font=\"true\">SOUP updates: All SOUPs must be updated and fully validated.<\/span><\/li>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\">Unit tests: Updating unit tests can be time-consuming, especially with significant logic changes and MvvmCross replacements.<\/span><\/li>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\">Documentation: Updating the general documentation to take migration into account.<\/span><\/li>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\">UI realignment: Make sure the user interface matches the Xamarin version, if necessary.<\/span><\/li>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\">Singleton treatment: Adaptation of singleton treatment to MAUI practices.<\/span><\/li>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\">Pipeline customizations: Change build and deployment pipelines as required.<\/span><\/li>\n<li><span style=\"font-size: 18px\" data-fusion-font=\"true\">External tools: Update and test all other external tools used in the project.<\/span><\/li>\n<\/ul>\n<\/div><\/li><\/ul><div class=\"fusion-text fusion-text-10\"><p>By carefully considering these factors, you can better prepare for the complexities of migrating to .NET MAUI and ensure a smoother transition.<\/p>\n<\/div><div class=\"fusion-title title fusion-title-8 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:0px;--awb-margin-left-small:0px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:30;line-height:var(--awb-typography1-line-height);\"><h3>How to migrate &#8211; Our recommendations<\/h3><\/h3><\/div><div class=\"fusion-text fusion-text-11\"><p>Migrating to .NET MAUI is a complex process that requires careful planning and execution. Below you will find some recommendations for your migration efforts:<\/p>\n<p><b style=\"color: #000000\">Analyze and plan<\/b><\/p>\n<ul>\n<li>Review the key questions: Start by analyzing the key questions you formulated in your migration analysis.<\/li>\n<li>Test run: Perform a test run of the upgrade wizard to identify additional tasks that need to be completed.<\/li>\n<li>Error tracking: Check issue trackers for items you use to anticipate potential problems.<\/li>\n<li>Prioritize SOUP replacement: Focus on replacing important SOUPs like MvvmCross early in the process.<\/li>\n<li>Common coding: Consider common coding for the most critical parts of the application to avoid problems later on.<\/li>\n<li>Incremental changes: Divide the migration into smaller, manageable tasks so that you are not overwhelmed.<\/li>\n<\/ul>\n<p><b>Distribute resources<\/b><\/p>\n<ul>\n<li>Dedicated focus: Ensure that developers can fully concentrate on the migration without significant distractions.<\/li>\n<li>Freeze the project: Freeze other parts of the project until the migration is complete to maintain focus.<\/li>\n<li>Team stability: Avoid major changes in the team during the migration in order to maintain continuity and dynamism.<\/li>\n<li>Minimize cascading changes<\/li>\n<li>Careful implementation: Try to implement changes in a way that minimizes the need for further adjustments in other parts of the application.<\/li>\n<\/ul>\n<p>By following these recommendations, you can better manage the migration process and mitigate potential issues, leading to a more successful transition to .NET MAUI.<\/p>\n<\/div><\/div><\/div><\/div><\/div><div class=\"fusion-fullwidth fullwidth-box fusion-builder-row-4 fusion-flex-container has-pattern-background has-mask-background nonhundred-percent-fullwidth non-hundred-percent-height-scrolling\" style=\"--awb-border-radius-top-left:0px;--awb-border-radius-top-right:0px;--awb-border-radius-bottom-right:0px;--awb-border-radius-bottom-left:0px;--awb-margin-top:60px;--awb-flex-wrap:wrap;\" ><div class=\"fusion-builder-row fusion-row fusion-flex-align-items-flex-start fusion-flex-content-wrap\" style=\"max-width:calc( 70vw + );margin-left: calc(- \/ 2 );margin-right: calc(- \/ 2 );\"><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-4 fusion_builder_column_1_5 1_5 fusion-flex-column fusion-flex-align-self-stretch\" style=\"--awb-bg-size:cover;--awb-width-large:20%;--awb-margin-top-large:0px;--awb-margin-bottom-large:20px;--awb-width-medium:20%;--awb-order-medium:0;--awb-width-small:100%;--awb-order-small:0;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><i class=\"fb-icon-element-1 fb-icon-element fontawesome-icon fa-search fas circle-yes\" style=\"--awb-circlecolor-hover:var(--awb-color4);--awb-circlebordersize:0px;--awb-font-size:70.4px;--awb-width:140.8px;--awb-height:140.8px;--awb-line-height:140.8px;--awb-margin-top:0;--awb-margin-right:0;--awb-margin-bottom:0;--awb-margin-left:0;--awb-align-self:center;\"><\/i><\/div><\/div><div class=\"fusion-layout-column fusion_builder_column fusion-builder-column-5 fusion_builder_column_4_5 4_5 fusion-flex-column\" style=\"--awb-padding-top:60px;--awb-padding-right:60px;--awb-padding-bottom:60px;--awb-padding-left:60px;--awb-padding-top-small:30px;--awb-padding-right-small:30px;--awb-padding-bottom-small:30px;--awb-padding-left-small:30px;--awb-overflow:hidden;--awb-bg-color:var(--awb-color7);--awb-bg-color-hover:var(--awb-color7);--awb-bg-size:cover;--awb-border-radius:60px 60px 60px 60px;--awb-width-large:80%;--awb-margin-top-large:0px;--awb-margin-bottom-large:60px;--awb-spacing-left-large:calc( 0 * calc( 100% - ) );--awb-width-medium:80%;--awb-order-medium:0;--awb-spacing-left-medium:calc( 0 * calc( 100% - ) );--awb-width-small:100%;--awb-order-small:0;\"><div class=\"fusion-column-wrapper fusion-column-has-shadow fusion-flex-justify-content-flex-start fusion-content-layout-column\"><div class=\"fusion-title title fusion-title-9 fusion-sep-none fusion-title-text fusion-title-size-three\" style=\"--awb-text-color:var(--awb-color1);--awb-margin-bottom:20px;--awb-margin-top-small:0px;--awb-margin-right-small:0px;--awb-margin-bottom-small:0px;--awb-margin-left-small:0px;\"><h3 class=\"fusion-title-heading title-heading-left fusion-responsive-typography-calculated\" style=\"margin:0;--fontSize:30;line-height:var(--awb-typography1-line-height);\">Sounds exciting and would you like to talk about it?<\/h3><\/div><div ><a class=\"fusion-button button-flat fusion-button-default-size button-default fusion-button-default button-1 fusion-button-default-span fusion-button-default-type\" style=\"--awb-margin-top:20px;--awb-margin-bottom:20px;--button-border-radius-top-left:30px;--button-border-radius-top-right:30px;--button-border-radius-bottom-right:30px;--button-border-radius-bottom-left:30px;\" target=\"_self\" href=\"https:\/\/www.bayoomed.com\/en\/#contact\"><span class=\"fusion-button-text awb-button__text awb-button__text--default\">Contact us now<\/span><\/a><\/div><\/div><\/div><\/div><\/div><\/p>\n","protected":false},"author":8,"featured_media":2159,"template":"","categories":[18,73],"class_list":["post-4329","news","type-news","status-publish","has-post-thumbnail","hentry","category-development","category-medical-app-en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.6 (Yoast SEO v27.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>From Xamarin.Forms to .NET MAUI - BAYOOMED<\/title>\n<meta name=\"description\" content=\"In this blog post, we report on our experiences migrating a Xamarin.Forms app to .NET MAUI.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"From Xamarin.Forms to .NET MAUI\" \/>\n<meta property=\"og:description\" content=\"In this blog post, we report on our experiences migrating a Xamarin.Forms app to .NET MAUI.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/\" \/>\n<meta property=\"og:site_name\" content=\"BAYOOMED\" \/>\n<meta property=\"article:modified_time\" content=\"2024-10-16T13:12:58+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.bayoomed.com\/wp-content\/uploads\/sites\/4\/2023\/09\/BAYOOMED-Connectivity-Leistung.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1030\" \/>\n\t<meta property=\"og:image:height\" content=\"610\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.bayoomed.com\\\/en\\\/news\\\/from-xamarin-forms-to-net-maui\\\/\",\"url\":\"https:\\\/\\\/www.bayoomed.com\\\/en\\\/news\\\/from-xamarin-forms-to-net-maui\\\/\",\"name\":\"From Xamarin.Forms to .NET MAUI - BAYOOMED\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.bayoomed.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.bayoomed.com\\\/en\\\/news\\\/from-xamarin-forms-to-net-maui\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.bayoomed.com\\\/en\\\/news\\\/from-xamarin-forms-to-net-maui\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.bayoomed.com\\\/wp-content\\\/uploads\\\/sites\\\/4\\\/2023\\\/09\\\/BAYOOMED-Connectivity-Leistung.jpg\",\"datePublished\":\"2024-10-16T13:06:10+00:00\",\"dateModified\":\"2024-10-16T13:12:58+00:00\",\"description\":\"In this blog post, we report on our experiences migrating a Xamarin.Forms app to .NET MAUI.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.bayoomed.com\\\/en\\\/news\\\/from-xamarin-forms-to-net-maui\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.bayoomed.com\\\/en\\\/news\\\/from-xamarin-forms-to-net-maui\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.bayoomed.com\\\/en\\\/news\\\/from-xamarin-forms-to-net-maui\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.bayoomed.com\\\/wp-content\\\/uploads\\\/sites\\\/4\\\/2023\\\/09\\\/BAYOOMED-Connectivity-Leistung.jpg\",\"contentUrl\":\"https:\\\/\\\/www.bayoomed.com\\\/wp-content\\\/uploads\\\/sites\\\/4\\\/2023\\\/09\\\/BAYOOMED-Connectivity-Leistung.jpg\",\"width\":1030,\"height\":610,\"caption\":\"BAYOOMED Connectivity Leistung\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.bayoomed.com\\\/en\\\/news\\\/from-xamarin-forms-to-net-maui\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\\\/\\\/www.bayoomed.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"News\",\"item\":\"https:\\\/\\\/www.bayoomed.com\\\/news\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"From Xamarin.Forms to .NET MAUI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.bayoomed.com\\\/#website\",\"url\":\"https:\\\/\\\/www.bayoomed.com\\\/\",\"name\":\"BAYOOMED\",\"description\":\"We engineer medical software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.bayoomed.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"From Xamarin.Forms to .NET MAUI - BAYOOMED","description":"In this blog post, we report on our experiences migrating a Xamarin.Forms app to .NET MAUI.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/","og_locale":"en_US","og_type":"article","og_title":"From Xamarin.Forms to .NET MAUI","og_description":"In this blog post, we report on our experiences migrating a Xamarin.Forms app to .NET MAUI.","og_url":"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/","og_site_name":"BAYOOMED","article_modified_time":"2024-10-16T13:12:58+00:00","og_image":[{"width":1030,"height":610,"url":"https:\/\/www.bayoomed.com\/wp-content\/uploads\/sites\/4\/2023\/09\/BAYOOMED-Connectivity-Leistung.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/","url":"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/","name":"From Xamarin.Forms to .NET MAUI - BAYOOMED","isPartOf":{"@id":"https:\/\/www.bayoomed.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/#primaryimage"},"image":{"@id":"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/#primaryimage"},"thumbnailUrl":"https:\/\/www.bayoomed.com\/wp-content\/uploads\/sites\/4\/2023\/09\/BAYOOMED-Connectivity-Leistung.jpg","datePublished":"2024-10-16T13:06:10+00:00","dateModified":"2024-10-16T13:12:58+00:00","description":"In this blog post, we report on our experiences migrating a Xamarin.Forms app to .NET MAUI.","breadcrumb":{"@id":"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/#primaryimage","url":"https:\/\/www.bayoomed.com\/wp-content\/uploads\/sites\/4\/2023\/09\/BAYOOMED-Connectivity-Leistung.jpg","contentUrl":"https:\/\/www.bayoomed.com\/wp-content\/uploads\/sites\/4\/2023\/09\/BAYOOMED-Connectivity-Leistung.jpg","width":1030,"height":610,"caption":"BAYOOMED Connectivity Leistung"},{"@type":"BreadcrumbList","@id":"https:\/\/www.bayoomed.com\/en\/news\/from-xamarin-forms-to-net-maui\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.bayoomed.com\/en\/"},{"@type":"ListItem","position":2,"name":"News","item":"https:\/\/www.bayoomed.com\/news\/"},{"@type":"ListItem","position":3,"name":"From Xamarin.Forms to .NET MAUI"}]},{"@type":"WebSite","@id":"https:\/\/www.bayoomed.com\/#website","url":"https:\/\/www.bayoomed.com\/","name":"BAYOOMED","description":"We engineer medical software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.bayoomed.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/www.bayoomed.com\/en\/wp-json\/wp\/v2\/news\/4329","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bayoomed.com\/en\/wp-json\/wp\/v2\/news"}],"about":[{"href":"https:\/\/www.bayoomed.com\/en\/wp-json\/wp\/v2\/types\/news"}],"author":[{"embeddable":true,"href":"https:\/\/www.bayoomed.com\/en\/wp-json\/wp\/v2\/users\/8"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.bayoomed.com\/en\/wp-json\/wp\/v2\/media\/2159"}],"wp:attachment":[{"href":"https:\/\/www.bayoomed.com\/en\/wp-json\/wp\/v2\/media?parent=4329"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bayoomed.com\/en\/wp-json\/wp\/v2\/categories?post=4329"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}