Upload
stefano-ottaviani
View
1.395
Download
2
Embed Size (px)
DESCRIPTION
MonoTouch ha delle caratteristiche che lo differenziano rispetto agli altri framework per lo sviluppo su iPhone / iPad: vediamo quali sono, che vantaggi ci possono dare e in che modo possono rivelarsi più divertenti :), in particolar modo nell'ambito delle applicazioni LOB (Line of Business). Anche se MonoTouch non è direttamente cross-platform, cercheremo inoltre di dare uno sguardo a come organizzare i nostri progetti in modo tale da farli girare anche su altri device, in particolare Android, Windows Phone 7, e perché no, desktop e netbook, col minor sforzo possibile.
Citation preview
Programmiamo iPhone e iPad (e non solo!) con
• Stefano Ottaviani‣ [email protected]‣ @ste8
Quale sarà il futuro di MT?
2
Quale sarà il futuro di MT?
2
Quale sarà il futuro di MT?
2
Quale sarà il futuro di MT?
2
All technology roadmaps remain
intact
Quale sarà il futuro di MT?
2
All technology roadmaps remain
intact
Quale sarà il futuro di MT?
2
All technology roadmaps remain
intactYou should, yes. It will
be compa;ble.
Can we con;nue working with MonoTouch?
Quale sarà il futuro di MT?
2
All technology roadmaps remain
intactYou should, yes. It will
be compa;ble.
Can we con;nue working with MonoTouch?
No Panic
Conosciamoci un po’
3
Conosciamoci un po’
• Chi utilizza già MonoTouch?
3
Conosciamoci un po’
• Chi utilizza già MonoTouch?
• Chi ha idea di cosa si tratta?
3
Conosciamoci un po’
• Chi utilizza già MonoTouch?
• Chi ha idea di cosa si tratta?
• Chi conosce già Objective-C?
3
Conosciamoci un po’
• Chi utilizza già MonoTouch?
• Chi ha idea di cosa si tratta?
• Chi conosce già Objective-C?
• Chi conosce già .NET Framework?3
Chi sono?
4
Chi sono?
• Dev / SEng @ KILOG Srl‣ Da Palm OS a iPad, passando per Windows CE / Mobile
(C++, .NET CF)
4
Chi sono?
• Dev / SEng @ KILOG Srl‣ Da Palm OS a iPad, passando per Windows CE / Mobile
(C++, .NET CF)
• Communities‣ DotNetMarche, XPUG Marche
4
Chi sono?
• Dev / SEng @ KILOG Srl‣ Da Palm OS a iPad, passando per Windows CE / Mobile
(C++, .NET CF)
• Communities‣ DotNetMarche, XPUG Marche
• Contatti‣ [email protected]‣ @ste8 ‣ blogs.ugidotnet.org/ste84
Cosa devo sviluppare? (1/2)
5
Cosa devo sviluppare? (1/2)
• App LOB (Line of Business)‣ Online e soprattutto OFFLINE
✴Non si vive di soli servizi!
5
Cosa devo sviluppare? (1/2)
• App LOB (Line of Business)‣ Online e soprattutto OFFLINE
✴Non si vive di soli servizi!
• Device:iPhone e iPad come riferimenti‣ ma ci sono anche Android, WP7, netbook
5
Cosa devo sviluppare? (1/2)
• App LOB (Line of Business)‣ Online e soprattutto OFFLINE
✴Non si vive di soli servizi!
• Device:iPhone e iPad come riferimenti‣ ma ci sono anche Android, WP7, netbook
• UX usabile e attraente!5
Cosa devo sviluppare? (2/2)
6
Cosa devo sviluppare? (2/2)
• Performante‣ L’exe non deve essere per forza piccolo
6
Cosa devo sviluppare? (2/2)
• Performante‣ L’exe non deve essere per forza piccolo
• Controllo sul deploy dell’app
6
Cosa devo sviluppare? (2/2)
• Performante‣ L’exe non deve essere per forza piccolo
• Controllo sul deploy dell’app
• Ridurre potenziali problemi x sviluppo‣ No puntatori & rilascio memoria
6
Il layer UI va cmq rifatto (1/5)
Esempio MIX11 App http://tinyurl.com/442vt3t
iPhone
7
Il layer UI va cmq rifatto (2/5)
Esempio MIX11 App http://tinyurl.com/442vt3t
WP7
8
Il layer UI va cmq rifatto (3/5)
Esempio MIX11 App http://tinyurl.com/442vt3t
Android
9
Il layer UI va cmq rifatto (4/5)
Ipse dixit: Martin Fowlerhttp://martinfowler.com/bliki/CrossPlatformMobile.html
To summarize:
• Don't use cross-platform toolkits• For maximum reach: built a web app that looks
like web app• To appeal to a particular platform: build a native
app for that platform, with a experience design based on that platforms interaction style
10
Il layer UI va cmq rifatto (5/5)
Ste dixit: ma almeno riutilizziamo la logica di business e di accesso dati...
... soprattutto in app offline!
Riscrivere il codice in linguaggi diversi per ogni piattaforma è
molto costoso!11
Che strumenti abbiamo?
12
Che strumenti abbiamo?
• Objective-C‣ learning curve ulteriore x il linguaggio‣ target: “solo” iPhone, iPad, Mac OS X
12
Che strumenti abbiamo?
• Objective-C‣ learning curve ulteriore x il linguaggio‣ target: “solo” iPhone, iPad, Mac OS X
• HTML + JavaScript‣ attenti alle diverse modalità!‣ indicata se già li conosciamo
12
Che strumenti abbiamo?
• Objective-C‣ learning curve ulteriore x il linguaggio‣ target: “solo” iPhone, iPad, Mac OS X
• HTML + JavaScript‣ attenti alle diverse modalità!‣ indicata se già li conosciamo
• MonoTouch & Co.12
Cos’è MonoTouch? (1/3)
13
Cos’è MonoTouch? (1/3)
• Come Mono... ma diverso!‣ Suite per portare C# e .NET su iPhone!
13
Cos’è MonoTouch? (1/3)
• Come Mono... ma diverso!‣ Suite per portare C# e .NET su iPhone!
• Alcune limitazioni da ambiente Apple‣ Usa compilazione statica (AOT, Ahead of
Time) invece che a runtime (JIT)• http://www.mono-project.com/AOT
‣ No generazione codice• Reflection.Emit, DLR, Generic Virtual
Methods13
Cos’è MonoTouch? (2/3)
14
Cos’è MonoTouch? (2/3)
• MonoDevelop + Interface Builder‣ Lavori in corso per IB 4
14
Cos’è MonoTouch? (2/3)
• MonoDevelop + Interface Builder‣ Lavori in corso per IB 4
• Cosa c’è‣ C# 4‣ Garbage Collection‣ LINQ / Lamba‣ Generics‣ Reflection / Static Reflection‣ WCF ‣ Parallel Framework
14
Cos’è MonoTouch? (3/3)
15
Cos’è MonoTouch? (3/3)
• Thin layer sopra le API native‣ rapidità di aggiornamento all’iOS SDK‣ binding x utilizzo librerie Objective-C
15
Cos’è MonoTouch? (3/3)
• Thin layer sopra le API native‣ rapidità di aggiornamento all’iOS SDK‣ binding x utilizzo librerie Objective-C
‣ learning curve: conoscere le basi dell’ambiente nativo– Oltre alle HIG (Human Interface Guidelines)– Infrastruttura (view controllers, ...)– saper almeno leggere Objective-C
15
Cos’è MonoTouch? (3/3)
• Thin layer sopra le API native‣ rapidità di aggiornamento all’iOS SDK‣ binding x utilizzo librerie Objective-C
‣ learning curve: conoscere le basi dell’ambiente nativo– Oltre alle HIG (Human Interface Guidelines)– Infrastruttura (view controllers, ...)– saper almeno leggere Objective-C
• Prezzo:pro o contro?15
Soddisfa i miei bisogni? (1/3)
16
Soddisfa i miei bisogni? (1/3)
• App LOB (Line of Business)‣ Online e soprattutto OFFLINE
- Non si vive di soli servizi!✴Si... e fa molto altro!
16
Soddisfa i miei bisogni? (1/3)
• App LOB (Line of Business)‣ Online e soprattutto OFFLINE
- Non si vive di soli servizi!✴Si... e fa molto altro!
• Device:iPhone e iPad come riferimenti‣ ma ci sono anche Android, WP7, netbook✴Posso condividere BIZ e DAL!
16
Soddisfa i miei bisogni? (2/3)
17
Soddisfa i miei bisogni? (2/3)
• UX usabile e attraente!✴Stesse possibilità di Objective-C (IB)
17
Soddisfa i miei bisogni? (2/3)
• UX usabile e attraente!✴Stesse possibilità di Objective-C (IB)
• Performante‣ L’exe non deve essere per forza piccolo✴Compilazione “nativa”, LLVM compiler✴iCircuit test: http://news.ycombinator.com/item?id=2557047
17
Soddisfa i miei bisogni? (2/3)
• UX usabile e attraente!✴Stesse possibilità di Objective-C (IB)
• Performante‣ L’exe non deve essere per forza piccolo✴Compilazione “nativa”, LLVM compiler✴iCircuit test: http://news.ycombinator.com/item?id=2557047
• Controllo sul deploy dell’app✴Stesse possibilità di Objective-C!
17
Soddisfa i miei bisogni? (3/3)
18
Soddisfa i miei bisogni? (3/3)
• Ridurre potenziali problemi x sviluppo‣ No puntatori & rilascio memoria✴C# e Garbage Collector => No puntatori!✴Non è tutto oro...attenti ai memory leak!
✴Profiler in arrivo??
18
Risorse per iniziare
19
Risorse per iniziare
• 2 Video da NDC 2010‣ http://tekpub.com/conferences/ndc2010
19
Risorse per iniziare
• 2 Video da NDC 2010‣ http://tekpub.com/conferences/ndc2010
• Stack Overflow / Mailing List
19
Risorse per iniziare
• 2 Video da NDC 2010‣ http://tekpub.com/conferences/ndc2010
• Stack Overflow / Mailing List
• Esempi: TweetStation
19
Risorse per iniziare
• 2 Video da NDC 2010‣ http://tekpub.com/conferences/ndc2010
• Stack Overflow / Mailing List
• Esempi: TweetStation
• Libri 19
Ingredienti per iniziare
20
Ingredienti per iniziare
• Un computer Mac con Mac OS X
20
Ingredienti per iniziare
• Un computer Mac con Mac OS X
• iPhone SDK
20
Ingredienti per iniziare
• Un computer Mac con Mac OS X
• iPhone SDK
• MonoTouch (+ Mono)
20
Ingredienti per iniziare
• Un computer Mac con Mac OS X
• iPhone SDK
• MonoTouch (+ Mono)
• MonoDevelop20
Configurazione ambiente
21
Configurazione ambiente
• Boot Camp + Parallels = stessa (ma unica) partizione Windows
21
Configurazione ambiente
• Boot Camp + Parallels = stessa (ma unica) partizione Windows
• Shortcuts per ‣ Mac OS X‣ Windows da Parallels‣ MonoDevelop‣ Info a breve nel blog
21
Visual Studio come IDE (1/2)
22
Visual Studio come IDE (1/2)
• Perchè vorrei farlo?‣ IDE migliore / Resharper, ...
22
Visual Studio come IDE (1/2)
• Perchè vorrei farlo?‣ IDE migliore / Resharper, ...
• Si può fare! (cit)‣ o quasi.... solo build, NO RUN
22
Visual Studio come IDE (1/2)
• Perchè vorrei farlo?‣ IDE migliore / Resharper, ...
• Si può fare! (cit)‣ o quasi.... solo build, NO RUN
• Non solo per progetti BIZ e DAL, anche per UI
22
Visual Studio come IDE (2/2)
• Diverse soluzioni:‣ https://github.com/jamiebriant/VsMono • https://github.com/follesoe/VSMonoTouch
‣ http://www.shrinkrays.net/code-snippets/csharp/monotouch-tips-and-snippets.aspx
23
Poniamo le basi...
...per costruire la prima App!
24
Cocoa Touch: il Framework
25
Cocoa Touch: il Framework
• Cocoa : .NET FX = Objective-C : C#
25
Cocoa Touch: il Framework
• Cocoa : .NET FX = Objective-C : C#
• Foundation‣ objects, memory, ...
25
Cocoa Touch: il Framework
• Cocoa : .NET FX = Objective-C : C#
• Foundation‣ objects, memory, ...
• UIKit, GameKit, MapKit, ...
25
Cocoa Touch: il Framework
• Cocoa : .NET FX = Objective-C : C#
• Foundation‣ objects, memory, ...
• UIKit, GameKit, MapKit, ...
• Intro per .Net Dev:‣ http://www.kevfoo.com/2011/05/quick-primer-cocoa-and-cocoa-touch/
25
Window e Views
26
Window e Views
• Application / AppDelegate‣ main, ...‣ 10 secondi per caricare!
26
Window e Views
• Application / AppDelegate‣ main, ...‣ 10 secondi per caricare!
• Window‣ 1 sola per App!!! Poi coi ViewControllers...
26
Window e Views
• Application / AppDelegate‣ main, ...‣ 10 secondi per caricare!
• Window‣ 1 sola per App!!! Poi coi ViewControllers...
• View (UIView)‣ Base per UI Controls (Button, Textbox, ...)‣ Base per User Control! No ViewController
26
1° Demo!• Usare MonoDevelop (anche più istanze)• Creare UI con / senza Interface Builder• Utilizzo di immagini / risorse• Creazione di custom control con UIView• Utilizziamo le tabelle
27
ViewControllers
28
ViewControllers
• Basato su MVC (o una specie...)
28
ViewControllers
• Basato su MVC (o una specie...)
• Creazione di app con più screen‣ Navigation‣ Resize, orientamento
28
ViewControllers
• Basato su MVC (o una specie...)
• Creazione di app con più screen‣ Navigation‣ Resize, orientamento
• “Infrastruttura” per UI Controls‣ es. TableViewController
28
Esempi di ViewController (1/4)
TabBarController
29
Esempi di ViewController (2/4)
NavigationController
30
Esempi di ViewController (3/4)
SplitViewController / PopoverController
31
Esempi di ViewController (4/4)
TableViewController
32
2° Demo!• Creare una form con UIViewController• Resize e rotazione form• Anchor e docking• App con più form grazie ai ViewController.
33
Altri approcci per UI
34
Altri approcci per UI
• Tentativi di MVVM
34
Altri approcci per UI
• Tentativi di MVVM
• DSL? (Domain-specific language)
34
Altri approcci per UI
• Tentativi di MVVM
• DSL? (Domain-specific language)
‣ iCircuit:http://praeclarum.org/post/1520024382/interfaces-caches-cross-platform
34
Altri approcci per UI
• Tentativi di MVVM
• DSL? (Domain-specific language)
‣ iCircuit:http://praeclarum.org/post/1520024382/interfaces-caches-cross-platform
‣ Post Antonio Ganci:http://blogs.ugidotnet.org/AntonioGanci/archive/2010/04/19/un-approccio-per-ottenere-una-architettura-malleabile.aspx34
Accesso ai dati locali (1/2)
35
Accesso ai dati locali (1/2)
• SQLite‣ portabilità in altre piattaforme??‣ Repository / DAO pattern? ORM?
35
Accesso ai dati locali (1/2)
• SQLite‣ portabilità in altre piattaforme??‣ Repository / DAO pattern? ORM?
• Tipi di accesso‣ ADO.NET‣ API di SQLite dirette‣ ORM (es. Vici CoolStorage)
35
Accesso ai dati locali (2/2)
• Performance Tips‣ DataReader via GetString, GetInt, ..
http://www.bayshield.com/2010/6/29/monotouch-sqlite-performance-tip
‣ Uso di transazioni e connection pooling
‣ Quantificazione costi reflection (se usata)http://praeclarum.org/post/1572668275/quantifying-reflections-slowdown-in-sqlite-net
36
Accesso ai dati remoti
37
Accesso ai dati remoti
• ASMX Web Service e WCFcome in Silverlight
37
Accesso ai dati remoti
• ASMX Web Service e WCFcome in Silverlight
• REST via HttpRequest / Response
37
Accesso ai dati remoti
• ASMX Web Service e WCFcome in Silverlight
• REST via HttpRequest / Response
• JSON‣ https://github.com/chrisntr/Newtonsoft.Json
37
IoC / DI
• Diverse librerie‣ OpenNETCF.IoC
‣ Funq, PicoContainer, TinyIoC
‣ http://monotouch.info/Tags/IoC
38
Unit Testing
• Attenti a creare un progetto NUnit che ne referenzia uno MonoTouch!
• Testare la business logic / DAL
• Testare l’”MVC” Apple:‣ Supervisor Controller
http://ben.phegan.name/index.php/2011/02/28/monotouch-and-unit-testing/39
Alcuni framework di supporto
40
Alcuni framework di supporto
• MonoTouch.Dialog‣ https://github.com/migueldeicaza/MonoTouch.Dialog
40
Alcuni framework di supporto
• MonoTouch.Dialog‣ https://github.com/migueldeicaza/MonoTouch.Dialog
• MonoCross‣ Stile MVC di ASP.NET MVC‣ http://vagabondrev.org/2011/04/20/monocross-the-technology/
‣ http://code.google.com/p/monocross/
40
Alcuni framework di supporto
• MonoTouch.Dialog‣ https://github.com/migueldeicaza/MonoTouch.Dialog
• MonoCross‣ Stile MVC di ASP.NET MVC‣ http://vagabondrev.org/2011/04/20/monocross-the-technology/
‣ http://code.google.com/p/monocross/
• ReactiveUX per MonoTouch‣ http://code.google.com/p/proactive-framework/40
What else?
41
What else?
• UIAlertView non “asincrona”‣ magari qualcosa con le coroutine, a la
Caliburn?
41
Domande?
42
Grazie!
43