M2mobi - Xamarin: een solide cross-platform oplossing?
Alle blogs

Xamarin: een solide cross-platform oplossing?

Waarom nog investeren in de ontwikkeling van een volledig native app als je ook gebruik kan maken van een cross-platform oplossing? Bij M2mobi ontwikkelen we native Android en iOS apps voor onze klanten, omdat we sterk geloven in een volledig native ervaring. Aan de andere kant zien we de laatste tijd cross-platform oplossingen als paddenstoelen uit de grond schieten. Kunnen deze oplossingen inmiddels dezelfde ervaring bieden als native apps? En hoe zouden we dit binnen M2mobi kunnen inzetten? Om deze vraag goed te kunnen beantwoorden heeft Michael, Developer bij M2mobi, een uitgebreid onderzoek hiernaar gedaan.

Native en cross-platform, wat is dat eigenlijk?

Bij M2mobi ontwikkelen we native apps. Dit betekent dat er een app specifiek voor elk platform wordt ontwikkeld (iOS en Android) en dat er dus ook de daarvoor bestemde ontwikkeltools worden gebruikt. In het geval van Android is dit Java/ Kotlin en in het geval van iOS is dit Swift/ Objective C. Door te werken met deze specifieke tools kunnen ontwikkelaars alle standaard features van het desbetreffende besturingssysteem optimaal gebruiken. Native apps werken dan ook goed samen met de ingebouwde functies van een device, zoals de collapsing toolbars op android devices, en leveren om die reden een doorgaans betere UX ervaring. Het ontwikkelen van een native app betekent logischerwijs wel dat een app 2 keer ontwikkeld dient te worden, een versie voor elke operating systeem.

Kiest een ontwikkelaar voor een cross-platform oplossing, dan hoeft hij maar één app te ontwikkelen welke vervolgens over verschillende platformen gebruikt kan worden. Alle cross-platform oplossingen hebben dan ook eenzelfde doel: sneller en gemakkelijker een app voor beide platformen ontwikkelen met behulp van een gedeelde code base. Dat klinkt misschien als een ideale oplossing, ware het niet dat cross-platform apps een trager performance hebben dan native apps. Daarnaast ondervinden cross-platform apps vaak problemen door device fragmentation. Dit komt voor wanneer gebruikers een oudere versie van een besturingssysteem gebruiken, terwijl andere gebruikers de app op nieuwere versies gebruiken.

Bij de keuze tussen native en cross-platform weeg je dus twee factoren tegen elkaar op: gebruikerservaring en budget.

img native crossplatform

Xamarin

Een van die cross-platform oplossingen is Xamarin Native, een tool welke zichzelf al eerder als potentieel heeft bewezen tijdens een van onze quickscans. Bij het ontwikkelen in Xamarin Native worden de frameworks van Android en iOS behouden en wordt er ontwikkeld in Xamarin.Android en Xamarin.iOS. Een tweede variant, waarbij de platform specifieke frameworks niet van toepassing zijn, is Xamarin.Forms.

Xamarin.Forms sluit het minst aan op de native ontwikkeling die we bij M2mobi toepassen. Deze variant van Xamarin is met name geschikt voor vrij ‘basic’ apps. Meer geavanceerde features vragen binnen Xamarin.Forms om een native geschreven code per platform. Je kunt je dus afvragen of het de moeite waard is om een volledig gedeelde codebase te hebben, wanneer native geschreven code per platform onmisbaar blijft. Daarnaast is de .Forms community erg klein en is er weinig online content te vinden. Stuit je als developer op een probleem? Verwacht dan niet een antwoord te vinden bij een eerste google search.

Het onderzoek

De keuze voor Xamarin Native zou een stap in efficiëntie en effectiviteit kunnen zijn. De vraag is echter of deze oplossing ook voldoet aan de hoge kwaliteitseisen die we bij M2mobi stellen aan de apps die we voor onze klanten ontwikkelen. Vanuit die vraag heeft Michael de volgende probleemstelling opgesteld:

Hoe kan Xamarin binnen M2mobi gebruikt worden om veel code tussen de native platformen te delen en tegelijkertijd wel te voldoen aan alle bestaande eisen voor een M2mobi app?

Om antwoord te geven op de bovenstaande probleemstelling heeft Michael eerst onderzocht welke ontwerpprincipes en -condities van belang zijn bij het ontwikkelen van een app in Xamarin. Deze principes en condities kunnen worden gezien als een set van belangrijke onderwerpen die van toepassing zijn bij het gehele ontwikkelproces van een app - van het ontwikkelen en testen tot het publiceren en onderhouden. Alleen door alle relevante onderwerpen te onderzoeken kan er worden gesteld of Xamarin van toegevoegde waarde kan zijn tijdens de ontwikkeling van een native app.

Een voorbeeld van één van deze onderwerpen (principes) is de ‘code inspectie’. Voor het ontwikkelen van een solide native app dient er op het gebied van code inspectie te worden voldaan aan een tweetal condities. Namelijk, het mogelijk maken van code reviews en het uitvoeren van statische code analyses. Code reviews stellen developers binnen een team in staat elkaars code te controleren om zo de beoogde kwaliteit te waarborgen. Desondanks kunnen code reviews niet voorkomen dat er binnen de code base ‘menselijke’ fouten worden gemaakt. Om dit toch zoveel mogelijk te voorkomen kan er gebruik worden gemaakt van statische code analyse tools. Deze tools laten een set van regels los op de gehele code base om zo zoveel mogelijk menselijke fouten te voorkomen.

Eenmaal een set van vereiste ontwerpprincipes en -condities te hebben opgesteld, heeft Michael onderzocht hoe deze set in de praktijk kan worden toegepast op de verschillende ‘onderzoeksobjecten’. Om Xamarin in de praktijk te kunnen testen is er een bestaande app van M2mobi als testobject gebruikt om een goede referentie te hebben.

img xamarin

Resultaten

Michael heeft een heldere set van ontwerpprincipes en -condities kunnen opstellen die gebruikt kan worden als basis voor het ontwikkelen van een app in Xamarin. Deze principes en condities kunnen op een enkele na goed geïmplementeerd worden in een native ontwikkeling en kunnen resulteren in een efficiënter ontwikkelen. Die ‘enkele’ conditie is het gebruik van statische code analyse tools. Deze zorgen ervoor dat bekende programmeerfouten uit het ontwikkelproces worden gefilterd. Een ander belangrijk resultaat van dit onderzoek is dat een app ontwikkeld in Xamarin Native vrijwel niet te onderscheiden is voor een eindgebruiker van een volledig native ontwikkelde app.

Echter voorwaarde blijft dat er een hoop platform specifieke kennis nodig is, aangezien er niet gewerkt kan worden met enkel een gedeelde code base. Om een volledig native ervaring voor de eindgebruiker te bereiken, zou een project nog altijd een Android en iOS developer nodig hebben. Waar het op neerkomt is dat deze, daar waar mogelijk, om beurten een stuk gedeelde code schrijven waar de ander vervolgens van kan profiteren.

Naast de kennis van de platform specifieke tools en Xamarin, dient een developer ook kennis te hebben van .Net (dot-net) en C#. Voor het ontwikkelen van een app in Xamarin maak je namelijk gebruik van het .Net framework en schrijf je de code in C#, ook wel de programmeertaal. Dit hoeft echter niet als barrière gezien te worden, aangezien deze frameworks een hoop eigen features bieden.

Tot slot dient er rekening gehouden te worden met het feit dat de hoeveelheid gedeelde code variabel is. Wanneer een app weinig business rules bevat en andere deelbare logica, zal de hoeveelheid gedeelde code relatief kleiner zijn. Als hierbij de User Interface erg complex is en op maat ontwikkeld moet worden, zal dit nog meer platform specifieke code vragen. Is tijd-efficiëntie - en dus een gedeelde code - het hoofddoel voor het gebruik van Xamarin? Baseer je keuze dan op basis van de UI complexiteit en de hoeveelheid business logica van het desbetreffende project.

Conclusie

Kunnen we Xamarin als solide cross-platform oplossing beschouwen? Zeker, Xamarin (Native) is een volwassen tool en kan ik in aantal gevallen leiden tot een meer tijd-efficiënt ontwikkelen. Daarbij benadrukken we wel ‘in aantal gevallen’. Het hangt nog altijd van elke specifieke case af of Xamarin een juiste oplossing is. Naast de kennis van de native ontwikkeltools per platform (Android en iOS), is er ook voldoende kennis van .Net en C# nodig.

Twee andere belangrijke factoren om rekening mee te houden zijn de User Interface complexiteit van een project en de hoeveelheid business logica. Zijn deze respectievelijk erg complex en groot? Dan lijkt een volledig native ontwikkeling nog altijd de meest solide oplossing.

Andere artikelen

Wees de eerste.

Krijg als eerste toegang tot speciale content als whitepapers en blog posts.