xavtool - Xamarin Automating Version Tool
Ces temps-ci, je me retrouve à faire beaucoup de développement mobile. Évidemment, étant sous l’excellente plateforme Xamarin, je dois supporter plusieurs systèmes d’opérations: iOS, Android et UWP. Avant chaque déploiement, je dois m’assurer d’incrémenter les versions en suivant la gestion sémantique de version. C’est une tâche plutôt monotone pouvant être facilement automatisée: c’est ici qu’entre en compte xavtool.
C’est quoi, xavtool
?
xavtool
est un outil en ligne de commande disponible sous Windows via choco, scoop et sous macOS via brew. Il permet, en une seule commande, d’aller modifier les versions dans les fichiers Info.plist
, AndroidManifest.xml
et Package.appxmanifest
.
La détection des applications n’est pas associée à un processus précis de Xamarin, ce qui fait en sorte qu’un développeur iOS qui travaille avec swift pourrait utiliser l’utilitaire sans problème.
Je vous invite sur la page officielle pour en connaître davantage: https://github.com/gabrielrobert/xavtool/
Pourquoi Go?
J’ai profité de l’occasion pour me faire une idée sur Go, un langage de programmation qui m’inspire beaucoup depuis quelques années.
Xamarin est une technologie maintenue par Microsoft, il aurait été normal d’implémenter xavtool
en C#
ou en F#
(qu’on ne me parle pas de VB
!). Je gagne déjà ma vie à écrire du C#
, découvrir de nouvel écosystème n’a jamais tué personne.
De plus, j’ai vraiment été séduit par la philosophie du langage:
- Multi plateforme
- Gestion des erreurs forcée en dehors du classique “happy path”
- Communauté très riche
- Performance mise de l’avant
J’ai utilisé quelques outils qui m’ont permis de livrer quelque chose très rapidement:
- cli - construire des programmes en mode ligne de commande
- semver - facilite la gestion sémantique
- mxj - permettre d’encoder et de décoder du
xml
- go-plist - permettre de travailler des fichiers
plist
facilement - go-multierror - permettre de travailler avec des listes d’erreurs
- testify - plusieurs utilitaires pour agrémenter la librairie de test unitaire standard de
Go
- évidemment, les librairies précompilées offertes par
Go
Utilisation typique
$ xavtool current
1.0.1 - androidApp (...\test\AndroidManifest.xml)
1.0.1 - iOSApp (...\test\Info.plist)
1.0.1 - uwpApp (...\test\Package.appxmanifest)
$ git flow release start '1.1.0'
$ xavtool i
1.0.1: New version: 1.1.0 (...\test\AndroidManifest.xml)
1.0.1: New version: 1.1.0 (...\test\Info.plist)
1.0.1: New version: 1.1.0 (...\test\Package.appxmanifest)
$ git commit -am "Version bump to 1.1.0"
$ git flow release finish -p
À venir
J’ai en tête quelques petites idées pour améliorer la gestion des versions d’une application mobile:
- Gestion du nouveau format des .csproj
- Gestion des AssemblyInfo
- Intégration poussée dans les plateformes de CI: VSTS, AppVeyor, Travis, etc..