In detail
Xamarin naar MAUI-migratie

Wat een uitdaging! Volgens Microsoft een heel eenvoudige operatie die er hoofdzakelijk uit zou bestaan de namespaces in de declaraties van de XAML-bestanden te vervangen. Een migratie die geen enkel probleem zou mogen opleveren.
In de praktijk bleek het heel anders te zijn.
In 2020: migratie naar MAUI 6.0. Het platform is nog onvoldoende stabiel. De applicatie blijft geplaagd door NullReferenceExceptions. We moeten wachten tot juni 2023 en MAUI 7.0 om over een versie te beschikken die bemoedigende tekenen van betrouwbaarheid vertoont. Een bijkomende moeilijkheid is dat bepaalde NuGet-packages die onder Xamarin werden gebruikt, niet beschikbaar zijn. Gelukkig kondigt zich met versie 8.0 en de daaropvolgende versies een meer bewezen stabiliteit aan.
Deze migratie is echter een echte opportuniteit.
MAUI maakt deel uit van een echte multiplatformomgeving: Windows, Android, iOS, Linux. In plaats van elke Xamarin-applicatie afzonderlijk te migreren, kan de globale architectuur volledig worden herbekeken. Voortaan kan een aanzienlijk deel van de code gemeenschappelijk worden voor een hele reeks applicaties, services, … of het nu gaat om front-endapplicaties, back-endapplicaties of mobiele applicaties. Dit maakt het mogelijk om de topologie van de code opnieuw te bekijken met een echte API, volwaardige business engines, … die gemeenschappelijk zijn voor een veel bredere reeks projecten en ruimschoots verder gaan dan alleen de context van een Xamarin-applicatie. Het compileren van class libraries met compilatievoorwaarden zoals #if IOS of #if ANDROID wordt een krachtig hulpmiddel om de code binnen zeer uiteenlopende applicaties te standaardiseren.
Verouderde componenten verwijderen
In Xamarin was StackLayout onze vriend. In MAUI is dat niet langer het geval. De FillAndExpand-waarden moeten worden vermeden. De Grid-component wordt de referentiecomponent. Ook ListView maakt plaats voor CollectionView. En Frame wordt Border. Het zijn stuk voor stuk deprecated componenten en eigenschappen die geleidelijk moeten worden vervangen om afgestemd te blijven op de evolutie van het platform.
Ook dynamische XAML wordt beïnvloed.
Een applicatie die ik moest migreren, liet gebruikers toe om in een « desktop »-applicatie XAML-code te definiëren die vervolgens dynamisch in de mobiele applicatie werd geïnjecteerd. Uiteraard zijn heel wat XAML-keywords verdwenen of gewijzigd. De standaardgroottes zijn onder Android gewijzigd (Font="Large" werd FontSize="Medium"), grids moeten expliciet alle kolommen en rijen definiëren, bepaalde StackLayouts zijn goede kandidaten om VerticalStackLayouts of HorizontalStackLayouts te worden, … Dit alles wordt op transparante wijze aangepast door specifieke code, om een maximale achterwaartse compatibiliteit met de bestaande configuraties te garanderen.
Uiteindelijk bleek deze migratie, die aanvankelijk als een moeilijkheid werd ervaren, een echte opportuniteit te zijn. Ze maakte het mogelijk om de globale architectuur te herbekijken, meer code gemeenschappelijk te maken en de applicaties opnieuw te positioneren op een modern, opener en duurzamer platform.
