Dot.Blog

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

Template d’applications universelles : convergence WinRT et Windows Phone

[new:15/05/2014]La plateforme Windows 8 se voulait unificatrice mais elle ne l’était pas. La plateforme 8.1 se dirige enfin vers une telle convergence qui permet à un même code de tourner aussi bien sur un PC que sur un Smartphone Windows. Les “Applications Universelles” montrent le véritable potentiel qu’on attendait…

Applications universelles vs PCL

Quelle différence y-a-t-il entre les nouvelles “applications universelles” et les “portable class library” qui existent déjà depuis quelques temps ?

La différence est dans la nature de ce qui est “universalisé”. Avec les PCL c’est le code binaire qui devient partageable entre plusieurs projets ciblant des OS ou des plateformes différents. Les “applications universelles” offrent un partage qui se situe au niveau du code source uniquement (et pour l’instant au moins uniquement sur plateforme Windows).

De fait PCL et Applications universelles sont plutôt des concepts complémentaires que concurrents et peuvent être exploités simultanément dans une même solution.

Convergence, inaccessible étoile ?

Ce qui aurait dû être le cas avec Windows 8 et Windows Phone 8 commence à devenir réalité avec 8.1. La convergence c’est l’intérêt principal de la plateforme de développement Microsoft : un seul éditeur de code, un seul langage parmi plusieurs, un seul environnement, le tout pour cibler tous les form factors du smartphone au PC. J’ai déjà eu l’occasion de l’expliquer ici : puisque l’universalité horizontale (cross-plateforme comme Silverlight) n’était plus possible, Microsoft avait choisi de répondre par une universalité verticale, c’est à dire, tous les form factors couverts par un même OS du même éditeur sans passerelle avec la concurrence.

C’est exactement ce qui se passe. Et pour éviter les redites je renvoie le lecteur intéressé à ce que j’ai écrit il y a presque trois ans maintenant (!) dans le billet “Se préparer au “big shift” de la stratégie Microsoft”. Tout y est, suivez le lien Sourire

Hélas Windows 8 a été “démoulé trop chaud”. WinRT n’a pas su séduire sur PC, ce qui a fait tomber tout l’intérêt de l’universalité impliquant cet OS d’ailleurs. Les projets Windows Phone 8 après avoir de nouveau traumatisé les développeurs et les clients avec la cassure du support hardware en passant de WP7.x à WP8 n’avaient rien ou presque en commun avec les projets WinRT – on parle d’ailleurs encore de Silverlight pour Windows Phone c’est dire… Quant à Surface qui elle a couté 900 millions de dollars de pertes sur le dernier exercice en raison des méventes elle a été trop anecdotique pour avoir un quelconque poids dans l’histoire…

Pourtant tous ces produits étaient bons, et le sont toujours. Les erreurs sont ailleurs, dans la façon de vendre ces produits et surtout dans une certaine précipitation pour les mettre sur le marché alors même que leur seul véritable avantage n’était pas encore une réalité : l’universalité verticale de la plateforme sur tous les form factors. C’est cela que j’appelle avoir ici avoir démoulé le gâteau trop chaud.

Je pense sincèrement que cette erreur là est celle qui a couté le plus à Windows 8 et ses produits liés. Si dès sa sortie cette nouvelle plateforme avait réellement couvert les PC, les tablettes et les Windows Phone, je suis presque certain qu’elle aurait pu bouleverser la donne. Et ce à une époque où les jeux n’étaient pas totalement faits, notamment sur le marché des tablettes et des smartphones.

C’est un tournant de l’histoire qui a été loupé. Les rétropédalages, les changements de Direction, les mises à jour un peu tardives et pas encore en version finales ne peuvent pas toujours tout arranger. C’est un peu comme en amour, parfois on a loupé le coche, on peut faire de nouvelles promesses, acheter des fleurs, faire de belles déclarations, c’est fichu, c’est fichu…

Mais essayons de voir l’avenir, une société comme Microsoft peut se permettre de patauger un peu, les reins sont solides et les visées sont à longs termes…

Car tout s’arrange avec le temps…

Windows 8.1 et Windows Phone 8.1 partagent aujourd’hui 90% de fonctionnalités. C’est énorme. Et en même temps c’est encore trop peu pour parler d’universalité absolue puisque chaque cible réclame toujours un projet spécifique pour les 10% qui diffèrent.

Mais la convergence est là, en marche, bien réelle et apportant en effet un avantage stratégique à la plateforme Microsoft sur toutes les autres.

En effet, seul Microsoft propose (on y est presque) une seule plateforme de développement permettant avec un même code de créer des applications tournant indifféremment sur PC, tablettes et smartphones.

Google ne fait pas le PC et Apple ne propose rien pour unifier le Mac aux plateformes mobiles. Certains analystes prédisaient bien il y a 1 ou 2 ans un “OS Merger” pour une unification iOS/OSX à l’horizon 2016, on attends toujours de voir quelque chose de concret venant d’Apple. Et le Chromebook de Google, pour séduisant qu’il soit s’acharne à vouloir imposer un nouvel OS au lieu de réutiliser Android sur portable ce qui aurait fait certainement un tabac très rapidement.

Quand on regarde le marché, et malgré les erreurs, Microsoft reste l’éditeur le mieux placé technologiquement et le plus en avance (c’est presque un comble !) sur cette problématique essentielle qu’est la l’unification des form factors, du PC au smarphone.

Après un faux départ, la convergence des plateformes et des form factors de Microsoft devient une réalité tangible qui raisonnablement oblige à reconsidérer tous les autres choix tellement cette vision là correspond aux besoins pour tenir les paris du présent et du futur…

Visual Studio 2013 Update 2 RC

Toutes ces merveilles sont bien en route mais pas encore de façon définitive. Outils et OS montent les uns après les autres en puissance dans ce grand “update 8.1” qui mériterait d’ailleurs un code de type “8.5” tellement les nouveautés et différences sont importantes.

De fait, pour jouer avec les Applications universelles il vous faudra un Windows 8.1 Pro au minimum et en 64 bits de préférence, un smartphone Nokia (puisqu’il n’en existe pas vraiment d’autres) avec la mise à jour 8.1 réservée aux développeurs pour le moment (et non définitive), une tablette Surface pour prendre avantage du multi form factors mais c’est optionnel, mais aussi :

Capture d'écran

A quoi cela ressemble-t-il ?

En fait rien de compliqué, un nouveau nœud est simplement disponible dans le dialogue de création de projets :

 Universal Project templates in Visual Studio

 

Les “Stores Apps” se subdivisent désormais en trois modèles différents :

  • Les Windows Apps, applications WinRT pour PC ou tablettes
  • Les Windows Phone Apps, idem pour les smartphones
  • Et les Universal Apps, applications universelles se déclinant en
    • Blank app
    • Hub App
    • PCL pour U.A.
    • WinRT Component

la solution qui est alors créée peut contenir directement les trois projets : un pour WinRT, un autre pour WP8.1 et enfin le nouveau projet partagé dont on retrouve la référence dans les deux premiers.

Comme je le disais cela ressemble beaucoup aux PCL. Sauf que les PCL fonctionnent au niveau binaire alors qu’ici cela ne marche qu’au niveau source. D’ailleurs les PCL peuvent être cross-plateformes (avec les compilateurs de Xamarin notamment) alors que les Applications Universelles ne fonctionnent qu’entre deux projets WinRT (pour téléphone ou PC/tablette).

Les avancées

Cette convergence, même si elle reste imparfaite, est un vrai argument en faveur des plateformes Microsoft car elle ouvre la porte à la cohérence et à la stabilité.

Plutôt que d’avoir à maitriser plusieurs OS, plusieurs langages, il est clair que suivre Microsoft dans son offre d’une plateforme unique permettant de cibler tous les form factors présente plus d’un avantage !

Les Applications Universelles s’accompagnent d’autres avancées spectaculaires comme l’IntelliSense dans le code Xaml sur le Data Binding par exemple, ou la recherche F12 étendue aux types, aux ressources. Mieux l’éditeur visuel de VS permet grâce à un volet Device de modifier à la volée le form factor en cours d’édition Xaml (résolution, hauteur et largeur). On appréciera aussi le retour officiel des Behaviors, le support complet des Applications Universelles sous Blend qui ajoute la possibilité de placer des règles qui peuvent être sauvegardées et rechargées et plusieurs autres facilités pour aider au support des multiples résolutions disponibles.

Les application universelles proposent ainsi de partager du code source, des ressources (localisation par exemple ou bien PNG, JPG…), des templates Xaml, des dictionnaires XAML, voire même des contrôles qui seront ensuite utilisés dans les projets cible.

Les progrès à venir

Désormais il faut que Microsoft vise les 100% de convergence pour éviter les #if que l’on doit parfois utiliser encore pour faire la différence entre code natif Windows (WINDOWS_APPS) ou code natif Windows Phone (WINDOWS_PHONE_APPS). C’est le cas notamment pour certains aspects de la navigation ou d’autres éléments comme les Topbars qui n’existent pas sous Windows Phone.

De fait il manque encore le support #if en XAML… ce qui implique et explique la présence de deux projets natifs, l’un pour WinRT l’autre pour Windows Phone, justement pour y coder les parties natives qui diffèrent, que cela concerne le code proprement dit ou l’affichage.

Applications universelles vs Cross-plateforme

Les applications universelles de Microsoft sont limitée à l’univers… Microsoft. Une vision peut être restrictives de l’universalité se diront certains, non sans un certain bon sens… On a déjà vu que PCL et A.U. ne sont pas des adversaires mais des technologies pouvant se compléter l’une l’autre. Il en va de même des approches cross-plateforme comme celle que je vous propose ici depuis longtemps et utilisant Xamarin et MvvmCross.

On pourra mixer dans une même logique une PCL noyau réellement cross-plateforme puis construire des projets notamment universels pour le couple WinRT/WP8.1 et d’autres ciblant iOS ou Android. Bien entendu les frameworks comme MvvmCross ne sont pas encore tout à fait étudiés pour ce genre de gymnastique mais ajouter quelques références à la main au lieu d’utiliser les packages Nuget n’a jamais tué un développeur non plus…

Tout cela est récent et il y a donc là encore un peu de travail pour s’assurer que toutes ses approches peuvent se marier entre elles, à moins que Microsoft qui a élargi son partenariat avec Xamarin n’ajoute ce qu’il faut pour simplifier l’ensemble et étendre la notion ‘'”d’universalité” à autre chose que Windows !

Conclusion

Même si on peut rager et pester contre les erreurs du passé on peut constater que désormais les choses vont dans le bon sens ce qui est autrement plus positif et porteur d’espoir !

Oui tout cela aurait du venir plus tôt et être mieux emballé, mais ça arrive, c’est assez énorme, c’est enfin la convergence et la fusion des environnements de développement du smartphone au PC en passant par les tablettes.

Une avancée gigantesque, et une offre qui fait toute la différence entre Microsoft et une concurrence un peu larguée à se regarder le nombril sans avoir proposé la moindre nouveauté depuis des années, qu’il s’agisse d’Apple ou de Google…

Microsoft nous propose une plateforme unifiée qui côté code est au top et qui au niveau affichage propose la seule solution vectorielle crédible, XAML, alors même que les concurrents se perdent dans les nine-patches ou les approches Web ce qui ne peut constituer une vision du futur dans un monde où fleurissent les form factors. Pourquoi générer 20 bitmaps comme un vieux site Html là où quelques instructions XAML définissent un dessin vectoriel toujours parfait quelle que soit la taille de l’écran et sa résolution, pour aujourd’hui et pour les machines de demain ?

Microsoft n’est pas pas toujours un partenaire facile. Erreurs d’approche, arrêts impromptus de produits, mauvais lancements, tout cela est parfois difficile à gérer. Mais technologiquement l’éditeur de Redmond reste très avance sur toute la concurrence. Et travailler avec les bons outils fait oublier bien des choses !

Stay Tuned !

blog comments powered by Disqus