Compiler des applications Xamarin (Android / iOS) avec VSTS

VSTS (Visual Studio Team Services) propose un grand nombre d’outils permettant de faciliter la vie des développeurs comme, par exemple, la possibilité de réaliser des builds/release automatique.

Dans le cadre d’un projet Xamarin.Android que nous démarrons pour un client, nous avons souhaité utiliser VSTS pour la génération des builds et HockeyApp pour le déploiement des versions Beta, les 2 outils étant parfaitement compatibles.

Ainsi, nous avons mis en place le système de build, le workflow de déploiement et nous avons testé l’application sur un device (autre qu’un device utilisé par un développeur) pour vite nous rendre compte que l’application crashait au démarrage, juste après le splashscreen.

En utilisant les outils de log, nous avons été en mesure de voir que l’exception qui provoquait cette erreur était quelque chose de similaire à cela:

System.MissingMethodException: Method 'Array.Empty' not found.
 at MvvmCross.Droid.Views.MvxActivityViewExtensions.OnViewCreate (IMvxAndroidView androidView, Android.OS.Bundle bundle) [0x00055] in <filename unknown>:0 
 at MvvmCross.Droid.Views.MvxActivityAdapter.EventSourceOnCreateCalled (System.Object sender, MvvmCross.Platform.Core.MvxValueEventArgs`1 eventArgs) [0x0000c] in <filename unknown>:0 
 at (wrapper delegate-invoke) System.EventHandler`1[MvvmCross.Platform.Core.MvxValueEventArgs`1[Android.OS.Bundle]]:invoke_void_object_TEventArgs (object,MvvmCross.Platform.Core.MvxValueEventArgs`1<Android.OS.Bundle>)

L’erreur précédente correspondait à un code similaire à celui-ci:

var t = Array.Empty<object>();

Cela nous a apparu très étrange car tout fonctionnait bien en local, que ce soit en Release, en Debug, etc. Après quelques investigations, il s’est avéré que la cause du problème était liée aux agents de build proposés par VSTS. En effet, ceux-ci n’utilisent pas la dernière version de Xamarin/Mono, ce qui peut engendrer des comportements surprenants si vous buildez votre application via VSTS.

Pour que tout fonctionne, il faut attendre que Microsoft mette à jour les images des VM des agents de build et, en attendant, vous pouvez:

  • Soit avoir votre propre agent de build avec VS, Xamarin et tous les autres SDKs nécessaires, tant que ceux-ci sont à jour
  • Soit générer vos packages Xamarin en local depuis votre PC puis les déployer à la main via HockeyApp

 

Voilà qui, je l’espère, vous permettra d’y voir plus clair! Smile

 

Happy coding!

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus