Sviluppo di applicazioni mobile cross platform

34
Sviluppo di applicazioni cross- platform Windows Phone, iOS, Android Dan ARDELEAN web: www.smartphoneday.com mail:[email protected]

Transcript of Sviluppo di applicazioni mobile cross platform

Page 1: Sviluppo di applicazioni mobile cross platform

Sviluppo di applicazioni cross-platformWindows Phone, iOS, Android

Dan ARDELEAN

web: www.smartphoneday.com mail:[email protected]

Page 2: Sviluppo di applicazioni mobile cross platform

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

om/

• Twitter: @danardelean

• Email: [email protected]

Page 3: Sviluppo di applicazioni mobile cross platform

Perché sviluppare applicazioni mobile?

Page 4: Sviluppo di applicazioni mobile cross platform

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

Page 5: Sviluppo di applicazioni mobile cross platform

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

Page 6: Sviluppo di applicazioni mobile cross platform

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 ?

Page 7: Sviluppo di applicazioni mobile cross platform

Si può sviluppare cross-platform?

Page 8: Sviluppo di applicazioni mobile 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

Page 9: Sviluppo di applicazioni mobile cross platform

Vi piace C#?

Page 10: Sviluppo di applicazioni mobile cross platform

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;}

Page 11: Sviluppo di applicazioni mobile cross platform

C#: ESTRARRE LA DATA

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

Page 12: Sviluppo di applicazioni mobile cross platform

DEMO MONOTOUCH

Page 13: Sviluppo di applicazioni mobile cross platform

DEMO MONODROID

Page 14: Sviluppo di applicazioni mobile cross platform
Page 15: Sviluppo di applicazioni mobile cross platform
Page 16: Sviluppo di applicazioni mobile cross platform

Come sviluppare cross-platform?

Page 17: Sviluppo di applicazioni mobile 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

Page 18: Sviluppo di applicazioni mobile cross platform

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

Page 19: Sviluppo di applicazioni mobile cross platform

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

Page 20: Sviluppo di applicazioni mobile cross platform

4: Linked Projects

• Pro Autolink files

• Contro Non funziona in MonoDevelop Tutti progetti devono essere

nella stessa soluzione

Page 21: Sviluppo di applicazioni mobile cross platform

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); }}

Page 22: Sviluppo di applicazioni mobile cross platform

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

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

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

Page 23: Sviluppo di applicazioni mobile cross platform

// Monotouchpublic class DispatchAdapter : IDispatchOnUIThread{

private readonly NSObject _owner;

public DispatchAdapter(NSObject owner){

_owner = owner;}

public void Invoke (Action action){

_owner.BeginInvokeOnMainThread(new NSAction(action));

}}

Page 24: Sviluppo di applicazioni mobile cross platform

5: Interfacce e classi astratte• Pro

Elimina la necessità di usare le direttive preprocessore

Migliora la condivisione del codice

• Contro Il codice è più «astratto»

Page 25: Sviluppo di applicazioni mobile cross platform

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)

Page 26: Sviluppo di applicazioni mobile cross platform

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

Page 27: Sviluppo di applicazioni mobile cross platform

Il Codice nel code-behind è difficile da testare

Data Model

VIEW

XAML

Code-BehindEvent

Handlers

Page 28: Sviluppo di applicazioni mobile cross platform

6: Usare il pattern MVVM

Data Model

VIEW

XAML

Code-Behind

VIEW MODEL

State + Operations

Change notification

Data-binding and commands

Page 29: Sviluppo di applicazioni mobile cross platform

6: MVVM• Pro

Logica separata da interfaccia utente Migliora la condivisione del codice

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

Page 30: Sviluppo di applicazioni mobile cross platform

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);}

Page 31: Sviluppo di applicazioni mobile cross platform

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)

Page 32: Sviluppo di applicazioni mobile cross platform

DEMO MONOGAME

Page 33: Sviluppo di applicazioni mobile cross platform

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

Page 34: Sviluppo di applicazioni mobile cross platform

If (Developers.Happy())Return OnInvestment;