Dot.Blog

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

Windows 8 / WinRT : Premiers pas

[new:30/09/2012]Dans la continuité de cette série sur Windows 8 et WinRT voici venu le moment de passer aux actes et de voir comment se programme cette plateforme concrètement !

Le set de travail

Windows 8 RTM sera disponible prochainement aux partenaires et MVP mais pas au public tout comme VS 2012, il ne faut pas être devin pour le comprendre (MS ne sort jamais un environnement sans les outils de développement qui vont avec...). Mais officiellement ces produits ne sont pas censés exister avant que Microsoft ne lève le secret. Il me sera donc impossible comme je le disais dans un précédent billet d’en parler. Evoquer leur existence est déjà en soi problématique, mais nous sommes entre nous et ce point précis n’est pas vraiment un secret tellement on peut lire de choses sur le Net à ce propos (avec des dates précises, voire des captures d’écran).

Toutefois, afin de rester loyal à la NDA qui me lie à Microsoft, j’utiliserai pour ce billet un set de travail parfaitement public (j'ai juste un doute pour la version de VS... que le Grand Sachamouchi me pardonne si je me suis fourvoyé !):

  • Windows 8 RP Build 8400
  • Visual Studio Ultimate 2012 RC Version 11.0.50522.1 RCREL
  • Framework .NET 4.5.50501
  • Le tout dans une machine virtuelle Virtual Box Oracle

Cet ensemble est disponible à tous ceux qui veulent tester Windows 8. Et pour ce premier pas dans la programmation WinRT ce set de travail sera suffisant.

Le fameux Hello World

Même dans une discipline aussi moderne et aussi jeune qu’est l’informatique nous avons nos rites, nos traditions... Toute prise en main d’un environnement débute par l’écriture du célèbre “Hello World”. Je resterai fidèle à ce passage obligé.

Dans le billet précédent sur WinRT (“WinRT, les bases”), le décor a été posé. Cependant, nous n'avions pas vraiment écrit un code. Alors faisons le maintenant !

Une petite mise en garde : le code écrit dans cet article est écrit et testé sur des versions préliminaires de l’OS et de Visual Studio. Malgré la simplicité du code et des manipulations qui vont suivre, certaines choses pourraient ne pas fonctionner correctement avec les versions ultérieures et notamment les finales.

Création du projet

Je passerai rapidement sur le lancement de Windows 8 et sur celui de Visual Studio depuis le menu à tuile principal pour aborder directement la mise en œuvre de la première application (la création d’un nouveau projet n’a pas vraiment changée dans son fonctionnement).

image

Dans la billet évoqué ci-dessus, j’ai parlé des projections de la langue de WinRT. Une projection de langage rend possible l'utilisation de WinRT, qui est écrit en code natif C/C++, par un autre langage de façon transparente. Pour cette raison, les développeurs peuvent continuer à utiliser le langage de leur choix pour écrire des applications de style “Metro” (on dit Windows 8 App désormais). La projection du langage s'assure que les constructions de langue restent intactes. Des choses comme un constructeur, le mot clé var, le mot-clé await demeurent les mêmes que vous choisissiez d'utiliser WinRT avec c# ou c++. Les projections de langage disponibles actuellement sont : JavaScript, c#, VB et C++. Tous les langages disposent des mêmes modèles de projet. Aucun n’est plus natif que l’autre puisque les projections ont été conçues non pas pour “simuler” le fait d’être natif ou non, mais bien pour “rendre natif” tout langage projeté.

Mes préférences sont toutefois connues, et c’est par C# que je commencerai. Créons un nouveau projet (juste en sélectionnant le modèle d'application standard pour l'instant) et nommons-le HelloWinRTCS. Visual Studio ouvre un concepteur visuel qui est familier pour le développeur Silverlight ou WPF. Nous disposons d’un environnement en tout point similaire à ces derniers.

Différences avec Silverlight / WPF

Les premières nuances se font voir dans l’organisation du projet, l’arbre de ce dernier (créé par défaut) est le suivant :

 

image

Deux sous-répertoires nouveaux apparaissent : Assets et Common. Le premier contient pour le moment le Logo de l’application décliné dans toutes les tailles gérées par WinRT ainsi que le Splash Screen et le Logo spécial pour le market place. Bien entendu ces assets devront être personnalisées ce que nous ne ferons pas ici.

Common contient pour l’instant StandardStyles.xaml, un dictionnaire de ressources Xaml qui; s’il n’est pas obligatoire techniquement, contient de nombreuses définitions généralement utilisées par les applications “Windows 8 App”.

On trouve aussi un fichier de signature temporaire, les applications WinRT devant être signées pour passer sur le market place.

Enfin, apparait un fichier Package.appxmanifest qui s’édite avec un éditeur spécialisé comme les propriétés du projet. Il s’agit en réalité d’une extension de ce dernier. Les “propriétés” du projet étant spécifique à notre projet en C# managé, alors que ce “manifeste” est spécifique à WinRT.

image

On découvre dans ces réglages tout ce qui concerne le fonctionnement de l’application sous Windows 8 comme son nom complet, sa description, les rotations d’écran prises en charge, le nom et l’emplacement de tous les logos, les notifications, le splashScreen, mais aussi les capacités requises (autorisations de type accès à Internet ou non par exemple) qui sont autant de verrous sécurisant l’application vis à vis de l’utilisateur qui peut prendre connaissance des capacités requises et accepter ou refuser l’installation de l’application selon ce qu’il pense être “safe” ou non.

On notera ici qu’une application bien faite doit tout faire pour limiter les autorisations demandées. L’expérience sur smartphone montre que soit on a affaire à du grand public qui n’y connait rien et plus il y a de questions embarrassantes plus il y a de chance que la peur l’emporte sur la raison (et le logiciel n’est pas installé) soit on a affaire à un public averti et que ce dernier est ultra méfiant... Une application de traitement de texte purement local qui me réclame des accès à Internet et à ma Webcam ne sera jamais installée...

Autre différence de taille, mais j’y reviendrai bien entendu plus en détail, c’est le fichier App.xaml.cs qui contient la gestion des évènements propres à Windows 8 ressemblant comme deux gouttes d’eau à ceux qu’on trouve sous Windows Phone et qu’on appelle le “tombstoning”. Nous ignorerons cet aspect des choses dans le Hello World.

On retrouve bien en revanche la fameuse “MainPage.xaml” page principale et unique par défaut du projet.

Lorsqu’on l’ouvre le concepteur visuel est légèrement différent de l’habitude qu’on a sous Silverlight ou WPF puisque l’espace simulé ressemble à une ... tablette. On sent ici si ce n’est la vocation (bien plus large) mais en tout cas l’ambition de Windows 8 : conquérir le marché des tablettes...

Le code

Voici le code Xaml de la page créée dans le projet par Visual Studio :

<Page
x:Class="HelloWinRTCS.MainPage"
IsTabStop="false"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:HelloWinRTCS"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">

</Grid>
</Page>

Les habitués de Xaml ne sont pas perdus. Les namespaces sont bien entendu légèrement différents mais l’ensemble ressemble à une application Silverlight ou WPF, notamment avec sa grille par défaut. Elle ne porte plus le nom de LayoutRoot mais elle joue le même rôle. Quant à sa couleur de fond elle est déjà fixée via un Binding.

Il ne reste plus qu’à ajouter le nécessaire pour notre exemple bien modeste : un TextBlock qui affichera le fameux message, et un Button pour déclencher cet affichage afin de mettre un peu d’interactivité dans cet Hello World :

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<TextBlock x:Name="txtMessage" HorizontalAlignment="Left" Margin="95,62,0,0"
TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" FontSize="18"/>
<Button x:Name="btnHello" Content="Cliquez Moi !" HorizontalAlignment="Left"
Margin="89,165,0,0" VerticalAlignment="Top" Click="btnHello_Click" />
</Grid>

Nous retrouvons naturellement dans la page de code-behind le gestionnaire de l’évènement programmé en Xaml :

private void btnHello_Click(object sender, RoutedEventArgs e)
{
txtMessage.Text = "Bonjour tout le monde !";
}

Rien que de très naturel pour qui programme déjà en Xaml donc.

Exécution

Par défaut l’ordinateur local est utilisé. C’est à dire que bien que le concepteur visuel ressemble à une tablette, c’est bien une application Windows 8 qui peut marcher aussi en Desktop que nous venons de créer.

C’est d’ailleurs la force de WinRT : l’unification. Notre application fonctionne désormais aussi bien sur un PC de bureau que sur une tablette ARM ou un smartphone, et sans modification !

Certains éditeurs comme Google ou Apple ont pris sur le terrain une avance considérable sur Microsoft, c’est un fait, mais aucun n’a l’expérience et le savoir-faire de Microsoft en matière d’OS et d’environnement de développement... Et ce que propose Microsoft aujourd’hui vient certes avec retard sur le marché, mais c’est un projet abouti et cohérent, des années en avance sur tout ce qui existe aujourd’hui, laissant loin derrière iOS et Android et même Mac OS..

Bref, exécutons le projet en choisissant le simulateur de tablette, c’est tellement fun de se dire qu’on a écrit un logiciel pour unité mobile sans s’en rendre compte...

image

Oh la belle tablette Microsoft !

Cliquons sur le bouton...

image

Ca marche...

On notera au passage que le chargement du simulateur est presque instantané (je rappelle que j’utilise Windows 8 dans une machine Virtuelle et que le simulateur est donc une virtualisation de tablette tournant sur une virtualisation de PC à l’intérieur de ma machine de travail sous Windows 7x64 qui fait plein d’autres choses en même temps... C’est impressionnant quand on connait par exemple le simulateur Android qui même sans machine virtuelle prend des plombes à se charger. Le fameux savoir-faire d’un spécialiste des OS dont je parlais plus haut à propos de Microsoft, ça se voit quand même, il n’y a pas photo...).

Aller.. Pour le plaisir, puisque c’est une application WinRT elle marche aussi directement sur le PC (le virtuel sous Windows 8). Revenons à Visual Studio, changeons le mode d’exécution et sélectionnons “machine locale”.

image

Pour qu’il y ait une différence à voir, j’ai lancé l’application des News qui a pris le contrôle en plein écran (Windows 8 oblige...) puis j’ai fait revenir notre Hello Word mais en le dockant sur la gauche. J’ai cliqué sur le bouton, et bien que l’image soit petite vous reconnaitrez le message “Bonjour tout le monde !” sur fond gris foncé ainsi que le button “Cliquez Moi !”.

Autres langages

Je pourrais vous refaire le même exemple en VB managé, en C++ ou en JavaScript/Html. Ca marcherait pareil au final. Mais je suis avant tout un amoureux de C# et je laisse les autres langages à leurs aficionados. Ces langages ne m’intéressent pas plus que ça mais j’apprécie qu’ils soient présents et que chacun puisse choisir celui qui lui convient le mieux. La liberté ne me dérange pas. J’ai mes préférences, et même mes raisons de déconseiller certains langages, mais tant qu’on ne m’oblige à rien, laisser les autres décider pour eux-mêmes me convient parfaitement.

Conclusion

Windows 8 et WinRT c’est cela : un super .NET augmenté de nouveaux langages, de nouvelles possibilités, et multiplateforme du smartphone (Windows Phone 8) au PC (Windows 8 Pro) en passant par les tablettes ARM (Windows 8).

Un vrai bonheur pour le développeur (un seul savoir à maitriser pour tout faire), un paradis pour le DSI (pas de formations multiples ni de profils différents à financer et à gérer), une aubaine pour le PDG (réduction des couts, réactivité, présence sur tous les form factors).

Comme vous l’avez vu, ce n’est pas sorcier à faire marcher.

J’aborderai bientôt d’autres aspects du développement Windows 8, plus spécifiques à cet environnement.

En attendant,

Stay Tuned !

Faites des heureux, partagez l'article !
blog comments powered by Disqus