SlideShare a Scribd company logo
Sviluppo di applicazioni cross-platform
Windows Phone, iOS, Android
Dan ARDELEAN
web: www.smartphoneday.com mail:info@smartphoneday.com
• BLOG: http://sviluppomobile.blogspot.com/
• 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 || MONODROID
using 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 astratte
public interface IDispatchOnUIThread
{
void Invoke(Action action);
}
// Windows Phone 7
public class DispatchAdapter : IDispatchOnUIThread
{
public void Invoke(Action action)
{
Deployment.Current.Dispatcher.BeginInvoke(action);
}
}
// Mono for Android
public class DispatchAdapter : IDispatchOnUIThread
{
private readonly Activity _owner;
public DispatchAdapter(Activity owner)
{
_owner = owner;
}
public void Invoke(Action action)
{
_owner.RunOnUiThread(action);
}
}
// Monotouch
public 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-Behind
Event 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/CartBlanch
e/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;

More Related Content

Similar to Sviluppo di applicazioni mobile cross platform

Sviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapSviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapDotNetMarche
 
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
Lorenzo Braghetto
 
Smau milano 2012 arena social media davide-senatore
Smau milano 2012   arena social media davide-senatoreSmau milano 2012   arena social media davide-senatore
Smau milano 2012 arena social media davide-senatoreSMAU
 
MonoTouch, un anno dopo
MonoTouch, un anno dopoMonoTouch, un anno dopo
MonoTouch, un anno dopo
Stefano Ottaviani
 
follow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Androidfollow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: AndroidQIRIS
 
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
 Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
Microsoft Mobile Developer
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
Diego La Monica
 
Internet in mobilità
Internet in mobilitàInternet in mobilità
Internet in mobilità
Luca Mascaro
 
Android Mobile Apps , visione d'insieme
Android Mobile Apps , visione d'insiemeAndroid Mobile Apps , visione d'insieme
Android Mobile Apps , visione d'insieme
Francesco De Simone
 
Define & design apps for success
Define & design apps for successDefine & design apps for success
Define & design apps for successAcrmnet s.r.l.
 
Come creare una app di successo
Come creare una app di successoCome creare una app di successo
Come creare una app di successo
Michele Ferraro
 
Il Web su Mobile
Il Web su MobileIl Web su Mobile
Il Web su Mobile
Studio Pleiadi
 
Sviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi MobiliSviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi Mobili
Dominopoint - Italian Lotus User Group
 
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
Diego La Monica
 
Touch&play framework
Touch&play frameworkTouch&play framework
Touch&play frameworkCSP Scarl
 
Horizontal and vertical integration
Horizontal and vertical integrationHorizontal and vertical integration
Horizontal and vertical integration
T3basilicata
 
Mobile senza frontiere
Mobile senza frontiereMobile senza frontiere
Mobile senza frontiere
Carlo Frinolli Puzzilli
 
Creare un’APP di successo, pubblicizzarla, monetizzare. Speaker: Luciano Blan...
Creare un’APP di successo, pubblicizzarla, monetizzare. Speaker: Luciano Blan...Creare un’APP di successo, pubblicizzarla, monetizzare. Speaker: Luciano Blan...
Creare un’APP di successo, pubblicizzarla, monetizzare. Speaker: Luciano Blan...
Luciano Blancato
 
Il futuro di Windows Phone
Il futuro di Windows PhoneIl futuro di Windows Phone
Il futuro di Windows Phone
Matteo Pagani
 

Similar to Sviluppo di applicazioni mobile cross platform (20)

Sviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapSviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGap
 
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
 
Smau milano 2012 arena social media davide-senatore
Smau milano 2012   arena social media davide-senatoreSmau milano 2012   arena social media davide-senatore
Smau milano 2012 arena social media davide-senatore
 
MonoTouch, un anno dopo
MonoTouch, un anno dopoMonoTouch, un anno dopo
MonoTouch, un anno dopo
 
follow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Androidfollow-app BOOTCAMP 3: Android
follow-app BOOTCAMP 3: Android
 
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
 Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
 
Internet in mobilità
Internet in mobilitàInternet in mobilità
Internet in mobilità
 
Android Mobile Apps , visione d'insieme
Android Mobile Apps , visione d'insiemeAndroid Mobile Apps , visione d'insieme
Android Mobile Apps , visione d'insieme
 
Define & design apps for success
Define & design apps for successDefine & design apps for success
Define & design apps for success
 
Come creare una app di successo
Come creare una app di successoCome creare una app di successo
Come creare una app di successo
 
Il Web su Mobile
Il Web su MobileIl Web su Mobile
Il Web su Mobile
 
Mobile development .net
Mobile development .netMobile development .net
Mobile development .net
 
Sviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi MobiliSviluppare applicazioni Domino Web per dispositivi Mobili
Sviluppare applicazioni Domino Web per dispositivi Mobili
 
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
 
Touch&play framework
Touch&play frameworkTouch&play framework
Touch&play framework
 
Horizontal and vertical integration
Horizontal and vertical integrationHorizontal and vertical integration
Horizontal and vertical integration
 
Mobile senza frontiere
Mobile senza frontiereMobile senza frontiere
Mobile senza frontiere
 
Creare un’APP di successo, pubblicizzarla, monetizzare. Speaker: Luciano Blan...
Creare un’APP di successo, pubblicizzarla, monetizzare. Speaker: Luciano Blan...Creare un’APP di successo, pubblicizzarla, monetizzare. Speaker: Luciano Blan...
Creare un’APP di successo, pubblicizzarla, monetizzare. Speaker: Luciano Blan...
 
Il futuro di Windows Phone
Il futuro di Windows PhoneIl futuro di Windows Phone
Il futuro di Windows Phone
 

More from Dan Ardelean

CI/CD for mobile development using AppCenter
CI/CD for mobile development using AppCenterCI/CD for mobile development using AppCenter
CI/CD for mobile development using AppCenter
Dan Ardelean
 
CI/CD for mobile development using Visual Studio App Center
CI/CD for mobile development using Visual Studio App CenterCI/CD for mobile development using Visual Studio App Center
CI/CD for mobile development using Visual Studio App Center
Dan Ardelean
 
Visual Studio App Center: CI/CD para mobile devs
Visual Studio App Center: CI/CD para mobile devsVisual Studio App Center: CI/CD para mobile devs
Visual Studio App Center: CI/CD para mobile devs
Dan Ardelean
 
Desarrollo multiplataforma con el framework .net
Desarrollo multiplataforma con el framework .netDesarrollo multiplataforma con el framework .net
Desarrollo multiplataforma con el framework .net
Dan Ardelean
 
Xamarin.forms a different approach to native cross platform mobile development
Xamarin.forms a different approach to native cross platform mobile developmentXamarin.forms a different approach to native cross platform mobile development
Xamarin.forms a different approach to native cross platform mobile development
Dan Ardelean
 
Xamarin.Forms a different approach to cross platform natove mobile development
Xamarin.Forms a different approach to cross platform natove mobile developmentXamarin.Forms a different approach to cross platform natove mobile development
Xamarin.Forms a different approach to cross platform natove mobile development
Dan Ardelean
 
Xamarin - Under the bridge
Xamarin - Under the bridgeXamarin - Under the bridge
Xamarin - Under the bridge
Dan Ardelean
 
Sviluppo x platform con xamarin
Sviluppo x platform con xamarin Sviluppo x platform con xamarin
Sviluppo x platform con xamarin
Dan Ardelean
 
Xamarin - why not ?
Xamarin -  why not ?Xamarin -  why not ?
Xamarin - why not ?
Dan Ardelean
 
Share more code on iOS, Android and Windows with Portable Class Libraries
Share more code on iOS, Android and Windows with Portable Class LibrariesShare more code on iOS, Android and Windows with Portable Class Libraries
Share more code on iOS, Android and Windows with Portable Class Libraries
Dan Ardelean
 
iBeacons for everyone
iBeacons for everyoneiBeacons for everyone
iBeacons for everyone
Dan Ardelean
 
Xamarin Dev Days 2016 introduction to xamarin
Xamarin Dev Days 2016   introduction to xamarinXamarin Dev Days 2016   introduction to xamarin
Xamarin Dev Days 2016 introduction to xamarin
Dan Ardelean
 
A new world of possibilities for contextual awareness with beacons
A new world of possibilities for contextual awareness with beaconsA new world of possibilities for contextual awareness with beacons
A new world of possibilities for contextual awareness with beacons
Dan Ardelean
 
C sharp day 2015 c# patterns- cross-platform
C sharp day 2015   c# patterns- cross-platform  C sharp day 2015   c# patterns- cross-platform
C sharp day 2015 c# patterns- cross-platform
Dan Ardelean
 
Utilizzo dei beacon con windows 10
Utilizzo dei beacon con windows 10Utilizzo dei beacon con windows 10
Utilizzo dei beacon con windows 10
Dan Ardelean
 
Develop for Windows 10 (Preview)
Develop for Windows 10 (Preview)Develop for Windows 10 (Preview)
Develop for Windows 10 (Preview)
Dan Ardelean
 
Sviluppo di app cross platform con xamarin e C#
Sviluppo di app cross platform con xamarin e C#Sviluppo di app cross platform con xamarin e C#
Sviluppo di app cross platform con xamarin e C#
Dan Ardelean
 
WP04 -Sensori e hardware con Windows Phone 8.1
WP04 -Sensori e hardware con Windows Phone 8.1WP04 -Sensori e hardware con Windows Phone 8.1
WP04 -Sensori e hardware con Windows Phone 8.1
Dan Ardelean
 
Bluetooth LE & Lumia Sensor Core
Bluetooth LE & Lumia Sensor CoreBluetooth LE & Lumia Sensor Core
Bluetooth LE & Lumia Sensor Core
Dan Ardelean
 
Introduction to Xamarin 3
Introduction to Xamarin 3Introduction to Xamarin 3
Introduction to Xamarin 3
Dan Ardelean
 

More from Dan Ardelean (20)

CI/CD for mobile development using AppCenter
CI/CD for mobile development using AppCenterCI/CD for mobile development using AppCenter
CI/CD for mobile development using AppCenter
 
CI/CD for mobile development using Visual Studio App Center
CI/CD for mobile development using Visual Studio App CenterCI/CD for mobile development using Visual Studio App Center
CI/CD for mobile development using Visual Studio App Center
 
Visual Studio App Center: CI/CD para mobile devs
Visual Studio App Center: CI/CD para mobile devsVisual Studio App Center: CI/CD para mobile devs
Visual Studio App Center: CI/CD para mobile devs
 
Desarrollo multiplataforma con el framework .net
Desarrollo multiplataforma con el framework .netDesarrollo multiplataforma con el framework .net
Desarrollo multiplataforma con el framework .net
 
Xamarin.forms a different approach to native cross platform mobile development
Xamarin.forms a different approach to native cross platform mobile developmentXamarin.forms a different approach to native cross platform mobile development
Xamarin.forms a different approach to native cross platform mobile development
 
Xamarin.Forms a different approach to cross platform natove mobile development
Xamarin.Forms a different approach to cross platform natove mobile developmentXamarin.Forms a different approach to cross platform natove mobile development
Xamarin.Forms a different approach to cross platform natove mobile development
 
Xamarin - Under the bridge
Xamarin - Under the bridgeXamarin - Under the bridge
Xamarin - Under the bridge
 
Sviluppo x platform con xamarin
Sviluppo x platform con xamarin Sviluppo x platform con xamarin
Sviluppo x platform con xamarin
 
Xamarin - why not ?
Xamarin -  why not ?Xamarin -  why not ?
Xamarin - why not ?
 
Share more code on iOS, Android and Windows with Portable Class Libraries
Share more code on iOS, Android and Windows with Portable Class LibrariesShare more code on iOS, Android and Windows with Portable Class Libraries
Share more code on iOS, Android and Windows with Portable Class Libraries
 
iBeacons for everyone
iBeacons for everyoneiBeacons for everyone
iBeacons for everyone
 
Xamarin Dev Days 2016 introduction to xamarin
Xamarin Dev Days 2016   introduction to xamarinXamarin Dev Days 2016   introduction to xamarin
Xamarin Dev Days 2016 introduction to xamarin
 
A new world of possibilities for contextual awareness with beacons
A new world of possibilities for contextual awareness with beaconsA new world of possibilities for contextual awareness with beacons
A new world of possibilities for contextual awareness with beacons
 
C sharp day 2015 c# patterns- cross-platform
C sharp day 2015   c# patterns- cross-platform  C sharp day 2015   c# patterns- cross-platform
C sharp day 2015 c# patterns- cross-platform
 
Utilizzo dei beacon con windows 10
Utilizzo dei beacon con windows 10Utilizzo dei beacon con windows 10
Utilizzo dei beacon con windows 10
 
Develop for Windows 10 (Preview)
Develop for Windows 10 (Preview)Develop for Windows 10 (Preview)
Develop for Windows 10 (Preview)
 
Sviluppo di app cross platform con xamarin e C#
Sviluppo di app cross platform con xamarin e C#Sviluppo di app cross platform con xamarin e C#
Sviluppo di app cross platform con xamarin e C#
 
WP04 -Sensori e hardware con Windows Phone 8.1
WP04 -Sensori e hardware con Windows Phone 8.1WP04 -Sensori e hardware con Windows Phone 8.1
WP04 -Sensori e hardware con Windows Phone 8.1
 
Bluetooth LE & Lumia Sensor Core
Bluetooth LE & Lumia Sensor CoreBluetooth LE & Lumia Sensor Core
Bluetooth LE & Lumia Sensor Core
 
Introduction to Xamarin 3
Introduction to Xamarin 3Introduction to Xamarin 3
Introduction to Xamarin 3
 

Sviluppo di applicazioni mobile cross platform

  • 1. Sviluppo di applicazioni cross-platform Windows Phone, iOS, Android Dan ARDELEAN web: www.smartphoneday.com mail:info@smartphoneday.com
  • 2. • BLOG: http://sviluppomobile.blogspot.com/ • Twitter: @danardelean • Email: Dan.ardelean@neologis.eu
  • 4. 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
  • 5. 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
  • 6. 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 ?
  • 7. Si può sviluppare cross-platform?
  • 8. 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
  • 10. 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; }
  • 11. C#: ESTRARRE LA DATA public DateTime SoloLaData(DateTime date) { return date.Date; }
  • 14.
  • 15.
  • 17. 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
  • 18. 2: Direttive preprocessore • Pro  Si può inserire codice specifico per ogni piattaforma • Contro  Codice non molto «pulito» using System.Net; #if MONOTOUCH || MONODROID using System.Web; #endif
  • 19. 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
  • 20. 4: Linked Projects • Pro  Autolink files • Contro  Non funziona in MonoDevelop  Tutti progetti devono essere nella stessa soluzione
  • 21. 5: Interfacce e classi astratte public interface IDispatchOnUIThread { void Invoke(Action action); } // Windows Phone 7 public class DispatchAdapter : IDispatchOnUIThread { public void Invoke(Action action) { Deployment.Current.Dispatcher.BeginInvoke(action); } }
  • 22. // Mono for Android public class DispatchAdapter : IDispatchOnUIThread { private readonly Activity _owner; public DispatchAdapter(Activity owner) { _owner = owner; } public void Invoke(Action action) { _owner.RunOnUiThread(action); } }
  • 23. // Monotouch public class DispatchAdapter : IDispatchOnUIThread { private readonly NSObject _owner; public DispatchAdapter(NSObject owner) { _owner = owner; } public void Invoke (Action action) { _owner.BeginInvokeOnMainThread( new NSAction(action)); } }
  • 24. 5: Interfacce e classi astratte • Pro  Elimina la necessità di usare le direttive preprocessore  Migliora la condivisione del codice • Contro  Il codice è più «astratto»
  • 25. 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)
  • 26. 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
  • 27. Il Codice nel code-behind è difficile da testare Data Model VIEW XAML Code-Behind Event Handlers
  • 28. 6: Usare il pattern MVVM Data Model VIEW XAML Code-Behind VIEW MODEL State + Operations Change notification Data-binding and commands
  • 29. 6: MVVM • Pro  Logica separata da interfaccia utente  Migliora la condivisione del codice • Contro  Il codice più difficile da capire all’inizio
  • 30. 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); }
  • 31. 7: MonoGame 2.0 • https://github.com/mono/ MonoGame • https://github.com/CartBlanch e/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)
  • 33. 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