Créer son environnement de développement Xamarin / UWP sous Azure grâce à la Nested Virtualization

August 22, 2017  Written by RudySp@no   Published in Xamarin

Avoir une machine vous permettant de faire du développement sur le cloud à laquelle vous pouvez accéder de n’importe quel device (pc, tablette, …) , de n’importe où (tant que vous avez une connexion internet), peut s’avérer intéressant pour différentes raisons: facilité, accessibilité, stockage, puissance, …. C’est d’autant plus vrai lorsque vous souhaitez faire du développement mobile UWP ou Xamarin (d’ailleurs on dit Xamarin[ə] et pas Xamar1 ! Si si je vous promet… :) ).

Enfin bref, le développement mobile est gourmand en ressources… Il faut un PC robuste pour que Visual Studio ne peine pas trop à afficher les designer XAML, pour faire de la compilation .Net native ou de la « transpilation » Xamarin. Autre point, l’utilisation des émulateurs et simulateurs est un gouffre à mémoire vive…

Le problème jusqu’à peu est qu’il n’était pas possible d’activer Hyper-V sur les machines virtuelles Azure. Du coup impossible de tester les applications UWP sur Windows 10 mobile, les émulateurs reposant dessus. Impossible aussi, d’utiliser les excellents émulateurs Android de Visual Studio… C’est désormais possible grâce à la Nested Virtualization annoncée le mois dernier !

Let’s Go !

  • Création de la VM dans Azure

La possibilité de créer une VM avec la bonne configuration (Dv3, Ev3) gérant la Nested Virtualization est limitée à certains OS de machines virtuelles (Windows Server 2016 ou Windows 10) pour certaines régions (disponible en West Europe :) )…

Dans mon cas, j’ai créé une machine sous Windows 10 grâce au wizard Azure habituel : Virtual Machines -> Add -> Compute -> Create

Tester son Application mobile en toute efficacité!

May 02, 2017  Written by RudySp@no   Published in Xamarin

Le nombre important de terminaux mobiles rend le développement et la validation d’une application mobile très complexe. En effet, il parait utopique pour un développeur ou même pour une grande boite de certifier que son application sera 100% fonctionnelle sur tous les téléphones et tablettes de différentes résolutions, versions d’OS, performances, configurations, etc …

 

Tests UI ?

Tests unitaires, tests d’intégration, … Différentes stratégies de test tentent de valider le bon fonctionnement d’une application lors des phases de développement et de maintenance (tests de non régression notamment).

Un utilisateur qui télécharge une application mobile, qui se retrouve avec une application qui ne s’affiche pas ou mal, abandonnera rapidement et laissera dans le pire des cas une mauvaise appréciation sur le Store… Ce qui découragera les futures personnes intéressées par votre application.

L’idée des « Tests UI » est de faire des tests de surface sur les différents écrans de votre application sur le plus possible de configurations compatibles afin d’éviter ce phénomène…

Dans cette démonstration, j’ai choisi d’utiliser Xamarin Tests UI pour tester mon application.

A noter que ce framework d’écriture de tests ne se limite pas à Xamarin et permet de tester toutes les applications mobiles Android et iOs (natives, Cross-plateformes, Cross-plateformes Web, …).

 

Xamarin Test UI

La création d’un projet « UI Test App » via Visual Studio 2015/2017 est accessible via la section Cross-Platform :

[4/4] Architecture Cross-Plateformes Xamarin : couche plateforme

January 22, 2017  Written by RudySp@no   Published in Xamarin

Contexte

 

Les couches spécifiques BookStore.Droid, BookStore.iOS, BookStore.UWP (…) fournissent du code .Net (portages de Mono) ne pouvant pas être mutualisé par Xamarin. Cette fonctionnalité avancée reste néanmoins essentielle à la pertinence de la technologie.

Dans notre exemple d’application, on trouve les différents namespaces détaillés ci-dessous.

[3/4] Architecture Cross-Plateformes Xamarin : couche présentation

January 21, 2017  Written by RudySp@no   Published in Xamarin

Contexte

 

La librairie BookStore.Forms est notre couche de présentation Cross-Platformes respectant notamment le pattern MVVM.

On y trouve différents namespaces détaillés ci-dessous.

[2/4] Architecture Cross-Plateformes Xamarin: couche métier

January 21, 2017  Written by RudySp@no   Published in Xamarin

Contexte

 

L’assembly BookStore.Business est une dll de type Portable Class Library (l’une des solutions plébiscitées pour partager du code Cross-plateforme).

On y trouve différents namespaces détaillés ci-dessous.

 

Namespaces Providers, DAL

Ce namespace contient des classes à l’image de BookProvider qui servent d’intermédiaire entre le « Front » de l’application et la couche d’accès aux données/la source de données.

++ Ajouter le code métier de votre application à cet endroit.

– Ne pas dupliquer le code métier. Utiliser des méthodes privées chargées de mutualiser ces règles : ValidateBook partagée entre AddBook et UpdateBook.

– Ne pas dupliquer les traitements entre les appels de méthodes via l’utilisation des champs privés en tirant pleinement profit des concepts de la POO : méthode d’initialisation si nécessaire à ne jouer qu’une fois, gestion d’état, cache…

?? Ne pas nécessairement compléxifier votre architecture en créant des librairies métiers de plus bas niveau ou couches d’accès aux données isolées si la complexité de votre application ne le justifie pas. Beaucoup d’applications mobiles se contentent d’appeler des Api Web…

++ Abstraire la couche d’accès aux données afin que les consommateurs puissent simuler les dépendances fortes pour des besoins de tests automatisés.

[1/4] Architecture Cross-Plateformes Xamarin

January 20, 2017  Written by RudySp@no   Published in Xamarin

Contexte

Le but de cet ensemble de billets est de vous présenter le type d’architecture applicative type que je mets en place sur des projets mobiles cross-plateformes Xamarin Forms toutefois la plupart des principes s’appliquent aussi de façon plus large aux applications XAML « classiques » (WPF, WinRT, UWP, …) à base de MVVM et d’autres principes plus généralement à tous types d’applications .NET.

Comme toujours, il n’y a pas de vérités absolues ! L’idée est de partager avec vous ce que je considère être de bonnes pratiques basées sur diverses littératures et acquises au fur et à mesure de mes expériences (références en fin d’article).

Partons sur un cas classique : Une application mobile simple permettant de lister des livres et de les ajouter à un panier.

Voici un schéma détaillé non exhaustif des différents Assemblies=>Namespaces=>Classes qui définissent cette application fictive :

 

Afin de vous expliquer mes choix, je vais au fil de ces billets vous introduire chaque partie. De plus, pour chacune d’entre-elles : je partagerai avec-vous quelques bonnes pratiques, mauvaises pratiques et pratiques à considérer en respectant le formalisme suivant :

++ {Description bonne pratique}

– {Description mauvaise pratique}

?? {Description pratique à considérer}

5 Extensions Visual Studio pour vous simplifier la vie

October 04, 2016  Written by RudySp@no   Published in Visual Studio

Introduction

Dans ce billet, je vais vous présenter mon TOP 5 des petites extensions que j’utilise au quotidien dans Visual Studio. Quand je dis « petites extensions », je ne parle pas de l’artillerie lourde : Resharper, Productivity Power Tools 2015 et cie… Je veux parler de petits outils simples mais tellement efficaces !

 

TidyTabs

Visual Studio offre une expérience de développement de qualité grâce à son système d’onglets détachables, ancrables, pré-visualisables,… Cependant, on a tendance à se retrouver assez rapidement avec un grand nombre d’onglets ouverts ce qui a un impact sur la navigation et surtout sur les performances de notre IDE préféré.

J’utilise TidyTabs pour fermer automatiquement mes vieux onglets lorsque j’ai plus de 8 onglets ouverts (à l’ouverture d’un nouvel onglet ou lors de la sauvegarde d’un fichier).

Le tout est bien sûr paramétrable :

Lien : https://visualstudiogallery.msdn.microsoft.com/b80ab284-83f8-4022-bc78-95af126ba5f0

 

Add new file

Pour ajouter un fichier à un projet, on doit passer par la fenêtre « Add New Item » qui propose un grand panel de possibilités (// divers types de fichiers). Cette fenêtre a par conséquent l’inconvénient de ne pas être très réactive… Il existe des raccourcis tels que ALT+SHIFT+C qui oriente rapidement l’utilisateur vers la création d’une classe mais toujours via la lourde boite de dialogue « Add New Item »…

ILMerge: une solution aux problèmes liés aux dépendances

October 03, 2016  Written by RudySp@no   Published in Autre

Introduction

Lorsque l’on débute le développement .Net, la gestion des dll externes semble un sujet trivial…  Il suffit de récupérer une dll .NET sur internet, la référencer et faire appel au code de celle-ci ou encore mieux utiliser Nuget !

Puis au fur et à mesure des expériences, on découvre des problématiques qui n’ont pas fini de faire suer les développeurs…

Dans ce billet, je vous décriverai les situations qui posent souvent problème et je vous présenterai la solution ILMerge peu connue mais qui peut s’avérer très efficace !

 

Problématique : dll manquante

Considérons la situation suivante :

 

Basiquement, (sans parler du GAC notamment), la compilation de notre exécutable Application.exe va constituer notre dossier bin : répertoire de l’exécutable généré, avec :

  • L’exécutable lui-même
  • Les dll « externes » référencées par l’exécutable
  • Les dll des différentes couches elles-mêmes compilées
  • Pour chacune de ces couches :
    • Les références utilisées explicitement via du code

C’est ce dernier point qui pose problème :( … En effet, il arrive que l’une de nos class library/dll dépende d’une dll sans pour autant l’utiliser directement (chargement dynamique, dll non managée, …).

Migration d’une application vers Xamarin 2/2

September 19, 2016  Written by RudySp@no   Published in Windows 10, Windows Phone, Xamarin

Contexte

Après vous avoir présenté l’environnement Xamarin/Xamarin Forms, le but de cet article est de vous synthétiser quelques unes des problématiques que j’ai pu rencontrer ainsi que les solutions et leçons que j’en ai tirées.

Le but n’est pas de détailler mon application top secrète :) mais de lister quelques conseils génériques qui sont applicables à toute création d’application Xamarin Forms ou migration d’application XAML vers Xamarin.Forms dans notre cas.

 

Par où commencer ?

Tout d’abord, il faut établir un plan d’action.

Comme pour toute opération de portage, je vous déconseille fortement de copier tout le code (classes voire projets) d’une solution vers l’autre.

En effet, même si l’on reste dans le monde du .Net, il ne faut pas être trop optimiste sur la complexité de la tâche…

Certaines portions de code resteront intactes, d’autres devront être adaptées et d’autres devront être complétement redéveloppées…

Donc, si vous ne voulez pas vous retrouver avec des milliers d’erreurs à corriger en même temps à l’aveugle, je vous conseille d’identifier les différents types de code à porter.

 

Migration d’une application vers Xamarin 1/2

September 09, 2016  Written by RudySp@no   Published in Windows 10, Windows Phone, Xamarin

Retour d’expérience

J’ai décidé de migrer l’une de mes applications existantes Windows Phone 8.1 vers Android afin d’améliorer son audience.

L’idée était de migrer l’application avec le moins d’effort de développement possible.

Dans cette démarche Xamarin en mode Xamarin.Forms m’a semblé la solution la plus efficace.

En effet, Xamarin promet une réutilisation/mutualisation du code C# :

  • le code métier
  • les ViewModels

Et Xamarin Forms permet de mutualiser des interfaces écrites en XAML.

Il est aussi possible de créer des interfaces natives mais partant d’une application à base de XAML et ne maitrisant pas les interfaces natives Android (axml), le choix fut rapide bien que Xamarin.Forms ait la réputation d’être encore assez expérimental…

Sur le papier, cette technologie est donc le candidat idéal pour migrer nos applications mobiles Microsoft Windows Phone Silverlight, Windows Store, Universelles ou UWP vers Android.

La plus-value de Xamarin est aussi et surtout de créer des applications Muti-plateformes : une seule base de code pour Windows Mobile/Desktop, Android et IOS. Dans mon cas, seul Android est la cible dans un premier temps. L’application Windows existe déjà (la mutualisation sera peut-être utile dans un second temps) et je n’ai pas de Mac pour compiler une application IOS et encore moins de compte de développeur Apple…

Je vous invite à vous documenter sur le site de Xamarin si vous voulez en savoir plus sur cette technologie : https://www.xamarin.com/