Welkom in de cowboy-tijd van cross-platform app development

Mobile-developer-3.1
Kunnen wij ook apps maken? Dat was de vraag waarmee wij 5 jaar geleden het mobile landschap instapten. We waren inmiddels gewend aan iOS 6 en de iPad was een geaccepteerd onderdeel van het ecosysteem. Android daarentegen ging wat stroever. Google was net versie 4 aan het introduceren en dat zou jaren in beslag gaan nemen, waarbij de fragmentatie van het platform tot een hoogtepunt zou komen. We hadden weinig keuze. Apps moesten op zowel Android als iOS werken, en dan het liefst ook op wat oudere versies. Gelukkig was daar Xamarin.

Zo’n 5 jaar geleden werden toestellen met Android 2.3 of zelfs 2.2 nog in grote hoeveelheden verkocht. Door de lage prijs waren ze voor de meeste mensen hun eerste kennismaking met de smartphone. Voor developers een regelrechte hel. Al die mooie nieuwe features, daar kon je helemaal niets mee. Net zo min als met al die trage, goedkope devices. 

Voor ons was het een reden om native ontwikkeling nog een beetje eng te vinden. Daarnaast was het ons met Appcelerator Titanium reeds gelukt om een mooi prototype op te zetten die ons de mogelijkheid gaf om in Javascript een app met 1 codebase te ontwikkelen. Die konden we vervolgens op vele Android en iOS versies laten draaien. Niet beseffende dat dit juist een beerput aan beperkingen open trok, onder andere qua user experience.

Gebrek aan goede developers, geen geschikte tooling
Een probleem wat zich toen al voltrok was het gebrek aan (goede) mobile developers. Het was nog nieuw en de toekomst was nog wat onzeker. Gaan het nu apps worden, of wordt alles uiteindelijk toch weer web-based? Daarnaast was de beschikbare tooling vaak nog niet al te best (Android) of compleet anders dan wat we gewend waren (iOS).

Development voor Java was lekker laagdrempelig, maar het geld was toen nog voornamelijk te vinden bij iOS, en Objective C had toch al een wat hogere instap.

Vandaar dat de Javascript en HTML5 frameworks als paddestoelen uit de grond schoten om dit gat in te vullen. Deze boden een mooie combinatie van een (voor veel developers) bekende taal én de mogelijkheid om voor 2 platformen tegelijkertijd te ontwikkelen.

Het nadeel hiervan was dat je als developer niet goed beseft hoe groot de verschillen onderling tussen platformen zijn, en waarom je met dit soort frameworks dus uiteindelijk tegen een muur van onmogelijkheden aanliep. Elke functionaliteit die werd aangeboden vanuit de gedeelde API van bijvoorbeeld Titanium of PhoneGap was een gemene deler tussen alle platformen die ondersteund werden. Platform-specifieke functionaliteit die niet een bepaalde vorm van ondersteuning had op een ander platform werd vaak compleet niet ondersteund. Of je moest alsnog middels een omweg een eigen native API aanbieden om het vanuit je Javascript codebase aan te kunnen roepen. Een proces dat slecht gedocumenteerd was en meer tijd kostte dan het je uiteindelijk opleverde.

Na een jaar zwoegen om aan wensen van klanten en designers te voldoen met Titanium werd de knoop doorgehakt. Óf we stoppen nu met mobile development óf we vinden een werkbaar alternatief om te bereiken wat we willen. Want de vraag naar mobile apps, die was groot.

Xamarin: hét alternatief
Pure native development zagen we vanwege de investering qua tijd en resources nog niet zitten. Daarnaast zou het de ontwikkeltijd dusdanig verhogen dat we er als kleine speler moeilijk tussen zouden komen, dachten we.

Gelukkig diende zich een ander alternatief voor: Xamarin.

Het bood de mogelijkheid om je codebase in de toegankelijke taal C# te bouwen, met rechtstreekse toegang tot de SDK van elk platform middels een taal-binding. Door de toevoeging van het .NET framework had je daarnaast ook nog eens de beschikking over een krachtig framework met onder andere uitgebreide networking-mogelijkheden. En doordat het .NET platform al een tijd bestond, waren er ook al behoorlijk wat packages beschikbaar om functionaliteit zoals JSON serialization te versimpelen.

Het belangrijkste voordeel was echter de mogelijkheid om binnen 1 solution, naast een iOS en Android project, een cross-platform library op te bouwen. Een zogenaamde Portable Class Library, of PCL. Hierin kun je zoveel mogelijk business logic proberen toe te voegen welke voor beide platformen gelijk is.

In alle marketing-uitingen werd al snel geroepen over 90% code sharing, maar het heeft ons wel een aantal jaren gekost om dit punt te bereiken. Om een goede gemene deler tussen platformen te vinden, en te weten waar je platform-specifieke ondersteuning stopt en de shared code begint, moet je de platformen wel eerst goed leren kennen.

Vier jaar later..
We zijn nu  4 jaar verder en nog steeds blij met de keuze die we hierin gemaakt hebben. Xamarin is een stabiel product gebleken met een sterke community wat zich uit in goede support en vele libraries die het bouwen van apps een stuk gemakkelijker maken.

De volwassenheid van een taal als C# zonder de bagage van decennia geleden maakt het bouwen leuk. Daarnaast geven functionaliteiten binnen .NET zoals Reactive Extensions je de mogelijkheid om heel anders naar application development te kijken dan je gewend was, en zo nieuwe mogelijkheden te ontdekken.

Iedere serieuze mobile app developer die geïnteresseerd is in meer dan 1 platform zou in onze ogen serieus naar Xamarin moeten kijken. De mogelijkheid om business logic tussen verschillende platformen te delen verplicht je om goed na te denken over de architectuur van je app, en maakt verschillende losse componenten meteen stuk beter testbaar.

Meepraten tijdens de Meetup
We gaan dieper in op hoe we een hoge mate van cross-platform code sharing hebben weten te bereiken op de volgende meetup van de Dutch Mobile .NET Developer groep. Deze wordt bij Freshheads in Tilburg gehouden op 26 september. Er zal voldoende tijd zijn om ook nog vragen te stellen aan 1 van onze mobile developers, en om kennis te maken met andere Xamarin developers. Leuk als je erbij bent!

Meer weten over Xamarin? Kom naar de Meet up op dinsdag 26 september!

Schrijf je in!

Meer weten?

Stefan Moonen Mobile Developer