[Windows (Phone)] A la découverte d’une Universal App
Hier, lors du lancement de la Build 2014, Microsoft a dévoilé la possibilité offerte aux développeurs d’utiliser les “Universal App”: un développement unique pour une application qui fonctionne à la fois sur Windows et Windows Phone (et même XBox). Jetons un oeil d’un peu plus prêt sur cette nouvelle brique !
Une fois votre application créée, vous disposerez de 3 projets:
- Windows 8.1, qui contient le code XAML de votre application Windows 8.1
- Windows Phone 8.1, qui contient le code XAML de votre application Windows Phone 8.1
- Shared, qui contient l’ensemble des élément que vous voulez partager entre les 2 projets
Le premier point à noter concerne le projet Shared. En effet, il ne s’agit pas d’une DLL donc vous ne pouvez pas le builder:
Ce projet ne sert que de “container” pour déposer des fichiers qui seront aussi automatiquement copiés dans les applications Windows et Windows Phone, grâce au processus MSBuild. Ainsi, si vous regardez dans le Solution Explorer, vous verrez que dans le répertoire “Assets” du projet Windows, il n’y a que 5 fichiers (et 3 dans le répertoire “Assets” du projet Shared):
Cependant, si l’on regarde le fichier APPX qui est créé, on constate qu’à l’intérieur de celui-ci, on retrouve bien les 8 fichiers:
Le second point intéressant concerne les contrôles. En effet, une très grande majorité des contrôles se retrouve “commun” à Windows et Windows Phone. C’est le cas par exemple du contrôle “Hub” (mais il y en a plein d’autres). Cependant, la manière de représenter les données ne pouvant pas être la même entre un téléphone et une tablette, c’est au runtime que le contrôle va “choisir” son interface graphique: en mode horizontal sur Windows 8 et en mode vertical sur Windows Phone.
Ainsi, vous avez la possibilité de déporter une très grande partie de vos interface graphiques dans le projet Shared afin de mutualiser un maximum d’éléments (à noter que ce genre de techniques pouvait déjà être réalisée avant grâce aux “Linking” de fichiers mais cela nous fonctionnait pas pour le XAML).
Attention tout de même à un point: même si l’on note une grande convergence entre les contrôles sur les 2 plateformes, certains éléments (propriétés/évènements) ne sont pas encore accessible des 2 côtés (je pense, par exemple, à “ContinuumNavigationTransitionInfo.ExitElementContainer” qui n’existe que pour Windows Phone et pas pour Windows 8). Dans ce cas, vous devrez continuer à avoir du code spécifique pour l’un ou l’autre des plateformes.
En ce qui concerne la partie C#, c’est plus “simple”: en effet, vous pouvez continuer de mettre un maximum d’éléments dans le projet “Shared” puis utiliser les directives “#if” pour différencier l’une ou l’autre des plateformes:
#if WINDOWS_PHONE_APP private TransitionCollection transitions; #endif
Au niveau des ItemsTemplate, on en retrouve deux intéressants côté Windows Phone:
- Content dialog
- Share Target
Content dialog permet de disposer, facilement, d’un écran ressemblant aux écrans de paramétrages du téléphone:
Quand à la partie “Share Target”, le nom est assez explicite: on a la possibilité de définir son application comme étant “cible de partage” (de la même manière que sous Windows 8) afin qu’elle puisse recevoir du contenu partager par d’autres applications!
Voilà, vous savez ce qu’il vous reste à faire ! :)
Happy coding!
Commentaires