Sviluppo di applicazioni mobile cross platform

Post on 09-May-2015

921 views 1 download

Transcript of Sviluppo di applicazioni mobile cross platform

Sviluppo di applicazioni cross-platformWindows Phone, iOS, Android

Dan ARDELEAN

web: www.smartphoneday.com mail:info@smartphoneday.com

• BLOG: http://sviluppomobile.blogspot.c

om/

• Twitter: @danardelean

• Email: Dan.ardelean@neologis.eu

Perché sviluppare applicazioni mobile?

Vendite smartphone nel 2010

Nokia 100.3M 34%

RIM 48.0M 16%

Apple 47.5M 16%

HTC 25.0M 8%

Samsung 24.0M 8%

Motorola 13.7M 5%

Sony Ericsson 9.5M 3%

LG 7.0M 2%

Fujitsu 6.2M 2%

Sharp 5.2M 2%

Others 11.6M

TOTAL 297.9M

Nokia nel 2010» 2010 >100 milioni di smartphone venduti

» 260.000 smartphone al giorno

» 190 mercati in tutto il mondo

» 170 mercati che usano la carta di credito

» 121 operatori mobili che usano operator billing

» Più di 9 milioni di download al giorno

Piattaforme su quali sviluppare• Windows Phone 7: Nokia, Samsung, HTC, LG,

Fujitsu, Acer, Asus• Apple iOS : iPhone e iPad• Android: Motorola, Samsung, HTC, LG , ACER ,

• RIM ?

Si può sviluppare cross-platform?

Perché sviluppare cross-platform?

• Basta imparare un solo linguaggio di programmazione = C#

• Possibilità di riutilizzare il codice

• Possibilità di riutilizzare le librerie

• Costi per lo sviluppo e la manutenzione del codice sorgenti più contenuti

• Time To Market migliore

Vi piace C#?

OBJECTIVE-C: SOLO LA DATA

+ (NSDate *) stripTime:(NSDate *) date { NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *components = [gregorian components: (NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:date];

date = [gregorian dateFromComponents:components];

[gregorian release];

return date;}

C#: ESTRARRE LA DATA

public DateTime SoloLaData(DateTime date){ return date.Date;}

DEMO MONOTOUCH

DEMO MONODROID

Come sviluppare cross-platform?

1: Linked Files• Pro

Stesso codice su tutte le piattaforme

Si possono usare le direttive preprocessore

Si può usare codice specifico per le piattaforme

• Contro Bisogna gestire più progetti

2: Direttive preprocessore

• Pro Si può inserire codice specifico

per ogni piattaforma

• Contro Codice non molto «pulito»

using System.Net;#if MONOTOUCH || MONODROIDusing System.Web;#endif

3: Portable Libraries• Pro

Un’unica libreria per tutte le piattaforme

Usa solo le classe disponibile su tutte le piattaforme

• Contro Non si possono usare le direttive

preprocessore Non si può usare codice specifico

per le piattaforme Non direttamente supportato da

MonoDevelop

4: Linked Projects

• Pro Autolink files

• Contro Non funziona in MonoDevelop Tutti progetti devono essere

nella stessa soluzione

5: Interfacce e classi astrattepublic interface IDispatchOnUIThread{ void Invoke(Action action);}

// Windows Phone 7public class DispatchAdapter : IDispatchOnUIThread{ public void Invoke(Action action) { Deployment.Current.Dispatcher.BeginInvoke(action); }}

// Mono for Androidpublic class DispatchAdapter : IDispatchOnUIThread{ private readonly Activity _owner;

public DispatchAdapter(Activity owner) { _owner = owner; }

public void Invoke(Action action) { _owner.RunOnUiThread(action); }}

// Monotouchpublic class DispatchAdapter : IDispatchOnUIThread{

private readonly NSObject _owner;

public DispatchAdapter(NSObject owner){

_owner = owner;}

public void Invoke (Action action){

_owner.BeginInvokeOnMainThread(new NSAction(action));

}}

5: Interfacce e classi astratte• Pro

Elimina la necessità di usare le direttive preprocessore

Migliora la condivisione del codice

• Contro Il codice è più «astratto»

MonoMobile.Extensions

• Accelerometer• Camera• Compass• Geolocation• Notification• Storage• Contacts• And more...

• https://github.com/chrisntr/MonoMobile.Extensions

• Un unico API per le funzionalità specifiche del telefono

• Inspirato da PhoneGap (same API)

3x MonoMobile.Extensions.dll

• MonoDroid -> MonoMobile.Extensions.dll• Implemented using LocationManager

• MonoTouch -> MonoMobile.Extensions.dll• Implemented using CLLocationManager

• Windows Phone 7 -> MonoMobile.Extensions.dll• Implemented using

GeoLocationWatcher

Il Codice nel code-behind è difficile da testare

Data Model

VIEW

XAML

Code-BehindEvent

Handlers

6: Usare il pattern MVVM

Data Model

VIEW

XAML

Code-Behind

VIEW MODEL

State + Operations

Change notification

Data-binding and commands

6: MVVM• Pro

Logica separata da interfaccia utente Migliora la condivisione del codice

• Contro Il codice più difficile da capire all’inizio

private void TrovaLaMiaPosizione(){ var coordinate= new MonoMobile.Extensions.Geolocation(); coordinate.GetCurrentPosition(PositionAvailable);}

private void PositionAvailable(Position position){ Console.WriteLine("{0} {1}", position.Coords.Latitude, position.Coords.Longitude);}

7: MonoGame 2.0• https://

github.com/mono/MonoGame

• https://github.com/CartBlanche/MonoGame-Samples

• OpenSource XNA Api

• Si può riutilizzare il codice XNA scritto per XBOX 360 o Windows Phone 7

• Windows e Windows Phone, Mac, Linux, Android, iOS (iPhone, iPad)

DEMO MONOGAME

Iniziare da• http://create.msdn.com/

• http://www.xamarin.com/

• http://developer.android.com/

• http://developer.apple.com/

33

Training Windows Phone e Mono

• http://learnmobilenow.com/

• http://www.appdev.com/mobile.asp

• http://www.pluralsight-training.com

If (Developers.Happy())Return OnInvestment;