In aggiunta alle informazioni già bloggate dal collega Pietro Brambati relativamente alle novità per lo sviluppo mobile in Visual Studio 2008 che lui ha anche presentato alla Mobility Conference, vorrei approfondire oggi la relazione fra le diverse versioni del Sistema Operativo Windows CE, i loro allestimenti o piattaforme, i sistemi di sviluppo dedicati, i relativi SDK inclusi/opzionali e gli emulatori su cui testare le nostre applicazioni mobili.

Vi suggerisco di stampare e tenere sottomano la seguente slide, che vi aiuterà a seguire meglio gli argomenti che sto per trattare:
StrumentiDiSviluppoPerDispositiviMobili

Partiamo dal sistema operativo. I dispositivi embedded basati su software Microsoft per elettronica di consumo sofisticata (da Pocket PC a Windows Mobile 6 passando per Smartphone, Handled e CAR PC) si basano su Windows CE. Non è argomento di questo post, ma per completezza devo precisare che Microsoft fornisce altre due piattaforme embedded: .NET Microframework e Windows XP Embdedded, il primo dedicato a device con bassissime risorse harware e il secondo rivolto al controllo di apparecchiature basate su processori Intel X86. Maggiori approfondimenti sono disponibili su questo ottimo post del collega e amico Dario Airoldi.
PiattaformeEmbeddedMicrosoft

Windows CE viene fornito ai produttori di hardware che, installandolo sul dispositivo, lo personalizzano secondo le specifiche del loro device; per questo motivo non è sufficiente dire che un dispositivo si basa su sistema operativo Windows CE 4.2 (per esempio), ma è necessario specificare se questo è stato personalizzato per un device con pennino (es. Pocket PC 2003), per un telefono (es. Smartphone 2002) o altro (es. Windows Automotive 4.2 o Handled PC 2000). Come mostra la figura che segue, esistono numerose versioni di Windows CE; se volete approfondire la storia della sua evoluzione, descritta solo in parte nell’immagine che segue, vi consiglio questo ottimo link.
Windows_CE_Timeline  

Chiarita la relazione fra sistema operativo e piattaforma, smarchiamo un altro punto fondamentale relativamente al compilato che andremo a generare: in alcuni casi –specie sulle piattaforme più recenti– si può scegliere di sviluppare codice managed sfruttando il compact framework .NET, in altri casi è necessario programmare in codice nativo (=unmanaged); in particolare, se il vostro dispositivo si basa su una versione di Windows CE antecedente alla 4, il compact framework non si può installare. Attenzione: ciò non significa che con una versione successiva è sicuramente possibile sviluppare codice managed, perché per ospitare il compact framework il dispositivo deve possedere caratteristiche minime in termini di risorse; ergo: verificate sempre prima quale compact framework è già installato e, in ogni caso, quale versione può eventualmente essere montata, eviterete così spiacevoli sorprese al momento del deployment. È chiaro invece che se un device ha già installata la versione del compact framework .NET che vi serve, il problema non sussiste. Naturalmente, così come sulle piattaforme Desktop, potete scegliere di sviluppare in codice unmanaged anche per versioni di Windows CE successive alla 4.

Passiamo ora agli strumenti di sviluppo; quando lavoravo con Dario Airoldi al Supporto Tecnico Sviluppatori, mi capitava di tanto in tanto qualche richiesta sugli Embedded Visual Tools (eVB ed eVC) per Windows CE, che servivano a sviluppare codice nativo per Windows CE 3.0. A questi tool seguì Embedded Visual C++ 4.0, tutt’oggi scaricabile gratuitamente dal sito Microsoft (vi suggerisco caldamente di aggiungerci anche la Service Pack 4). Questo strumento, affiancato all’SDK di Windows Mobile 2003 per Smartphone e per Pocket PC, consente di realizzare codice nativo per i sistemi operativi Windows CE 4 e 5; per sviluppare invece codice managed, a quei tempi si doveva usare il Visual Studio .NET 2003: sfruttando il Compact Framework .NET 1.0 e i due SDK qui sopra menzionati si realizzano applicazioni managed Windows Mobile 2003 per Smartphone e Pocket PC basati sul sistema operativo Windows CE 4.2.

Veniamo ora ai giorni nostri. Con Visual Studio 2005 si consolida, nello stesso ambiente, lo sviluppo per codice managed e per codice nativo. Inoltre, gli SDK per Windows Mobile 2003 (Smartphone & Pocket PC) sono già inclusi. Chi aveva sviluppato per smartphone fino a quel momento, nota subito la nuova interfaccia di sviluppo, come mostrato nella figura qui sotto, in cui la form è posizionata anche a design time dentro uno skin che rappresenta l’emulatore, che verrà lanciato automaticamente premendo F5. Anche controlli e menu non appaiono più a design time come controlli Windows standard, come invece succedeva in Visual Studio 2003:
VisualStudio2005SmartphoneApplication

Sempre per lo sviluppo in codice nativo, Visual Studio 2005 C++ offre un linguaggio pienamente supportato, insieme a Wizard e Template per creare progetti MFC o ATL: 
VisualStudio2005NativeC

Relativamente allo sviluppo managed, voglio subito precisare che sulla piattaforma Windows Mobile 2003 per Smartphone è installata la versione 1.0 del Compact Framework .NET, e questa non può essere aggiornata. In altre parole, sebbene Visual Studio 2005 includa la versione 2.0 del Compact Framework, che porta con sé nuovi controlli come MonthCalendar, DateTimePicker e WebBrowser, supporti docking e anchoring, e aggiunga nuove classi per lavorare con la crittografia, la serializazione XML e per il messaging (MSMQ), tutte queste caratteristiche non sono disponibili in progetti per Smartphone 2003. Per sfuttuarle occorre la versione successiva di Windows Mobile (la 5.0, basata su Windows CE 5, su cui si basa anche Pocket PC 2003) che include il runtime del .NET Framework 2.0:
Smartphone2003Framework  
windowsCe5

Se guardate attentamente le due figure precedenti, noterete che i template disponibili per Smart Device elencano le piattafrome Pocket PC 2003, Windows CE 5.0 (entrambi basati su Compact Framework 2.0) e Smartphone 2003 (su Compact Framework 1.0). Se però installate l’SDK Windows Mobile 5.0 per Pocket PC, otterrete ulteriori template che vi consentiranno di sviluppare applicazioni per questa piattaforma:
WindowsMobile5

Idem dicasi per l'SDK Windows Mobile 5.0 per Smartphone e l’SDK per Windows Mobile 6; entrambi sono comunque da installare a parte rispetto a Visual Studio 2005, in quanto sono usciti dopo, ma il primo lo troverete già presente in ORCAS (nome in codice per Visual Studio 2008).

Fra Windows Mobile 5 e la versione 6, cambiano i nomi con cui si identificano le piattaforme; abbiamo ora tre nuovi termini, che con questa tecnica sono secondo me semplici da memorizzare; attenzione, non pensiamo che Professional sia meglio di Standard o di Classic: i nomi indicano esattamente quanto segue:

  • Windows Mobile 6 Standard corrisponde a Windows Mobile 5 for Smartphone (ricordate la “S”)
  • Windows Mobile 6 Professional corrisponde a Windows Mobile 5 for Pocket PC Phone Edition (ricordate la “P”)
  • Windows Mobile 6 Classic corrisponde a Windows Mobile 5 for Pocket PC

Si noti che, nonostante sia già uscito Windows CE 6.0 (nome in codice Yamazaki), sia Windows Mobile 5 che 6 sono basati su Windows CE 5.X.

 

E ora, il futuro. Ho accennato prima a Visual Studio 2008, che includerà l’SDK per Windows Mobile 5 e richiederà l’installazione successiva dell’SDK per Windows Mobile 6. Altre principali novità in questo settore saranno le seguenti:

  • Aggiunta del Compact Framework .NET 3.5, le cui applicazioni potranno girare su Pocket PC 2003 (ma NON su Smartphone 2003, che come dicevo si basa sul framework 1.0), Windows Mobile 5 (per Pocket PC, pocket PC Phone Edition e Smartphone) e Windows Mobile 6 (Classic, Standard e Professional):
    visualstudio2008mobile
  • Rimozione del supporto per lo sviluppo di applicazioni managed basate su Compact Framework 1.0 (ovvero per Smartphone 2003), mentre rimane disponibile lo sviluppo in codice nativo (C++ con ATL o MFC); questa scelta è stata fatta in considerazione del numero molto ridotto di applicazioni di questo tipo
  • Device Emulator 3.0

 

L’ultimo punto qui sopra introduce l’argomento con cui mi accingo a chiudere questo post: gli emulatori.

Introdotta la versione 1.0 con Visual Studio 2005, essa sostituiva la versione X86 disponibile in precedenza aggiungendo significativi miglioramenti quali il supporto alla sincronizzazione via ActiveSync, supporto per un maggior numero di ambienti di sviluppo, nessun cavo seriale richiesto, il test di applicazioni (tipicamente giochi) basate su GAPI (Pocket PC Gaming API).

La versione 2.0, anch’essa inclusa in Visual Studio 2005 e in Windows Mobile 6 SDK, presenta prestazioni migliorate ed alcune nuove funzionalità rispetto alla 1.0, come la possibilità di testare le applicazioni sotto diverse condizioni della batteria. È indispensabile per lo sviluppo di applicazioni da utilizzare sulla piattaforma Windows Mobile 6 e Windows Embedded CE 6.0 da Visual Studio 2005.

Con la versione 3.0, che sarà distribuita con Visual Studio 2008, è stata aggiunta la possibilità di accedere in modo programmatico al Device Emulator Manager, per esempio enumerando gli SDK installati e fare operazioni come la "Connect" per far partire l'emulatore stesso da codice. Interessante anche la possibilità di salvare le impostazioni di un Emulatore in un file XML (.decfg) in cui sono contenute le impostazioni che ne descrivono la configurazione stessa, come il livello della batteria o le impostazioni di configurazione di rete. Maggiori informazioni sono disponibili nel post di Pietro Brambati.

 

RIFERIMENTI

MSDN Library: Developing for Windows Mobile-based Smartphones: Present and Future

Lo sviluppo su dispositivi mobili, di Michele Locuratolo - Microsoft MVP

MSDN Webcast: Building a .NET Compact Framework Application for a Windows Mobile-Based Device Using Visual Studio 2005 (Level 300)

Post di Pietro Brambati su Mobility Developer Conference

Post di Dario Airoldi sul Micro Framework