Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Xamarin : angoisses du débutant et solutions !

Lorsqu’on débute avec Xamarin on se retrouve souvent face à des problèmes qui semblent trop nombreux ou insolubles. Le manque de connaissance fait paraître tout cela bien plus grave que ce ne l’est. Heureusement il y a Dot.Blog pour vous sortir de l’impasse !

Problem Solving

image

L’informatique est un métier qui peut s’exercer de cent façons différentes, mais toutes ont une chose en commun : l’obsession de régler des problèmes. Des problèmes de toutes sortes. L’objectif reste constant,leur trouver une solution. Celui qui n’aime pas les problèmes et préfère la routine ne doit jamais faire d’informatique !

Bien plus que le codage qui n’est qu’apprentissage d’une langue étrangère simplifiée, c’est la résolution des problèmes qui fait le métier et ses difficultés mais aussi son charme… L’informaticien doit être un joueur d’échec passionné qui sait analyser, savourer la victoire mais profiter aussi de ses défaites pour apprendre… sinon sa vie sera un enfer !

Aborder de nouveaux langages, de nouveaux OS, de nouveaux environnement obligent à sortir de sa zone de confort et par force à se confronter à des problèmes nouveaux devant lesquels le plus endurci se retrouvera comme un débutant démuni et stupide… Passer du sommet de la montagne au fond de la vallée en quelques instants est vertigineux. Les clients du parapente ou du saut à l’élastique restent rares malgré tout, l’humain est casanier et prudent, comme les chiens… L’informaticien est plutôt un aventurier même s’il travaille dans un bureau !

Xamarin n’échappe pas à la règle qui touche tous les environnements, au départ on se frotte à des difficultés qui peuvent sembler insurmontables alors que celui qui aura franchi ces premières étapes d’apprentissage donnera l’impression que tout y est simple et facile. C’est le cas des démos ou des conférences et je suis bien placé pour en parler ! Pour une heure de présentation il y a parfois des journées entières de travail, de test, d’échecs, de préparation du discours, le répéter plusieurs fois, etc. Les choses paraissent alors simples et couler de source… Mais quand on rentre chez soi et qu’on lance Visual Studio les choses se compliquent, s’embrouillent. Ce qu’on pensait avoir compris ne fonctionne pas, il manque des choses, les messages d’erreurs s’accumulent, certains abandonnent là et retournent à leurs habitudes. C’est triste. Si vous n’êtes pas de ceux là, alors voici quelques pistes qui vous permettront de dépasser les premiers instants parfois rugueux !

Trop d’erreurs au premier build

Le premier mur qui se dresse devant le débutant est bien celui-là ! Vous lancez Visual Studio, créez un projet Xamarin.Forms qui vous offre un template de base mais malgré cela vous ne pouvez pas faire un build et encore moins exécuter l’App immédiatement malgré sa simplicité déconcertante ! Ne paniquez pas, en général cela est du aux paquets Nuget qui ne sont pas restaurés par VS ou qui nécessitent d’être mis à jour (les templates ont parfois un peu de retard sur les mises à jour désormais très fréquentes de VS).

Solution

Restaurer tous les paquets Nuget, mettez à jour ceux qui le nécessitent.
Pour vous aidez, vous pouvez lire cet article de Microsoft : Restauration des packages

Impossible de compiler ou d’exécuter l’App

Hélas les choses ne sont pas toujours aussi simples qu’une restauration de paquets… Et malgré vos efforts pour tous les vérifier ça ne veut pas aller plus loin.

Ici il s’agit le plus souvent de paquets spécifiques à une plateforme qui manquent à l’appel. Après avoir restauré les paquets vous pouvez fort bien avoir des messages d’erreur vous indiquant qu’il en manque ! Cela est déconcertant je l’accorde. C’est souvent le cas avec les paquet pour Android comme Xamarin.Android.Support.Design ou d’autres paquets de supports. Ou bien c’est VS qui va rapporter des références manquantes à des dépendances ou des paquets qui sont pourtant déjà présents dans votre solution ! Agaçant et frustrant… Et si vous arrivez à lancer l’App, elle se fermera immédiatement. Si près du but…

Solution

je vais vous décevoir mais il n’existe pas de solution simple à ces problèmes, pas de recette miracle… Chaque cas est un cas particulier et seule la connaissance que vous accumulerez ainsi que l’expérience vous permettra de vous en sortir rapidement… Mais je ne vais pas vous planter là comme ça, ce n’est pas mon genre ! Je vous propose plutôt de lire cet article qui a l’avantage d’être écrit par une jeune femme, jolie et qui nous vient d’un coin qui n’est pourtant pas réputé pour sa haute technologie, la République Dominicaine…Common compilation problems in Xamarin and how to solve them (j’ai corrigé la faute du titre original qui se termine par “it” au lieu de them, on lui pardonnera !). J’entends quelques grincheux anglophobes là bas au fond… Problem-Solving… Utilisez l’un des traducteurs en ligne pour lire en français Winking smile

C’est du XAML “çà” ? !

Si vous êtes un aficionado de XAML, un dur, un tatoué, du genre à faire du WPF dans le bloc-note Windows avec un main attachée dans le dos, forcément le XAML de Xamarin.Forms va vous sembler un peu curieux et parfois déroutant. XAML est un langage à balise, issu de XML et de leur grand-papa SGML. Xamarin.Forms ne fonctionnait pas en XAML au départ, uniquement en C#. Puis est venu XAML, très limité au départ et de plus en plus sophistiqué malgré tout. Mais il faut l’avouer il manque quelque chose à ce XAML là : le graphisme. Pas de templating de contrôles, pas de dessin vectoriel non plus. Au départ Xamarin.Forms ne fait que proposer des “wrappers” fantômes et non des contrôles réels… Un “Button” Xamarin.Forms n’a aucune existence réelle, c’est un décorateur, une façade, une pure vue de l’esprit. A l’exécution Xamarin.Forms instancie directement le contrôle équivalent natif de la plateforme. Les contrôles Xamarin.Forms sont ainsi des synthèses de ce qui existe, le plus petit dénominateur commun entre iOS, UWP, Mac OSX et même Tizen. C’est déjà une prouesse ! Mais on comprend qu’on ne peut pas bricoler le look du Button (ou de toute autre contrôle) comme on le fait en XAML classique, le “Button” n’existe pas ! C’est une abstraction pure. Et même si les XAML de Xamarin.Forms avait des primitives graphiques cela n’aiderait en rien pour ce problème là.

Solution

Là encore pas de miracle, il n’y a pas une option cachée à activer pour se retrouver avec des courbes de Bézier !

En revanche Xamarin.Forms est fourni avec une panoplie complète de primitives pour faire des animations… De même les Xamarin.Forms offrent tout ce qu’il faut pour travailler dans chaque projet natif, toujours en C#, pour y faire tout ce qu’on veut et utiliser toutes les possibilités de la plateforme sans perdre l’avantage d’un code centralisé, c’est le principe même des contrôles cross-plateforme supportés par les XF… Mieux, et comme le dernier article le montre, en utilisant une librairie comme SkiaSharp on retrouve des primitives graphiques 2D permettant de créer des contrôles personnalisés au graphisme léché et cross-plateformes !

Le XAML de Xamarin.Forms n’est peut être pas le plus puissant de la famille, mais il offre tout le nécessaire et sait ouvrir la porte pour ce qu’il ne sait pas faire.

Alors faut-il utiliser le XAML des Xamarin.Forms ou pas ? La réponse est un OUI francs et massif ! XAML est étudié pour créer des UI, il n’y a rien de mieux ni de plus pratique pour cela, ne cherchez pas. Et une fois que serez familiarisé avec ce XAML là, vous ne voudrez plus jamais faire vos UI en code C#…

Les animations : téléchargez un chapitre gratuit de mon livre sur les Xamarin.Forms !

Sur SkiaSharp : Création d’un contrôle personnalisé avec SkiaSharp, SkiaSharp et Xamarin.Forms la 2D cross-plateforme

Les erreurs fantomatiques !

Ca fait peur hein ! Bon, ce ne sont pas non plus des poltergeists qui viendront tourmentez vos nuits, n’exagérons rien. Ces erreurs là arrivent le plus souvent quand il y a une erreur en XAML ou côté plateforme native. Malgré tous les efforts de Xamarin et de Microsoft, remonter des infos complètes sur certaines erreurs de ce type est très complexe. Le plus souvent il faut se contenter d’un message du genre “ça a planté” sous-entendu démerdez-vous ! Même si on sait pourquoi, c’est très frustrant. J’ai parfois passé des heures à tenter de comprendre des bogues de ce genre.

Solution

… Jusqu’au jour où j’ai compris que puisque XAML est natif sous UWP et malgré le peu d’intérêt que cette plateforme suscite c’est par elle que viendrait le salut ! Depuis j’ajoute systématiquement la cible UWP à mes projets même lorsqu’ils ne ciblent qu’Android ou iOS. Pourquoi ? Faut suivre… parce que XAML est natif sous UWP. Il suffit donc de lancer son appli en mode UWP et le curseur viendra s’arrêter là où le code est mauvais le plus souvent et le tout garni d’un message d’erreur complet… La grosse astuce est donc de toujours avec une cible UWP dans ses projets et dès que vous tomberez sur l’une de ces erreurs angoissantes, au lieu de passer des heures à chercher, basculer sous UWP et relancez… Vous gagnerez des heures précieuses, croyez-moi !

Pas de designer visuel ?

la question revient forcément souvent. Non, pour l’heure il n’y a pas de concepteur visuel pour Xamarin.Forms. Si vous avez lu tout ce qui précède vous avez compris pourquoi : les contrôles de Xamarin.Forms n’existent pas ! Ils sont remplacés au runtime par des équivalents natifs qui ne sont pas tous exactement identiques. Comment offrir un concepteur visuel dans un tel cas de figure ?

Solution

Il y a des tentatives de proposer un système “'d’écho”, c’est à dire une fenêtre qui affirme en temps réel les modifications faites en XAML. Mais ce n’est pas encore très au point et cela ne peut pas remplacer un concepteur visuel soyons franc. Mais tout de même cela permet de se faire une idée, de ne pas être totalement en aveugle.

A connaître donc : Le Générateur d’aperçu XAML pour Xamarin.Forms

Il existe aussi un produit commercial, Gorilla Player, je n’ai pas accroché mais certains en sont contents.

Vous noterez qu’il existe en revanche un concepteur visuel pour Android et un autre pour iOS lorsqu’on utilise Xamarin en mode natif (et non pas en mode Forms).

Comprendre la philosophie des Xamarin.Forms et ses astuces

Au final ce qui manque le plus lorsqu’on débute c’est bien d’avoir une vue d’ensemble tout autant que de bénéficier d’un coup de pouce pour résoudre certains problèmes comme le support de MVVM ou l’utilisation d’une base de données SQL par exemple…

Solution

Si vous ne l’avez pas déjà, procurez-vous mon Livre sur les Xamarin.Forms ! Il vous donnera à la fois cette vue d’ensemble indispensable ainsi que ces petits détails qui rendent les choses plus faciles… Je donne aussi des formations ou propose des formules de monitoring ou de starter-kit mi-développement mi-formation pour bien démarrer vos projets… Et pour les grandes occasions, j’assure aussi un service de forfait qui vous évitera de vous prendre la tête ! Vous ne pourrez pas dire que vous n’étiez pas au courant Smile

Conclusion

Xamarin.Forms représente une avancée fantastique. Depuis son rachat il y a déjà un moment par Microsoft c’est en plus une plateforme “officielle” soutenue et garantie. Tout n’est pas rose, mais le problème posé est véritablement diablement complexe à résoudre. Les Xamarin.Forms s’en sortent très bien et offrent l’avantage de langages à la pointe, C# et XAML, le plus puissant des IDE, Visual Studio, la plateforme objet la plus riche, .NET, et le support de tous les OS, jusqu’au Mac sur lequel il existe une version de Visual Studio pour ceux qui ne veulent pas toucher à un PC !

C’est plutôt du lourd. Alors on comprend que les débuts ne soient pas toujours faciles faciles… Mais là encore, Solution : lisez Dot.Blog et…

Stay Tuned !

blog comments powered by Disqus