Upload
dan-ardelean
View
922
Download
1
Embed Size (px)
Citation preview
Sviluppo di applicazioni cross-platformWindows Phone, iOS, Android
Dan ARDELEAN
web: www.smartphoneday.com mail:[email protected]
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;