Prise de notes :
J’ai suivis deux tutos gratuit assez complet sur Xamarin, depuis la MVA (Microsoft Virtual Academy). Ces tutaux commencent a être un peut vieux (tout est relatif, il date de 2014 quand meme, l’année de lancement de Xamarin Forms). Cependant j’y ai appris pas mal de chose. Certaine question ont eu leurs réponses, mais beaucoup d’autre ont été soulevées.
Je noterai ici mes notes concernants Xamarin. Ce n’est pas un tuto mais plutôt quelques réflexions, astuces, mémo et lien en tout genre.
Ressouces :
- Développer une application cross-plateformes avec Xamarin
- Cross-Platform Development with Xamarin & Visual Studio
Design
Chaque OS possède son propre design. Par exemple ici le date picker :
3 écrans iOS Android et WP avec une même interface graphique (Xamarin.Forms)
Xamarin permet de créer des applications natives respectant chaque UI. Mais il faut les construire une à une. Pour aller plus vite, on peut utiliser Xamarin.Forms qui va mutualiser la création d’interface graphique pour les 3 OS.
Shared Project VS Portable Library ?
- Shared Project : Contient des éléments partagé (code, image data). Il n’est pas compilé mais importé dans chaque projet (WP, Android, iOS) et ensuite il sera compilé. MVVM + IoC + dependency injection. Peut inclure des #ifdef (if IOS, if Android…)
- Portable Class Library (PCL) : projet compilé puis importé par d’autre projet WP, Android, iOS. Ne contient que du code par définition (business logic). Peut contenir du data static (fichier xml, json… le passer en ressource embarquée). Xamarin PCL a une class nommé Device qui permet de de jongler avec les plateformes (Device.OS, Device.OnPlatform, Device.Idiom, Device.GetNamedSize)
Plus d’info :
- Explication officielle de Xamarin
- Wiki de MvvMCross
- Device class de Xamarin
- article intéressant, retour d’expérience
Mais attention, sous android, les données sont situées normalement dans le répertoire Ressource. A priori on ne peut pas charger des données sur android depuis un shared project. Du coup une image ne peut pas être mutualisée. A voir si ca a pas changé depuis (info de 2014)
Life Cycle
iOS
App + View (different state)
Android
App + Activity
Astuce : sur android, lors d’un chargement de carte, il faut attendre qu’elle soit chargée avant de lui attribuer des markers.
Astuce : sur android, les cartes google map on besoin d’une clé par device en dev, à ajouter manuellement dans l’API console en ligne. https://developer.xamarin.com/guides/android/platform_features/maps_and_location/maps/obtaining_a_google_maps_api_key/
Astuce : encore sur les maps android, il faut inclure des libs (GooglePlayServicesLib.dll et des Xamarin.Android.Support…) ou aller sur les prendre directement dans le components stores de Xamarin. Ou utiliser un package Nuget Xamarin Form Maps qui s’en chargera.
Astuces : les cartes google on besoin de tout un tas de permissions.