Affichage des articles dont le libellé est Xamarin. Afficher tous les articles
Affichage des articles dont le libellé est Xamarin. Afficher tous les articles

Mon application Todo avec Xamarin en .NET Standard

Nous avons vu que l'application des Samples du Forum, le projet Todo est de la forme "Bibliothèque de classes portables" qui ne doit plus être utilisé aujourd'hui. Nous allons donc tout naturellement faire ce petit projet de créer la même application en partant d'un projet de type ".NET Standard".

C'est une bonne façon de mettre la main à la pâte, le pied à l'étrier.

Création du projet Todo avec .NET Standard

Classiquement je fais : Fichier -> Nouveau -> Projet
Visual Studio : Fichier -> Nouveau projet
Visual Studio : Fichier -> Nouveau projet

Dans la liste des Templates : Xamarin.Forms
Todo Application mobile (Xamarin.Forms)
Todo Application mobile (Xamarin.Forms)
Je choisie le Template "Master Detail" c'est toujours plus sympa d'avoir un menu et je prends bien sûr l'option ".NET Standard" :



Xamarin Todo .NET Standard
Xamarin Todo .NET Standard

Installation du Nuget sqlite-net-pcl

Pour travailler avec une base de donnée comme dans le projet Todo des Samples Xamarin on installe le nuget "sqlite-net-pcl".

Je note que le projet Template Master Detail est configuré avec le pattern MVVM alors que le projet Todo ne l'est pas, il est en "code behind". C'est une nouvelle bonne raison de faire évoluer ce projet.

Couche de données

Répertoire Data dans Todo Sample :

Couche de Data dans Todo
Dans mon nouveau projet .NET Standard :


Couche Data dans mon projet
Je conserve l'Interface c'est bien plus propre. Elle demande aux objets qui en dérivent d'implémenter des fonctions asynchrones de gestion des éléments dans la liste.

L'objet database : SQLiteAsyncConnection est implémenter dans MockDataStore :



Code Database
Code Database
L'objet Database est instancié au démarrage de l'application dans App.xaml.cs.

Création de la Base de données SQLite

Complétion de la méthode OnAppearing pour afficher la liste des Items :

Todo Sample vs Todo modèle .NET Standard

Pour la couche de données c'est quasiment terminé, il suffit de continuer à procéder.

Exécution du projet

J'exécute ce projet sur l'émulateur Android Accelerated Nougat 7.1 API25, voici le résultat de l'exécution :
Exécution de mon Projet Todo en .NET Standard
Vous pouvez voir les deux Items que j'ai créé et qui sont maintenant dans la base de données SQLite.
De mon côté, je vais poursuivre le CRUD des cette liste de Todo afin de terminer ce projet.

Gestion de configuration avec Github

Ce projet est connecté dans mon Repo Github je fais donc un petit Push pour livrer .


Push dans Github

C'est ainsi que les sources de ce projet sont accessibles à l'adresse suivante :

Todo Sample en .NET Standard sous Github
Todo Sample en .NET Standard sous Github
https://github.com/mabyre/Xamarin

Voilà tout est prêt pour démarrer le développement de nouvelles applications avec Xamarin.

Have fun !

Xamarin .NET Standard - Template Master Detail vs Tabbed

Quel sont les différents modèles proposés par le développement d'application avec Xamarin. On a vue les trois choix d'architectures, .NET Standard, Partagé et Bibliothèque partageable sachant que ce dernier est à oublier. Maintenant il existe deux types de templates de projet "Master Detail" et "Tabbed" comment fonctionnent-ils ?

Projet Xamarin "Tabbed"

Le Front de l'application :

Xamarin Template project Tabbed
Xamarin Template project Tabbed

Les deux onglets sont positionnés l'un à côté de l'autre. Si je clique sur "ABOUT" :

Xamarin Template project Tabbed
Xamarin Template project Tabbed - Onglet About

Et en revenant sur Browse et en cliquant sur Add je peux ajouter un item :

Xamarin Template project Tabbed - Add
Xamarin Template project Tabbed - Add
Voilà pour cette présentation du Template d'application Xamain "Tabbed" ...

Projet Xamarin "Master Detail"

C'est tout simple dans la description mais il faudrait voir également comment cela se passe dans le code pour obtenir et gérer ce menu.

Le front de l'application Template Master Detail :

Xamarin Master Detail Template
Xamarin Master Detail Template
On voit un menu et non plus les deux onglets côte à côte. En cliquant sur ce menu :


Xamarin Master Detail Template - Menu
Xamarin Master Detail Template - Menu
En cliquant sur l'article "About" :

Mater Detail - About
Mater Detail - About
Puis en revenant sur Browse et en cliquant sur Add :

Mater Detail - Add
Mater Detail - Add
On voit un bouton CANCEL qui est en plus et qui pourrait pourtant être aussi dans le Template "Tabbed" ...

Exo Simple : Ajouter un bouton "Cancel" sur le front de l'application "Tabbed" comme pour l'application "Master Detail". C'est vraiment très simple mais cela permet de jouer un peu avec les xmal et les events liés

Conclusion

Le Template "Master Detail" possède un objet en plus : le Menu, il est sans doute plus pratique pour une plus grosse application qui serait amenée à s'étendre.

Don't forget to have fun! It's only software!


Architecture des applications multiplateformes avec Xamarin

Vous aimeriez vous y retrouver parmi toutes les possibilités de développer des applications cross-plateformes avec Xamarin Bibliothèques .NET standard, Projets partagés, Bibliothèques de classes portables (déconseillé), moi aussi !

Alors je prends note pour tenter d'obtenir rapidement une vision qui mène vers le bon chemin. On veut laisser derrières les solutions qui ne fonctionnent pas et il y en a et trouver de quoi sera fait Xamarin demain ...

Xamarin Bibliothèque de classes portables
Xamarin Bibliothèque de classes portables

Déjà on peut plaindre ceux qui ont utilisé ce truc la ce serait déconseillé. Je n'aime pas du tout cette façon de faire en déconseillant pourquoi puisque c'est toujours là !

C'est d'autant plus du grand n'importe quoi que les exemples sont pléthoriques :

Bibliothèques de classes portables (PCL)

Développement interplateforme avec la bibliothèque de classes portable

Étant donné que les projets de bibliothèque de classes Portable ciblent uniquement un sous-ensemble très spécifique des implémentations de .NET, nous déconseillons fortement leur utilisation dans le développement de nouvelles applications. Le remplacement recommandé est une bibliothèque .NET Standard, qui cible toutes les implémentations de .NET qui prennent en charge une version spécifique de .NET Standard. Pour plus d'informations, consultez .NET Standard.

Tout ça pour ça ... ça fait peur non quand même ... en plus l'utilisation du terme "interplateforme" sans doute une erreur de la traduction car cross-plateforme ou multiplateforme existent déjà !

En tous les cas avec Visual Studio 2017, vous ne pourrez plus créer directement de projet Xamarin PCL les deux options qu'il reste sont :

Xamarin - Cross platforme
Xamarin - Cross platforme - .NET Standard & Projet partagé
  • .NET Standard
  • Projet partagé

L'avènement du .NET Standard est certainement bon pour ceux qui commencent maintenant à développer avec Xamarin.

Ça commence à s'éclaircir non ?

Ma deuxième application en C# avec Xamarin

Vous avez vu les déboires à configurer une plateforme de développement qui fonctionne avec Xamarin et Visual Studio 2017. Mais maintenant on peut y aller tout fonctionne.

Nous allons étudier l'application : Todo

Vérification de l'installation

Pour vérifier une installation il est nécessaire de mettre un point d'arrêt dans le code de l'application et de vérifier que l'on s'y arrête bien.

On met un point d'arrêt dans :

\\Mes Samples\Todo\Todo.Android\MainActivity.cs

Et dans :

\\Mes Samples\Todo\Todo\Data\TodoItemDatabase.cs

Au passage notez comment on affiche les fenêtre des "Points d'arrêts" (breakpoints).
Visual Studio Xamarin Todo
Visual Studio Xamarin Todo

1 - Afficher la fenêtre des Points d'arrêts
2 - Liste des points d'arrêts posés pour vérifier le fonctionnement de l'application Xamarin Todo

Exécution de l'application

On vérifie que l'on passe bien par le premier point d'arrêt au lancement de l'exécution de l'application :

Application Xamarin Todo exécution jusqu'au premier point d'arrêt
Et maintenant on va tenter d'atteindre le deuxième point d'arrêt ...

Je créé un Todo afin de le sauvegarder :

Xamarin application Todo - Création
Et maintenant la sauvegarde ...  Alors la sauvegarde est intéressante car elle fait passer par du code qui se trouve dans la partie "portable" ou "partageable" de la solution. De plus elle met en oeuvre la partie SQL Lite ...

Xamain Application Todo - Save
Et là on ne va pas s'arrêter sur le point d'arrêt, oups.

Xamarin Application Todo en mode Arrêt !
Je clique sur "Poursuivre l'exécution" puis sur arrêter le déboguage :

Xamarin Application Todo - Création et sauvegarde d'un Todo

Conclusion

Pourquoi le deuxième point d'arrêt n'a t-il pas été atteint ? Il faut regarder dans le Gestionnaire de configurations de la solution.


Xamarin - Gestionnaire de configuration
Xamarin - Gestionnaire de configuration
Et là on voit que la partie partageable de la solution ne peut pas être déployée !? Donc il est normal que le débogueur ne puisse pas afficher le code à cet endroit mais pourquoi ?

Xamarin Application Todo - Gestionnaire de configurations

J'ai le sentiment qu'il est important de comprendre pourquoi. Cela permettra de mieux cerner les applications multiplateformes avec Xamarin.

En créant un nouveau projet :

Xamarin - Stratégie de partage de code
En cliquant sur le "?" on trouve la solution et la façon dont une application Xamarin est structurée :

https://docs.microsoft.com/fr-fr/xamarin/cross-platform/app-fundamentals/code-sharing

On voit également que le modèle "Bibliothèque de classes portables" que je me suis évertué à essayer de faire fonctionner est progressivement abandonné snif !

Échec inattendu de la tâche "GenerateJavaStubs" - Solution

Mais qu'elle est cette erreur, comment trouver la solution. Ce matin je repars sur cette erreur "Le chemin d'accès spécifié, le nom de fichier ou les deux sont trop longs. Le nom de fichier qualifié complet doit comprendre moins de 260 caractères et le nom du répertoire moins de 248 caractères." Erreur que j'ai détaillé dans le post précédent.

Gravité Code Description Projet Fichier Ligne État de la suppressionErreur  Échec inattendu de la tâche "GenerateJavaStubs".
System.IO.PathTooLongException: Le chemin d'accès spécifié, le nom de fichier ou les deux sont trop longs. Le nom de fichier qualifié complet doit comprendre moins de 260 caractères et le nom du répertoire moins de 248 caractères.
   à System.IO.LongPathHelper.Normalize(String path, UInt32 maxPathLength, Boolean checkInvalidCharacters, Boolean expandShortPaths)
   à System.IO.Path.NewNormalizePath(String path, Int32 maxPathLength, Boolean expandShortPaths)
   à System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   à System.IO.Path.GetFullPathInternal(String path)
   à System.IO.Path.GetFullPath(String path)
   à Xamarin.Android.Tasks.GenerateJavaStubs.Run(DirectoryAssemblyResolver res)
   à Xamarin.Android.Tasks.GenerateJavaStubs.Execute()
   à Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   à Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() Todo.Android

On se croirait revenu aux temps du DOS de Windows qui n'était pas capable de gérer des chemins de fichier de plus de 256 caractères. Mais d'ailleurs, le peut-il aujourd'hui ? ;-) LoL.

Mais cette fois j'ai l'idée, je lis plus attentivement le message d'erreur. Comme quoi "il faut lire" comme dirait Dany Boon et la nuit porte conseil. Je rapatrie mon projet à la racine du disque dur et devinez quoi ? Ca fonctionne !

Solution

Le chemin (path) de votre projet est trop long ... Créez un répertoire plus proche de la racine du disque dur.

Et voilà :

Exécution du Sample Todo de Xamarin sur mon emulateur Android Nougat 7.5
Incroyable non ? Oui mais avant de la trouver celle-la j'ai bien galéré alors c'est cadeau, n'hésitez pas à laisser votre commentaire ou à cliquer sur le côté dans vous savez quoi ... ;-)

Have fun!

Xamarin, ASP.NET Core où sont les NuGets c'est la stupéfaction !

Vous avez sauté le pas de l'ASP.NET Standard et vous êtes maintenant avec ASP.NET Core vous n'hésitez plus maintenant que votre Visual Studio est configuré avec les émulateur d'Android à générer des applications pour Xamarin mais vous avez encore un problème avec les packages NuGets et là ... C'est la stupéfaction !

En effet, je prend le temps d'écrire ce post car je suis maintenant obligé de résoudre ce problème ! Je m'intéresse aux Samples avec Xamarin. Par le passé j'avais écris ASP.NET Core où sont les NuGets ?

https://forums.xamarin.com/
Xamarin Forum
Maintenant si je créé un nouveau projet Xamarin avec mon Visual Studio, les Nugets sont dans :

C:\Users\Xxxx\.nuget\packages

C'est la CATA Totale !

En effet les Nugets dépendent du type d'application dépendent également de leur propre version, ils sont donc très fortement liés au projet et ne peuvent en aucun cas être communs à tous les projets. Je ne comprends pas totalement pourquoi ma plateforme de développement est configurée ainsi Est-ce lors de l'installation de Visual Studio ?

Il faut trouver le moyen de mettre ces foutus NuGets par projet ... Je pars donc à la recherche d'une solution.

I'll be back!

Recherche rapide de solution, on me dit :

Comment puis-je mettre à jour mes NuGets ?

Et quand je fais ça, j'obtiens :


Visual Studio -> Outils -> Extensions et mises à jour -> mises à jour -> Error 503 Service Unavailable

Error 503 Service Unavailable

Whaou la merde !!!

En bas de la fenêtre je vois "Changer les paramètres de vos extensions et mise à jour" je clique dessus ...

ça sert à rien mais on est pas loin
En effet en dessous je vois :


Options -> Gestionnaire de package Nuget
Gestionaire de packages NuGet
Options -> Gestionnaire de package Nuget
Bon, tout ça ne sert à rien mais bon ... on va finir par y arriver.

Faire migrer packages.config vers PackageReference...

Tient qu'elle drôle cette possibilité, en cliquant droit sur le fichier package.config d'une ancienne solution Xamarin qu'elle n'est pas ma surprise :

Faire migrer packages.config vers PackageReference...
Je trouve cette possibilité dans une application dont les packages sont gérés par des fichiers package.config. Cette option apparait quand on clique droit sur le fichier.

Tient tient, j'essaye je clique :


Faire migrer packages.config vers PackageReference... Xamarin.Android
Je clique sur : M'aider à effectuer la migration vers PackageRefernce NuGet

Migrate from packages.config to PackageReference
Et là on m'explique les bénéfices et les limitation que j'ai à passer au PackageReference !? Exactement le contraire de ce que j'écrivais au début de ce post c'est à dire que les ingé de Redmond prennent à contre pied l'utilité des packages gérés dans le répertoire "packages" lié à une solution.

Managing the global packages, cache, and temp folders
Et là on me dit enfin tout sur cette nouvelle façon de gérer les NuGets Packages, franchement c'est du foutage de gueule non ?

Et pour finir on vous explique même comment revenir en arrière :

How to roll back to packages.config
On nous apprend que le processus de migration vers PackageReference à sauvé le fichier package.config qui vous permet de revenir en arrière.

Franchement que dire, que faire nous ne sommes que de petites choses, le principal est de trouver le bon chemin, le moins pénible pour arriver au bout du projet.


Références avant PackageReference
Une fois le passage à PackageReference effectué les nouvelles références se présentent ainsi :


Passage à PackageReference effectué
Voilà, encore une désagréable surprise avec la gestion des NuGets. Décidément on peut préférer la gestion façon GAC ou DLL d'antan. Il n'y a rien de facile rien de simple dans tout ça.

Have fun!

Développement d'applications avec Xamarin connaissez vous de le Forum ?


Voici une présentation rapide sur les ressources Xamarin dans le Xamarin Forum, petit post rapide pour prendre quelques notes à ce sujet. Il faut s'enregistrer sinon je pense que vous n'aurez pas accès à ce lien, Xamarin Community Forums

Xamarin Forum
Forum Xamarin
Mais une fois dedans, c'est le monde de Xamarin qui s'ouvre à vous. Je pense qu'il ne faut pas passer à côté de ce Forum qui semble recueillir et fédérer le principal de la communauté Xamarin aujourd'hui.

Je clique sur Xamarin.Forms :
xamarin-forms-evolution
Xamarin Evolution
Me voilà dans le Futur de Xamarin.Forms : Xamarin.Forms.Evolution
xamarin-forms-evolution
Evolution
Voilà et maintenant il ne nous reste plus qu'à découvrir tous les Xamarin Samples
Xamarin Samples
Xamarin Samples
Sommes nous véritablement dans l'environnement de développement multiplateformes tel le grâle dont les développeurs comme moi rêvent depuis toujours ? Je vous laisse juge, un élément soumis à votre sagacité : Xamarin embarque un peu de Silverlight ... oui je sais ça fait ringard.

Have fun!



Développement d'applications avec Xamarin sous Visual Studio 2017

Je poursuis ma quête de développement d'applications multiplateformes avec Xamarin sous Visual Studio. Quand je vois les évolutions de ce Framework de développement, je plains ceux qui se sont lancé trop tôt tellement les choses ont changées et se sont stabilisées.

La fois précédente nous étions avec Windows 10 je prends mes travaux avec une machine de développement sous Windows 7 à priori pour l'instant pas de sous d'installation.

Prenons quelques notes de l'installeur :

Développement mobile en .NET iOS Android et Windows avec Xamarin
Développement mobile en .NET iOS Android et Windows avec Xamarin




C'est toujours bon de prendre des notes, ces choses changent tellement vite, on peut comparer avec la fois précédente.

Visual Studio 15.7.5

Fichiers -> Nouveau -> Projet :

New Project Xamarin Forms

Et on va créer une Cross-Platform Application mobile (Xamarin.Forms) comme précédemment seulement au moment de lancer l'application :




Pas d'emulateur d'Android
Pas d'emulateur d'Android
On est tout nu. Il faut réinstaller tout le bordel ...



Android Device Manager ...
Android Device Manager ...
Bon je reprends depuis mon article précédent et je réinstalle l'Android NDK. Je sais pas trop pourquoi.

Ca ne change rien par d'emulateur Android ....

J'exécute l'Android Device Manager puis bouton droit "Down system image" et ça continue nouvel installation ... c'est vraiment long.


Android Device Manager - Download System Image
Android Device Manager - Download System Image
Nougat 7.1 ça y ressemble cette c'est peut être bon ...
Il me faut quitter Visual Studio pour relancer :


Installation Android SDK
Installation Android SDK
Cette fois notre application Android peut démarrer dans l'émulateur :

Installation de L'Emulateur Android
Encore une ou deux bricoles :



Android Emulateur Recommended AVD
Android Emulateur Recommended AVD
Et oui, il ne fallait pas choisir ARM mais x86_64 ...

C'est reparti :

Android Download System Image
Android Download System Image
Mais cela ne suffit pas, vous l'avez compris on est revenu aux erreurs et aux affres de l'installation des émulateur Android et autres trucs qui ne fonctionnent pas du tout sous Windows 7 !

Pour vérifier, ouvrir le Android Device Manager et lancer l'emulateur par le bouton Start :



Xamarin pour Windows 7 ça ne fonctionne pas du tout !

On tombe dans les affres des différences qu'il y a entre Windows 7 et Windows 10.

MSDN Android Hardware Acceleration
Intel Hardware Accelerated Execution Manager

Installing using Android SDK Manager ...


Installation de HAXM par l'Android SDK Manager
Pu(bip) j'ai trouvé non sans mal :


Install Intel x86 Emulator Accelarator (HAXM installer)
Install Intel x86 Emulator Accelarator (HAXM installer)
Je relance Visual Studio, je relance mon application dans l'émulateur et devinez quoi ... Ca marche pas !!! Et bien non, il faut encore exécuter l'installeur de HAXM. Et où qu'il est l'installateur ?? Où qu'il est ?

Installateur de l'Intel HAXM

Il est là l'installateur :

C:\Program Files (x86)\Android\android-sdk\extras\intel\Hardware_Accelerated_Execution_Manager

Installateur HAXM d'Intel pour Android
Installateur HAXM d'Intel pour Android

Installateur HAXM d'Intel pour Android - Etape 1
Installateur HAXM d'Intel pour Android - Etape 2
A chaque fois, je quitte Visual et je le relance par précaution. Et cette fois vous croyez que ça va fonctionner ... suspense ...

Et bien NON !!!! ????? ERROR : Encryption unsuccessful



Install de HAXM d'Intel ne suffit pas !
Install de HAXM d'Intel ne suffit pas !
Perform a factory reset ! Et quoi encore, y'en a pas marre de tous ces trucs qui ne fonctionne pas !

Allé allons-y pour un petit factory reset vous vous souvenez où cela se trouve ? Voici :

Perform a factory reset sur l'Emulator Device
Du coup je lance mon émulateur à la main et ça y est enfin :


Exécution de l'Emulator Android après l'installation de l'Intel HAXM

Je vois la page d'accueil de l'OS Android sur l'émulateur.
Mais au lancement de l'application en exécution dans l'émulateur :



Visual Studio 2017 Xamarin et Windows 7 ça sens la mauvaise installation ...
Visual Studio 2017 Xamarin et Windows 7 ça sens la mauvaise installation ...
ERROR !

Gravité Code Description Projet Fichier Ligne État de la suppression
Erreur  Impossible de charger la tâche "Xamarin.Forms.Build.Tasks.GetTasksAbi" à partir de l'assembly D:\Users\Braby\.nuget\packages\xamarin.forms\3.0.0.561731\build\netstandard2.0\Xamarin.Forms.Build.Tasks.dll.
Impossible de charger le fichier ou l'assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' ou une de ses dépendances. Le fichier spécifié est introuvable. Assurez-vous que la déclaration <UsingTask> est correcte, que l'assembly et toutes ses dépendances sont disponibles et que la tâche contient une classe publique qui implémente Microsoft.Build.Framework.ITask. XamarinApp1.Android

Solution

Quand je vois tout ce qui est installé sur cette machine, je me dis que cela ne peut pas fonctionner, il faut nettoyer l'installation. Vous imaginez bien me je me suis battu avec ce truc, je suis passé par l'installation d'un outil pour Cleaner les versions du .NET Framework qui a finalement cassé les différentes versions.

Il y a avait deux problèmes sur ma machine :

1 - Mise à jour Windows Update - Echec

Une maj concernant une les différentes versions du .NET Framework n'avait pas pu s'effectuer, s'était déroulée avec une erreur :

2018-08 Correctif cumulatif de sécurité et de qualité .NET Framework 3.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 et 4.7.2 pour Windows 7 et Server 2008 R2 pour systèmes x64 (KB4345590)
État de l'installation : Échec
Détails de l'erreur : Code 643

Casser les versions puis les réinstaller d'abord le 4.0 Client puis le 4.5 puis le 4.6 ... c'est l'outil dotnetfx_cleanup_tool qui m'a permis de faire tout cela.

2 - Mise à jour de Visual Studio 2017 avec l'installeur

Mise à jour de Visual Studio v15.5.1vers Visual Studio 15.18.1

Et c'est mis à fonctionner comme par miracle ... Voici ma première application XamarinForm1 sous Windows 7 :


Ma première application avec Xamarin - Windows 7 - Visual Studio 2017 15.8.1
Ma première application avec Xamarin - Windows 7 - Visual Studio 2017 15.8.1
C'est bientôt les vacances, oui moi je pars bientôt ... Je vous laisse n'hésitez pas laissez moi un petit commentaire ici ou sur un autre post.

Have fun !