Xamarin, one ring to rule them all

Auteur: Alberto Aguzzi

Eens in de zoveel tijd verschijnt er een product op de markt dat een gamechanger mag worden genoemd. Voor de Microsoft-developer gericht op app-development is dit Xamarin. Geen enkel product empowered de C# app-developer meer dan Xamarin!

Wat is Xamarin?

Xamarin is een manier om met Microsoft-ontwikkeltaal en -tooling apps te bouwen voor alle mobiele platformen: Android, iOS, Windows, Xbox, desktop, tablet, pc of wearable. Dit is de ware kracht van het platform.

Veel Microsoft-developers hebben tijd gestoken in de ontwikkeling van Windows & Windows Phone apps. Toen dit platform niet zo’n groot succes bleek als verwacht, bleef ook de golf app-aanvragen uit. Xamarin heeft ervoor gezorgd dat dit werk en deze kennis niet verloren gaat door de mogelijkheid te bieden om dit in te zetten voor platformen die wél een behoorlijk marktaandeel hebben. Bovendien profiteren niet alleen app-ontwikkelaars hiervan, álle Microsoft-ontwikkelaars zijn opeens in staat om apps te bouwen voor platformen die eerder niet makkelijk te ontsluiten waren. Geen Objective-C, Swift of Java maar het familiaire C# als programmeertaal! En alle voor hun reeds bekende en in de praktijk bewezen middelen & technieken, zoals Visual Studio, TFS, Unit Testen, Continuous Integration e.d., worden ingezet om deze nieuwe markt te bedienen.

Waarom Xamarin?

Het ‘one ring to rule them all’ principe van Xamarin biedt veel meerwaarde voor apps met een lange levensduur en waar een roadmap aan toekomstige functionaliteit bij ligt. Nieuwe functionaliteit kan periodiek op een zo controleerbaar en herhaalbaar mogelijke manier gereleased worden. Xamarin ondersteunt je daarbij, door gebruik te maken van één programmeertaal voor alle developers en een zo groot mogelijke hoeveelheid gedeelde code. Developers kunnen zo makkelijk opgeschaald worden en code hoeft veelal maar één keer geschreven te worden en kan beschikbaar worden gemaakt in al de te genereren apps voor ieder platform. Verder kan door het inrichten van het continuous delivery proces ook automatisch de user interface getest worden op fysieke apparaten waarna er direct naar testers en eventueel store gepubliceerd kan worden. Minder bugs en een snellere time to market zijn slechts een paar van de voordelen.

Traditional vs. Forms

Xamarin kent twee varianten waarmee apps gerealiseerd kunnen worden. Xamarin Traditional en het later uitgebrachte Xamarin Forms. Met beide varianten worden native apps gemaakt waarbij zo veel mogelijk code gedeeld wordt tussen alle platformen. Het grote verschil tussen de beide varianten is de plaats waar de User Interface zich bevindt. Bij Xamarin Forms zit deze namelijk ook in het gedeelde project, waarbij dus niet enkel code maar ook UI gedeeld wordt tussen alle platformen. Deze wordt dan eenmaal geschreven in XAML, in tegenstelling tot de Traditional-variant waar de UI zich in ieder specifiek platform bevindt. Bij iOS in storyboards of xib-bestanden, bij Android in axml-bestanden en bij Windows in XAML. In alle gevallen kan de UI in C#-code worden geschreven maar in dat geval mis je het gebruik van de UI designertools.

Xamarin Traditional, Xamarin Forms

De keuze voor Xamarin Traditional of Forms moet gemaakt worden o.b.v. het UI design van de app. Indien er gekozen wordt voor een design dat er op ieder platform herkenbaar en haast hetzelfde uit moet zien, dan is de keuze voor Xamarin Forms de betere. De UI wordt eenmaal gedefinieerd en specifieke afwijkingen kunnen worden geïmplementeerd door het ontwikkelen van platform specifieke renderers. Indien men een sterkte aansluiting zoekt bij de native look-and-feel van ieder platform is de keuze voor Xamarin Traditional de betere. De UI wordt per platform geïmplementeerd met alle vrijheid tot het gebruik van de platform native controls. Dit zou ook met Xamarin Forms kunnen, alleen ben je dan zoveel tijd kwijt aan het schrijven van custom renderers dat de winst van het eenmaal schrijven van de UI code teniet wordt gedaan.

Kwalitatief hoogwaardig

Macaw maakt tijdens de realisatie van Xamarin apps altijd gebruik van diverse frameworks en NuGet packages. Deze versnellen de ontwikkeling van apps doordat er gebruik wordt gemaakt van componenten die platform specifieke functionaliteit abstraheren tot een set van generieke api’s. Deze zijn eenduidig van opzet en daardoor relatief eenvoudig te implementeren in zowel Xamarin Traditional als Forms. Omdat deze frameworks en componenten zich reeds in de praktijk bewezen hebben, zorgen zij er niet alleen voor dat de apps sneller ontwikkeld worden, maar ook dat deze robuuster en minder foutgevoelig zijn. Het ontwikkelproces is zo beter te voorspellen en budgetoverschrijvingen zijn veelal verleden tijd.

Een aantal van deze frameworks en componenten zijn:

  • MvvmCross of MVVM Light Toolkit.
    Apps worden altijd ontwikkeld o.b.v. het MVVM patroon. Dit zorgt voor een duidelijke scheiding van verantwoordelijkheden. Unit Testen van code is eenvoudig op te zetten en zaken als Inversion of Control, Dependency Injection  en Navigatie zijn ingebakken.
  • Refit.
    Deze NuGet package stelt je in staat om een eindpoint op te maken als Interface die gedecoreerd is met attributen om de verschillende API calls beschrijven. 
  • PropertyChanged.Fody.
    INotifyPropertyChanged implementatie d.m.v. attributen op een class.
  • Xamarin.Plugins.Settings.
    Laat je op een eenduidige manier settings definiëren in de PCL en gebruikt voor het opslaan de platform specifieke Shared Preferences voor Android, NSUserDefaults voor iOS of IsolatedStorageSettings voor Windows
  • Xamarin.Plugins.Connectivity.
    Cross platform manier om o.a. de connectie te controleren en informatie te verkrijgen over het type connectie, de bandwijdte e.d.
  • FFImageLoading.
    Library om snel en gemakkelijk plaatjes te laden, cachen en transformeren.
  • Newtonsoft.Json.
    JSON framework voor .NET om objecten te serializeren/deserializeren.

Minimum viable product or not?

Niet al de te ontwikkelen functionaliteit hoeft al bekend te zijn op het moment van starten. Klanten werken vaak op een manier waarbij er eerst een minimum viable product (MVP) wordt gereleased en er vervolgens wordt gekeken naar de functionaliteit waar gebruikers de meeste behoefte aan hebben. Dit kan bijvoorbeeld makkelijk gefaciliteerd worden door het opnemen van een feedback optie in de app. Desgewenst kunnen gebruikers functionaliteit aandragen of stemmen op vooraf door de klant gedefinieerde functionaliteit. De onderdelen met de hoogste prioriteit worden in een vooraf aantal gedefinieerde sprints gebundeld tot een nieuwe release. Zo houd je gebruikers ook betrokken bij het product of de dienst van de klant. Gebruikers zien de app niet als een eenmalig product met een vast aantal uit te voeren taken, maar merken dat de app ‘leeft’ en met hun behoeften meegroeit. Voordeel van deze manier van werken is dat de investering die gedaan moet worden opgaat aan het creëren van business value waar direct behoefte aan is bij de gebruiker. Macaw helpt klanten om op deze manier zo snel mogelijk, met zo min mogelijk budget een applicatie te realiseren.

Ook een app op alle bekende platformen?
Neem hieronder contact op met onze klantadviseur.

Rob Eskes
Solution Consultant

Ook een app op alle bekende platformen?