Gruntify your Workflow

Op 5 november heb ik mijn eerste praatje voor de Nederlandse Appcelerator Titanium User Group @TitaniumNL gehouden. In mijn praatje heb ik verteld hoe wij op basis van één codebase meerdere branded apps ontwikkelen. In het bijzonder ging het erover hoe dit proces te automatiseren met behulp van Grunt.
TitaniumNL_2014-Nov-05
De gepresenteerde Grunt buildscripts en configuraties per app zijn een voorbeeld van hoe je je web of app build proces kunt automatiseren. In mijn ogen is hier geen beste manier voor. Het mooie is dat Grunt je in staat stelt zeer flexibel en snel je eigen voorkeuren en normaal handmatige taken te automatiseren.
Aan de manier hoe wij tot ongeveer onze workflow opzet zijn gekomen, ligt wel een aantal uitgangspunten ten grondslag. Onderstaand probeer ik deze puntsgewijs uit te leggen.

Uitgangspunten

Bij het maken van onze Grunt scripts wilden wij de volgende zaken oplossen:
  • App configuraties moeten beheerd kunnen worden in één centrale plaats.
  • De configuraties, build certificates en keystores moeten geversioneerd kunnen worden in Git. Een andere developer moet er direct mee aan de slag kunnen.
  • SDK versies moeten kunnen verschillen per app platform (iOS of Android).
  • Oudere app projecten moeten ook eenvoudig te ‘themen’ zijn.
  • App code signing moet geautomatiseerd plaatsvinden per deploy type.
  • De opzet van de build pipeline moet eenvoudig zijn. Alle afhankelijkheden moeten in de package.json kunnen staan.

Hoe het werkt

Zodra het ‘pre-build’ script gedraaid is, waarmee de app ‘branding’ (theming, app_id, merk) en evt. het platform (Android of iOS) bepaald is, helpen de andere Grunt tasks om automatisch builds voor simulators (Genymotion en iOS) te maken, of builds voor devices met direct de juiste key signing en provisioning. Uiteindelijk kun je net zo makkelijk als test builds ook je uiteindelijke releases voor Google Play en de App Store maken.
Hiervoor gebruiken wij o.a. de volgende custom tasks.

Custom tasks

  • tiapp: Set the app (brand) context (custom tiapp.xml, app/config.json, etc.)
  • sim, geny, test: Kick off iOS Simulator + Genymotion for different devices easily
  • adhoc: Create iOS Adhoc builds and distribute these automatically
  • release: Create production IPAs + APKs
  • release: Jarsign and zipalign using Android tools (via grunt-shell) instead of by Ti CLI

Meer informatie?

Zie Speakerdeck voor mijn slides.
Zie Github voor een voorbeeld app project met de daarbij behorende Grunt scripts en configuraties per app.
Klik hier voor een PDF versie van de slides.