décembre
2014
Pour l’écriture d’un logiciel multi-plateforme PC et mobile, j’utilise des techniques qui sont nouvelles pour moi et qui m’oblige à remettre en question mes acquis de développeur mono plateforme.
Pour écrire un logiciel sur plusieurs plateformes, il faut un langage de programmation commun, un ou plusieurs EDI compatible et une logique de programmation qui ne dépend pas de la machine cible.
J’ai retenu:
- EDI visual studio Community 2013 (gratuit) et Xamarin Studio (avec licence indie)
- Le langage de programmation C# basé sur le frameWork 4.5 avec les mots clés aync/await
- Des projets multi plateformes PCL
- le pattern de programmation MVVM
- un PC sous Windows 8.1
- un Mac pour l’émulateur iOS, et pour le développement sous un device Android (ici un galaxy note 1)
MVVM
Le pattern Modèle-Vue-VueModèle est un pattern qui veut séparer la vue de la logique et de l’accès aux données en accentuant les principes de binding et des événements.
Vous écrivez dans le viewModel et le résultat s’affiche dans la vue à l’aide de Binding et la vue interagit avec le viewModel par des événements. et enfin le viewModel agit sur les données en bdd/fichier directement.
C’est simple et efficace.
PCL
Le but du PCL (portable class library) est donc de créer différentes librairies indépendantes de chaque plateforme et de créer un projet pour chaque plateforme cible.
Chaque projet PCL a accès à un framework .Net inter plateforme mais limité par ses fonctionnalités. Toutes dll qui n’est pas multiplateforme et indépendant du systèmes y est rejetés.
En résumé:
- un projet library PCL nommé « Message » qui contiendra vos classes strictement de stockage de données en mémoire
- un projet library PCL nommé « Core » qui contiendra votre logique applicative, vos viewModel (pour le MVVM)
- un projet library PCL nommé « DesktopCore » qui contiendra les view WPF et les viewmodel dérivés de ceux du projet Core
- un projet library PCL nommé « MobileCore » qui contiendra les view Xamarin.Forms et les viewmodel dérivés de ceux du projet Core
- un projet application WPF nommé « DesktopApp » qui contiendra le premier formulaire et l’accès aux fichiers et aux APi du système PC
- un projet application Android nommé « AndroidApp » qui contiendra le premier formulaire et l’accès aux fichiers et aux APi du système Android
- un projet application Windows Phone nommé « WPApp » qui contiendra le premier formulaire et l’accès aux fichiers et aux APi du système Windows Phone
- un projet application Windows Phone nommé « iOSApp » qui contiendra le premier formulaire et l’accès aux fichiers et aux APi du système iOS
Sur le papier, en lisant des articles je me suis dit hourra, trop facile. La réalité est bien plus compliquée!
Comme je vous l’ai annoncé (vous avez le droit de ne pas me croire) pour faire du multi plateforme, il faut être décoléré du système cible.
Vous devez vous concentrer sur une notion: « Ne t’occupes pas de comment accéder aux API systèmes, part du principe qu’ils ne sont pas accessibles ».
En gros, ne comptes pas sur le système pour t’aider, tu es le seul à pouvoir y accéder et cela par tes propres moyens.
Je m’explique: prenez l’exemple d’un test d’existence d’un fichier.
- Sous Windows, Android, iOS
File.Exists(nomFichier);
- Sous Windows Phone:
StorageFolder appFolder = ApplicationData.Current.LocalFolder;
var files = Task.Run(async () => await appFolder.GetFilesAsync()).GetAwaiter().GetResult();
var file = files.Where(t => t.Name == nomFichier).FirstOrDefault();
result = file != null;
Mais pourquoi Microsoft nous a pondu une merde pareil sur Windows Phone, je sais pas, c’est chiant mais vu que l’on fait du PCL on s’en moque!
En effet, qui dit library PCL, dit impossibilité d’accéder à File.Exists ou à StorageFolder /StorageFile. il faut passer par sont propres systèmes de dépendances via des pointeurs qui références des objets liés à chaque plateforme.
Xamarin.Forms
Le frameWork Xamarin.Forms est tout nouveau, créé mi 2014 par la société Xamarin (enfin créé par un développeur puis récupéré par Xamarin…).
Il ambitionne de révolutionner la manière dont vous écrivez des interfaces graphiques pour le développement mobile.
Ecrivez une fois (pour iOS) et visualisez partout (WinPhone/Android/iOS).
Xamarin.Forms
Il y a un gros Hic tout de même, Xamarin.Forms permet de faire de belles choses mais il est loin d’être parfait et toujours en chantier actuellement. Des versions sortent toutes les semaines.
Des bugs apparaissent, d’autres disparaissent mais on peut toujours s’en sortir en laissant certaines choses de temporairement de cotées.
Commentaires récents
- Mono for Android dans
- Mono for Android dans
- [Mono]Asynchrone Mon meilleur ennemi dans