Mobile development met Bitrise en Xamarin

Mobile development met Bitrise en Xamarin
Mobile development met Bitrise en Xamarin

Een praktische gids in 3 stappen

Filip Heijnemans is al drie jaar developer bij het Mobile Development team van RMDY. Zo werkte hij op tal van projecten waarbij we Bitrise gebruiken voor continuous integration (CI). Die set-up gebeurt vaak door de team leads, waardoor Filip als front-end-developer nooit echt in contact komt met de ontwikkeling van de Git flow.

Omdat we bij RMDY nooit stilzitten, besloot hij zelf dieper te graven in een basic set-up voor CI met Bitrise in een Xamarin-project. Denk je nu “Euh, wat?!”. Geen zorgen, we leggen je alles haarfijn uit. De originele tekst die Filip op Medium postte kan je hier ook altijd nalezen.

Filip Heijnemans

via GIPHY

CI? Bitrise?

Voor we overgaan naar het stappenplan dat Filip gevolgd heeft tijdens zijn project, is het niet onbelangrijk om een aantal begrippen te duiden.

Zo zijn termen als CI (continuous integration), Bitrise en Git flow mogelijk niet even helder voor iedereen; we kunnen niet allemaal een geroutineerde mobile developer zijn.

First things first dus, aangezien het over gangbare termen en flows gaat binnen de werking van het Mobile team.

  • Continuous integration: Continuous Integration of CI is een manier van werken waarbij elk lid van een team dat op hetzelfde project zit afzonderlijke aanpassingen aan de code samenvoegt in een centraal punt. Zo ziet elk teamlid diezelfde veranderingen.
  • Bitrise: Bitrise is het CI system dat die aanpassingen automatisch bouwt, test en verstuurt naar de testers. Dat laatste onderdeel heet Continuous Delivery of CD.
  • Git flow: Git flow is een stappenplan dat veel developers volgen en duidelijk vertelt wat er moet gebeuren en wanneer dat gedaan moet worden. Git is een open source  versiebeheersysteem waarin de volledige ontwikkelingsgeschiedenis van een project wordt opgeslagen.

Voorbeeld van Git flow

een developer start met de ontwikkeling van een nieuwe feature in een app. Om dat te doen, maakt hij of zij een vertakking van de code base, oftewel de broncode.

Wanneer hij of zij daarmee klaar is, maakt hij een verzoek aan om die vertakking op te nemen in de broncode. Meestal wordt er vooraf bepaald welke nieuwe features gemaakt moeten worden. Wanneer die allemaal klaar zijn, spreek je van een nieuwe release  van  de code base.

Die wordt op zijn beurt opnieuw getest om te zien of er bugs zijn. In dat geval maakt de developer opnieuw vertakkingen van de  release en worden die opnieuw verzocht om op de broncode van de release te zetten.

Uiteindelijk gaat alles terug naar de broncode zodat  die ten alle tijden de meest up-to-date veranderingen heeft.

Voorbereiding

Wat hebben we nodig voor dit project?

Voor dit project gebruiken we Bitbucket, maar in principe volstaat een andere Git-provider ook. We kozen voor Bitrise als CI system omdat het best eenvoudig is om je data-opslag te verbinden.

Ze hanteren een cleane interface waarin je snel een nieuwe app kan toevoegen.

Mobile development - Continuous integratie bij toevoeging van nieuwe app
User Interface om een nieuwe app toe te voegen in Bitrise

Om het project te beginnen, start je met de set-up van Bitrise. Daarvoor volg je volgende stappen:

Stap 1: setup Bitrise

  1. Kies het account dat je wil gebruiken en of je dat privé of openbaar wil zetten.
  2. Beslis met welk project je wil verbinden. Zoals gezegd, gebruiken we Bitbucket omdat ons account al gelinkt is met dat van Bitrise. Maar Git-providers zijn even goed.
  3. De volgende stap is om toegang te geven tot je data. Meestal kan je gewoon de default settings gebruiken om automatisch te linken. Als je toch toegang tot privé-accounts wil verlenen, kan dat. Zo niet, kies je auto add ssh.
  4. Hierna kiezen we op welke tak Bitrise de configuratie zal baseren. Dit moet de tak zijn die ook de configuratie van het project bevat, vermoedelijk de master branch dus. Een project heeft namelijk een boomstructuur waarbij de  stam  de basis is van alle code changes en de meest recente en werkende versie van het project is. Een tak kan je beschouwen als een bepaalde feature of verandering. Een nieuwe feature vereist dus een nieuwe vertakking.
  5. Tot slot klik je op next en voltooit Bitrise de configuratie. Dit neemt mogelijk een aantal minuten in beslag.
Mobile development - Continuous Integration Keuze databank
Keuze van je databank

Wanneer je deze stappen doorlopen hebt, mag je niet vergeten om de gedetecteerde configuratie na te kijken. Je kan dit ook steeds manueel doen door onderaan debug of release te kiezen.

Hierna kies je het platform voor Xamarin. Zo voltooi je de initiële setup om Bitrise automatische builds van jouw project te laten maken. Builds in deze context zijn eigenlijk de feitelijke apps.

Bitrise zal je code dan doorlopen en er een app van maken die je kan downloaden en installeren op je toestel. Dit kan allerhande software zijn, maar ook websites. Dit verloopt bijzonder eenvoudig zoals verwacht.

Wil je toch meer en meer diepgaande informatie kan je terecht op de de site van Bitrise.

Mobile development - Configuratie van Continious integratie
Configuratie

Stap 2: project dashboard

De volgende stap in het project is het project dashboard configureren. Dat bevat een aantal belangrijke knoppen of tabs:

  • Builds: start manueel een nieuwe build of raadpleeg de lijst van vorige en lopende builds.
  • Team: hier nodig je andere mensen uit om mee aan het project te werken.
  • Workflow: dit is de belangrijkste component. Hier zie je niet enkel de huidige workflow, maar kan je ook nieuwe flows toevoegen en/of hun naam wijzigen. Zo kan je er bijvoorbeeld één toevoegen gericht op ontwikkeling en eentje specifiek voor productie.

De workflow van het project werkt volledig naar behoren en doet wat het moet doen. Maar voor de meeste projecten die we uitvoeren, doen we Unit testing.

Om de build deze tests te laten doen, moeten we een NUnit runner toevoegen na de NUGET restore. NUnit runner is een stap in de flow op Bitrise.

Het zal onze Unit tests uitvoeren die we hebben gemaakt in het project. Unit tests worden gebruikt om bepaalde stukjes code automatisch te testen zodat we altijd zeker zijn dat de logica erachter werkt zoals verwacht.

NUGET restore is een stap in de flow op Bitrise. Dit zorgt ervoor dat alle packages (blokken code van het internet dat onze code vergemakkelijkt en doet werken) opnieuw worden opgehaald zodat ze ons project kunnen ondersteunen.

Mobile development - Continuous Integration workflow
Workflow

Stap 3: triggers, pull requests en merge check

Tot slot volgen er nog een aantal stappen voor de setup klaar is.

  • Triggers: Wanneer je CI doet, moet je rekening houden met wanneer je het building proces wil triggeren. Dit kan je instellen bij het tabblad triggers. Het moment waarop we een build willen triggeren, is wanneer er code op de development branch wordt geduwd. Wanneer de developer klaar is met zijn feature wil hij dat toevoegen aan de code base. Hij zal dus een verzoek (pull request) moeten doen om dat te kunnen. Pas wanneer  dat verzoek goedgekeurd is, wordt de feature toegevoegd aan de code base. Dit is het moment dat een build getriggerd wordt zodat er automatisch een nieuwe app versie gebouwd wordt en die getest kan worden.
  • Pull requests: Voor pull requests willen we minstens builds van pull requests hebben die afkomstig zijn van features op de development branch. Die pull requests zijn de verzoeken die een developer doet om zijn feature in de code base te krijgen. Je kan hierin heel diep gaan en elk aspect manueel managen, maar dat laten we in deze blogpost even buiten beschouwing.
  • Merge check: Als je daarna naar Bitbucket gaat en de settings van je project opent, kan de   toestemming voor de branch veranderen en een merge check uitvoeren voor succesvolle builds

Gevoel?

“Toen ik me hieraan zette, wist ik op voorhand niet hoe gemakkelijk of moeilijk het zou zijn omdat het mijn eerste ervaring was met deze setup. Dat idee veranderde naarmate ik me er meer in verdiepte.”

“CI met Bitrise is best eenvoudig om mee te starten. Daarnaast werkt de integratie met Xamarin ook perfect. Daardoor zie ik mezelf nog meer geavanceerde toepassingen proberen rond dit onderwerp. Dat doen we zeker bij RMDY, maar dat is voor een volgende post.” Filip Heijnemans