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.
5. Quale sarà il futuro di MT?
All
technology
roadmaps
remain
intact
2
6. Quale sarà il futuro di MT?
All
technology
roadmaps
remain
intact
2
7. Quale sarà il futuro di MT?
Can
we
con;nue
working
with
MonoTouch?
All
technology
roadmaps
remain
intact
You
should,
yes.
It
will
be
compa;ble.
2
8. Quale sarà il futuro di MT?
No P anic
Can
we
con;nue
working
with
MonoTouch?
All
technology
roadmaps
remain
intact
You
should,
yes.
It
will
be
compa;ble.
2
11. Conosciamoci un po’
• Chi utilizza già MonoTouch?
• Chi ha idea di cosa si tratta?
3
12. Conosciamoci un po’
• Chi utilizza già MonoTouch?
• Chi ha idea di cosa si tratta?
• Chi conosce già Objective-C?
3
13. 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
15. Chi sono?
• Dev / SEng @ KILOG Srl
‣ Da Palm OS a iPad, passando per Windows CE / Mobile
(C++, .NET CF)
4
16. Chi sono?
• Dev / SEng @ KILOG Srl
‣ Da Palm OS a iPad, passando per Windows CE / Mobile
(C++, .NET CF)
• Communities
‣ DotNetMarche, XPUG Marche
4
17. Chi sono?
• Dev / SEng @ KILOG Srl
‣ Da Palm OS a iPad, passando per Windows CE / Mobile
(C++, .NET CF)
• Communities
‣ DotNetMarche, XPUG Marche
• Contatti
‣ steott@gmail.com
‣ @ste8
4
‣ blogs.ugidotnet.org/ste8
19. Cosa devo sviluppare? (1/2)
• App LOB (Line of Business)
‣ Online e soprattutto OFFLINE
✴Non si vive di soli servizi!
5
20. 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
21. 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
23. Cosa devo sviluppare? (2/2)
• Performante
‣ L’exe non deve essere per forza piccolo
6
24. Cosa devo sviluppare? (2/2)
• Performante
‣ L’exe non deve essere per forza piccolo
• Controllo sul deploy dell’app
6
25. 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
26. Il layer UI va cmq rifatto (1/5)
Esempio MIX11 App
http://tinyurl.com/442vt3t
iPhone
7
27. Il layer UI va cmq rifatto (2/5)
Esempio MIX11 App
http://tinyurl.com/442vt3t
WP7
8
28. Il layer UI va cmq rifatto (3/5)
Esempio MIX11 App
http://tinyurl.com/442vt3t
Android
9
29. Il layer UI va cmq rifatto (4/5)
Ipse dixit: Martin Fowler
http://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 10 that platform, with a experience design
for
based on that platforms interaction style
30. 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 è
11
molto costoso!
32. Che strumenti abbiamo?
• Objective-C
‣ learning curve ulteriore x il linguaggio
‣ target: “solo” iPhone, iPad, Mac OS X
12
33. 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
34. 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
37. 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
13
Methods
46. 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
47. 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
49. Soddisfa i miei bisogni? (2/3)
• UX usabile e attraente!
✴Stesse possibilità di Objective-C (IB)
17
50. 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
51. 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
17
✴Stesse possibilità di Objective-C!
53. 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
56. Risorse per iniziare
• 2 Video da NDC 2010
‣ http://tekpub.com/conferences/ndc2010
• Stack Overflow / Mailing List
19
57. Risorse per iniziare
• 2 Video da NDC 2010
‣ http://tekpub.com/conferences/ndc2010
• Stack Overflow / Mailing List
• Esempi: TweetStation
19
58. Risorse per iniziare
• 2 Video da NDC 2010
‣ http://tekpub.com/conferences/ndc2010
• Stack Overflow / Mailing List
• Esempi: TweetStation
• Libri
19
66. 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
68. Visual Studio come IDE (1/2)
• Perchè vorrei farlo?
‣ IDE migliore / Resharper, ...
22
69. Visual Studio come IDE (1/2)
• Perchè vorrei farlo?
‣ IDE migliore / Resharper, ...
• Si può fare! (cit)
‣ o quasi.... solo build, NO RUN
22
70. 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
71. 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
79. Window e Views
• Application / AppDelegate
‣ main, ...
‣ 10 secondi per caricare!
26
80. Window e Views
• Application / AppDelegate
‣ main, ...
‣ 10 secondi per caricare!
• Window
‣ 1 sola per App!!! Poi coi ViewControllers...
26
81. 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, ...)
26
‣ Base per User Control! No ViewController
82. 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
85. ViewControllers
• Basato su MVC (o una specie...)
• Creazione di app con più screen
‣ Navigation
‣ Resize, orientamento
28
86. ViewControllers
• Basato su MVC (o una specie...)
• Creazione di app con più screen
‣ Navigation
‣ Resize, orientamento
• “Infrastruttura” per UI Controls
‣ es. TableViewController
28
94. Altri approcci per UI
• Tentativi di MVVM
• DSL? (Domain-specific language)
34
95. Altri approcci per UI
• Tentativi di MVVM
• DSL? (Domain-specific language)
‣ iCircuit:
http://praeclarum.org/post/1520024382/interfaces-
caches-cross-platform
34
96. 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.aspx
34
98. Accesso ai dati locali (1/2)
• SQLite
‣ portabilità in altre piattaforme??
‣ Repository / DAO pattern? ORM?
35
99. 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
100. 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
102. Accesso ai dati remoti
• ASMX Web Service e WCF
come in Silverlight
37
103. Accesso ai dati remoti
• ASMX Web Service e WCF
come in Silverlight
• REST via HttpRequest / Response
37
104. Accesso ai dati remoti
• ASMX Web Service e WCF
come in Silverlight
• REST via HttpRequest / Response
• JSON
‣ https://github.com/chrisntr/Newtonsoft.Json
37
105. IoC / DI
• Diverse librerie
‣ OpenNETCF.IoC
‣ Funq, PicoContainer, TinyIoC
‣ http://monotouch.info/Tags/IoC
38
106. 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
108. Alcuni framework di supporto
• MonoTouch.Dialog
‣ https://github.com/migueldeicaza/MonoTouch.Dialog
40
109. 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
110. 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