Dopo aver visto nei precedenti techbar jQuery Mobile e PhoneGap, proseguiamo l'esplorazione dei tool per lo sviluppo di applicazioni mobile con MonoTouch e Mono for Android.
Questi strumenti hanno delle caratteristiche che li differenziano dagli altri: vedremo quali sono e quali vantaggi ci può dare la loro adozione, o quando può aver senso il loro utilizzo in affiancamento ad altre tecnologie, come quelle basate su html5.
In particolare, verrà illustrata l'esperienza di oltre un anno di utilizzo di MonoTouch per lo sviluppo di applicazioni LOB (Line of Business), dalla quale si possono ricavare consigli per un utilizzo più efficace.
Anche se MonoTouch e Mono for Android non sono direttamente cross-platform, cercheremo inoltre di dare uno sguardo a come organizzare i nostri progetti in modo tale da riutilizzare gran parte del codice tra più piattaforme (iOS, Android, Windows Phone 7, e perché no, desktop e netbook), col minor sforzo possibile.
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Sviluppo di applicazioni mobile con MonoTouch e Mono for Android
1. Sviluppo di app mobile con
MonoTouch e
Mono for Android
• Stefano Ottaviani
‣ steott@gmail.com
‣ @ste8
1
2. Cos’è TechBar
Bar
“Se ascolto dimentico, se vedo
ricordo, se faccio capisco” – Confucio
2
3. Conosciamoci un po’
• Chi ha utilizzato MonoTouch o Mono
for Android? In produzione? Chi ha
idea di cosa si tratta?
• Che ambiente avete dietro?
• Chi conosce già gli ambienti nativi
iOS e Android?
• Chi conosce il .NET Framework?
3
3
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
‣ steott@gmail.com
‣ @ste8
4
‣ blogs.ugidotnet.org/ste8
4
6. 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!
6
6
7. 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
7
7
9. La UI va rifatta...o no? (1/5)
Esempio MIX11 App
http://tinyurl.com/442vt3t
iPhone
9
9
10. La UI va rifatta...o no? (2/5)
Esempio MIX11 App
http://tinyurl.com/442vt3t
WP7
10
10
11. La UI va rifatta...o no? (3/5)
Esempio MIX11 App
http://tinyurl.com/442vt3t
Android
11
11
12. La UI va rifatta...o no? (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 12 that platform, with a experience design
for
based on that platforms interaction style
12
13. La UI va rifatta...o no? (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 è
13
molto costoso!
13
14. Che strumenti abbiamo? (1/2)
• Objective-C (nativo per iOS)
‣ learning curve ulteriore x il linguaggio
‣ target: “solo” iPhone, iPad, Mac OS X
• Java (nativo per Android)
‣ minore learning curve x il linguaggio
‣ target: dove gira Java (no iOS)
14
14
15. Che strumenti abbiamo? (2/2)
• HTML 5 + JavaScript
‣ “Pure Web” (jQuery Mobile, ...)
‣ “Native Wrapper” (PhoneGap)
• “Write Once Run Anywhere”
‣ es. Titanium Appcelerator
• ”Cross-platform Core”
‣ es. MonoTouch & Mono for Android
15
Fonte: http://www.agiledossier.com/doyouwanttocreatamobileapp
15
16. Con la diffusione di HTML5 e js...
pazzi?
Ma si am
aga zzi!
Oh r
ok, ma fare tutto in HTML5/JS è
come fare cibo vegerariano perchè
così lo mangiano (quasi) tutti
16
(cit. @alexbream)
16
17. Quando usare
“Cross-platform Core” approach
If your application will contain a
significant amount of business
logic or will have lots of back-end
service interatactions (rather than
being focussing mostly on
presentation logic) but you still
want a very native feel then a
Cross-Platform Core may be the best
way to go.
17
17
18. Side effect del
“Cross-platform Core” approach
• nicely layered architecture
• non-presentation logic which is easy
to get under solid test coverage
18 Fonte: http://www.agiledossier.com/doyouwanttocreatamobileapp
18
19. 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
19
Methods
19
21. 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
21
• Prezzo:pro o contro?
21
22. 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!
22
22
23. 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
23
✴Stesse possibilità di Objective-C!
23
24. 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!
✴Ora è fornito anche un profiler
24
24
26. 1 anno fa...
Quale sarà il futuro di MT?
No P anic
Can
we
conDnue
working
with
MonoTouch?
All
technology
roadmaps
remain
intact
You
should,
yes.
It
will
be
compaDble.
26
26
27. Xamarin oggi (1/5)
• > 30 persone (di cui circa 20 del
team Mono)
• Diverse posizioni aperte (Developer
Evangelist/Advocate, Mobile Dev, ...)
• “We have competitive salary and
benefits. We’re growing fast and are
cash-flow positive”
27
27
28. Xamarin oggi (2/5)
• Numerosi rilasci
(es. MonoTouch dalla 4.0.4.1 di Luglio alla 5.3.*)
• Compatibile in ~ 24 h dal rilascio di
SDK Apple e Android
• Mailing list abbastanza frequentata
28
28
29. Xamarin oggi (3/5)
• “Our main products are Mono on iOS
and Mono on Android.” ...
• ... e molti altri progetti
‣ http://tirania.org/blog/archive/2011/Dec-21.html
‣ Mono, Sony PSSuite, Google Native Client, Compiler as a
Service, Unity3D, MonoGame, MonoDevelop,
XobotOS ...
29
29
30. Xamarin oggi (4/5)
• Xamarin Identified as a Leader in Mobile
Cross-Platform Application Development
Tools
30 Fonte: http://www.visionmobile.com/blog/2012/02/crossplatformtools/
30
31. Xamarin oggi (5/5)
31
Fonte: http://www.visionmobile.com/blog/2012/02/crossplatformtools/
31
33. Architettura
• Server (Web API, IIS)
• Client (iPad)
• Biz e DAL in comune
• Tool ‘home made’ per sincronizzare i
progetti
33
33
34. Risorse per iniziare
• 2 Video da NDC 2010
‣ http://tekpub.com/conferences/ndc2010
• Stack Overflow / Mailing List
• Esempi: galleria su xamarin.com
• Libri
34
34
35. Ingredienti per iniziare
• Un computer Mac con Mac OS X
• iPhone SDK
• MonoTouch (+ Mono)
– Simulator only (free), studenti (99$),
Professional (399$), Enterprise (999$)
• MonoDevelop
35
35
36. Configurazione ambiente
• Boot Camp + Parallels =
stessa (ma unica) partizione Windows
• Shortcuts per
‣ Mac OS X
‣ Windows da Parallels
‣ MonoDevelop
36
36
37. 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
37
37
38. Visual Studio come IDE (2/2)
• Soluzione funzionante:
‣ https://github.com/follesoe/VSMonoTouch
‣ (anche su nuget)
38
38
40. Cocoa Touch: il Framework
• Cocoa : .NET FX = Objective-C : C#
• Foundation
‣ objects, memory, ...
• UIKit, GameKit, MapKit, ...
• Intro per .Net Dev:
40
‣ http://www.kevfoo.com/2011/05/quick-primer-cocoa-and-cocoa-touch/
40
41. 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, ...)
41
‣ Base per User Control! No ViewController
41
42. 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
42
42
43. ViewControllers
• Basato su MVC (o una specie...)
• Creazione di app con più screen
‣ Navigation
‣ Resize, orientamento
• “Infrastruttura” per UI Controls
‣ es. TableViewController
43
43
48. 2° Demo!
• Creare una form con UIViewController
• Resize e rotazione form
• Anchor e docking
• App con più form grazie ai ViewController.
48
48
49. 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
49
49
50. 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)
50
50
51. 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
51
51
52. Accesso ai dati remoti
• ASMX Web Service e WCF
come in Silverlight
• REST via HttpRequest / Response
• JSON
‣ https://github.com/chrisntr/Newtonsoft.Json
52
52
53. IoC / DI
• Diverse librerie
‣ TinyIoC (funziona :)
‣ OpenNETCF.IoC
‣ Funq, PicoContainer
‣ http://monotouch.info/Tags/IoC
53
53
54. Unit Testing
• Ora supporto per girare su device
• Testare la business logic / DAL
• Testare l’”MVC” Apple:
‣ Supervisor Controller
http://ben.phegan.name/index.php/2011/02/28/
monotouch-and-unit-testing/
54
54
55. Alcune librerie di supporto (1/2)
• MonoTouch.Dialog
‣ https://github.com/migueldeicaza/MonoTouch.Dialog
• MonoCross
‣ Stile MVC di ASP.NET MVC
‣ http://code.google.com/p/monocross/
• MvvmCross
‣ https://github.com/slodge/MvvmCross
‣ ATTENZIONE: Future direction (Under consideration): More tablet
55
support - for iPad, for Windows Metro and for Android
55
56. Alcune librerie di supporto (1/2)
• ReactiveUX per MonoTouch
‣ http://code.google.com/p/proactive-framework/
• Localizzazione
‣ https://github.com/rdio/vernacular
• Event Aggregator (Message Broker)
‣ http://merbla.blogspot.com/2011/03/monotouch-and-eventaggregator.html
• Xamarin Mobile API
56
56
57. Alcuni tool di supporto
• Workspace Reloader
‣ http://bit.ly/JM3FZe
• SourceTree
‣ http://www.sourcetreeapp.com/
57
57