Realizzare applicazioni desktop moderne

di Matteo Tumiati, in Windows 10,

Si è conclusa da poco Microsoft Ignite, una delle più importanti conferenze tenute da Microsoft nel corso dell'anno assieme a Microsoft Build. Storicamente è sempre stata dedicata principalmente al mondo IT Pro ma considerando che il mondo tech è così evoluto nel corso degli anni, sappiamo bene come ormai la differenza tra Dev ed IT Pro si sia ridotta drasticamente, tant'è che i due ruoli spesso si sovrappongono oppure sono complementari a risolvere prima una determinata esigenza: proprio per questo ed altri motivi quest'anno Microsoft ha dato un grande spazio anche alla parte di sviluppo focalizzandosi, principalmente, su quello che è il mondo desktop.

Prima di vedere quelle che sono le novità annunciate e di come si traducono in codice per gli sviluppatori, dobbiamo prima fare un passo indietro e capire meglio la storia di tutta la piattaforma.

Il concetto di Universal Windows Platform (UWP) nasce ai tempi di Windows 8 e consiste principalmente nelle API esposte dal sistema operativo per realizzare Universal Windows App (UWA), ovvero applicazioni basate su Windows 10 che, con quasi zero accorgimenti, sono in grado di girare su diversi tipi di device (pensiamo a Xbox, PC, telefoni, Surface etc.).

Un mix di eventi, ha fatto pensare che UWP fosse, di fatto, un sistema destinato a morire: primo fra tutti è che, forse, UWP era un concetto troppo forzato e troppo futuristico per l'epoca (pensiamo che Google ci sta pensando in questi mesi), la morte di Windows Phone ha fatto "crollare" l'adozione di Windows 10, i device come Surface ed Xbox sono "particolari" in quanto sono principalmente per un mercato di nicchia, lo Store era uno strumento forzato per la pubblicazione delle app e così via. Inoltre, l'approccio adottato da Microsoft non prevedeva alcuna migrazione del codice, se non la riscrittura completa delle applicazioni: non è pensabile che oltre 20 anni di sviluppi di applicazioni Win32 vengano spazzati via per la Universal Windows Platform che, ad oggi ma probabilmente anche in futuro, non avrà mai feature parity o API parity.

Windows 10 è ormai installato su oltre 900 milioni di device, pertanto è piuttosto difficile, in ogni caso, considerare morta la piattaforma. Piuttosto, si è evoluta per venire incontro alle esigenze degli sviluppatori:

  • Per i device come Surface Hub o Hololens, la Universal Windows Platform continuerà ad avere la meglio e sarà la strada che Microsoft deciderà di seguire perché, se ci pensiamo, le classiche applicazioni Win32 che non sono studiate per il (multi)touch o per motion 3D, hanno poco senso di esistere su questi device che ne fanno la loro miglior caratteristica;
  • Per il mondo desktop, la Universal Windows Platform è diventata più aperta e infatti supporta PWA e React Native, ma consente anche di sfruttare solo una parte delle sue componenti tecnologiche, come ad esempio la sandbox o la parte relativa alla gestione degli update, seguendo una modalità che Microsoft chiama "a-la-carte". Esattamente come per il menù di un ristorante, possiamo scegliere liberamente cosa implementare della Universal Windows Platform all'interno delle nostre applicazioni Win32 per fare una migrazione e una modernizzazione progressiva, senza dover riscrivere (o eliminare) codice esistente.

L'obiettivo generale di Microsoft è venire incontro a tutte quelle che sono le esigenze degli sviluppatori per aiutarli a creare applicazioni moderne, indipendentemente dalla tecnologia e dalla piattaforma che stanno attualmente utilizzando. Nell'ambito prevalentemente desktop, che siano applicazioni WPF (o WinForms), che tra l'altro ricoprono circa il 75% del mercato desktop, Microsoft vuole dare a tutti la possibilità di integrare le ultime novità per quanto riguarda feature legate alla sicurezza, sia in fase di installazione che di esecuzione, tramite l'uso dei container e così via.

Se guardiamo come si è evoluto lo stack dedicato alle API, non possiamo non notare quanti miglioramenti siano già stati introdotti: fino a qualche anno fa, infatti, c'era separazione totale fra le app guidate da Win32 e le app UWP guidate da .NET Native, mentre, ad oggi, possiamo integrare API specifiche del Windows Runtime (UWP) dentro le app classiche esistenti senza grossi sforzi e sfruttare anche tutti i benefici di distribuzione dovuti all'avvento di .NET Core 3. In futuro, invece, è prevista l'unificazione sullo strato di .NET Core che coinvolgerà anche la Universal Windows Platform e che andrà a sostituire del tutto .NET Native, rendendo, di fatto, le applicazioni quasi interscambiabili. Chiaramente requisiti dovuti a caratteristiche particolari della piattaforma sottostante (COM, ad esempio) rimarranno un problema.

Lo stato della UI e UX è in realtà un po' più complesso perché nel corso del tempo si è creata sempre più frammentazione che Microsoft sta cercando di risolvere per il futuro. Controlli basati su Win32 non sono più moderni, non rispettano le guideline di Windows sul fluent design, non sono fortemente personalizzabili, non supportano hardware moderni per gestire correttamente (multi)touch e interazioni con penne o altre tipologie di device. L'avvento di XAML Island, che affronteremo più nel dettaglio nel paragrafo dedicato, ha iniziato una fase di transizione importante anche su questo layer: i controlli moderni della Universal Windows Platform sono ora estratti dal sistema operativo e distribuiti tramite la Windows UI Library (WinUI) e sono integrabili come "isole" all'interno delle applicazioni classiche. Ad oggi però c'è ancora disallineamento perché molte funzionalità legate al layer di composition e animation, che ci permette di avere 60FPS costanti sulle animazioni costruite via XAML e basate su GPU, oltre che al framework XAML stesso, sono ancora insite su Windows 10, ma l'unificazione è prevista nel corso del 2020. Di fatto, avremo a disposizione un solo comparto grafico condivisibile tra UWP e WPF (o WinForms).

Buttando uno sguardo sul fronte della distribuzione, c'è sempre stata un po' di confusione perché mentre prima con le applicazioni Win32 era possibile creare EXE o MSI tramite migliaia di tool in stile ClickOnce e distribuirle ovunque, con l'introduzione di Windows 8 il modello principale di distribuzione è divenuto solo lo store. Poiché, ovviamente, è importante lasciare una certa libertà, Microsoft consente tramite l'uso di MSIX, usabile anche per le app classiche Win32 o con i servizi Windows, la distribuzione via sideloading e un deployment decisamente semplificato per l'ambiente enterprise che fa uso di strumenti di MDM come Intune e SCCM.

Mentre nelle prossime pagine affronteremo nel dettaglio tutti questi temi e, in particolare, come rendere moderne le applicazioni desktop "classiche Win32", dobbiamo ricordare che Microsoft si sta focalizzando allo stesso tempo per espandere il concetto di Universal Windows App e, pertanto, possiamo creare applicazioni cross-platform sfruttando tecnologie come Xamarin, piuttosto che React Native, che abbiamo già visto in un articolo dedicato.

5 pagine in totale: 1 2 3 4 5
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Top Ten Articoli

Articoli via e-mail

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

In primo piano

I più letti di oggi

In evidenza

Misc