Xamarin VS Native Apps del 1/2

Xamarin app udvikling VS native app udvikling. Kode, vedligeholdelse og udvikling.

Når jeg taler med kunder, spørger de ofte om det er muligt at lave én enkelt kodebase, der er delt imellem Android og iOS (og nogle gange Windows Phone). Det virker ineffektivt for mange, at skrive den ‘samme kode´ to eller tre gange, istedet for blot at skrive en enkelt delt kodebase.

Denne blogpost gennemgår fordele og ulemper ved udvikling i Xamarin, sammenlignet med native udvikling. Vi kommer ikke til at berøre Xamarin Forms, da man kunne skrive en hel blogpost om det emne alene. 

Ligeledes gemmes det til en anden blogpost, at analysere apps implementeret i f.eks. PhoneGap, Cordova, Appcelerator eller andre platforme til Javascript og HTLM5 container apps (som en lille teaser mener jeg, at den slags platforme/værktøjer stort set aldrig kan anbefales).

Genbrug af kode

Xamarin annoncerer på deres hjemmeside, at der i gennemsnit er 75% genbrug af kode imellem forskellige platforme i Xamarin app projekter. Efter i praksis at have anvendt Xamarin i store projekter, virker den procentsats betydeligt overdrevet. Vores erfaring viser at det er svært bare at opnå 50% genbrug, og at man nok maksimalt skal regne med omkring 40%.

Det er primært servicekald, intern datahåndtering, modelklasser og lignende der kan genbruges, imens alt UI generelt implementeres enkeltstående for hver platform. Til udvikling af UI anvendes:

  • Xcode Interface Builder eller Xamarin iOS designer, med storyboard og .xib filer for iOS.
  • Standard XML layout filer for Android.

De bagvedliggende klasser implementeres også seperat for hvert platform, da der i forbindelse med programmering af views og viewcontrollers, er så mange afhængigheder til de respektive platformes API’er, at det er svært at genbruge specielt meget.

Den reelle delte kodebase er altså maksimalt den del af projektet, der ikke er relateret til UI’en. Men da de fleste smartphone og tablet apps er ret viewtunge, ender det delte med at være mindre, end det der skal implementeres specifikt for hver platform.

Genbrug af kode i Xamarin vs Native app udvikling, set i forhold til at udvikle appen til en platform. De 10% genbrug indenfor Native udvikling skyldes, at der altid er en lille besparelse på platform nummer to, pga. viden fra implementeringen på den første platform.

Genbrug af kode i Xamarin vs Native app udvikling, set i forhold til at udvikle appen til en platform. De 10% genbrug indenfor Native udvikling skyldes, at der altid er en lille besparelse på platform nummer to, pga. viden fra implementeringen på den første platform.

Vedligeholdelse

Når man har en færdigimplementeret app kommer spørgsmålet om løbende vedligeholdelse og opdateringer op. Et specifikt spørgsmål i forhold til Xamarin, er om de 40% genbrug også kan opnås i forbindelse med vedligeholdelsen?

Det kommer selvfølgelig an på den enkelte app, men overordnet er vores erfaring, at de fleste apps har langt den største andel af ændringer på UI-delen. Det er sjældent at en app udskifter hele backenden, eller introducerer meget store ændringer i den interne datahåndtering (specielt hvis den er lavet gennemtænkt og bygget godt op fra start af). I enkelte tilfælde introduceres der nye services, men når den overordnede kommunikation er etableret, er det trivielt at tilføje mindre ændringer.

På UI og UX fronten kommer der langt oftere store opdateringer. Nogle gange ved introduktion af nye features. Nogle gange ved helt nye UI eller UX paradigmer, der fører opdateret grafik og nye transitioner eller navigation med sig.

Da den delte kode i Xamarin projekter primært er den statiske del af appen, betyder det også at genbruget er minimalt i forbindelse med vedligeholdelsen.

Udviklingsproces

Som udviklere anvender vi allesammen third party libraries og komponenter, til at gøre vores hverdag lettere. På både Android og iOS er der en lang række gode open source libraries, der kan alt fra himmel til jord. Det er desværre ikke altid man er så heldig på Xamarin. De helt store libraries har nogle gange en Xamarin variant, men i mange tilfælde må man lede forgæves. Det kan betyde meget hyr med at implementere features, der havde været simple at implementere i native udvikling.

Noget andet man aldrig må negligere som programmør, er den hjælp der er at finde på Google, Stackoverflow og lignende. Xamarin har et aktivt og engageret miljø, men der er langt flere udviklere indenfor native app udvikling, der også har flere år på bagen. Min erfaring er at det er betydeligt lettere at finde svar på avancerede problemstillinger på de to native platforme.

Det fører overordnet til at det er langsommere at udvikle i Xamarin end Native. Det er dog svært at sætte en præcis procentsats på hvor meget dette overhead er på, da det varierer meget i forhold til den enkelte opgave. Men det æder som minimum en stor del af besparelsen ved den delte kodebase.

 

I næste blog post ‘Xamarin VS Native Apps del 2/2’ gennemgås de tilgængelige udviklingsmiljøer. Og vi dykker lidt dybere ned i mere avancerede problemstillinger, såsom memory forbrug og garbage collection i Xamarin. Til sidst en opsummering og konklusion på Xamarin VS Native Apps miniserien.

 

Af Andreas Juul Hirszhorn
Lead iOS udvikler hos Touchlogic