Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

60
Sviluppo di app mobile con MonoTouch e Mono for Android Stefano Ottaviani [email protected] @ste8 1

description

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.

Transcript of Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Page 1: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Sviluppo di app mobile con MonoTouch e

Mono for Android

• Stefano Ottaviani‣ [email protected]‣ @ste8

1

Page 2: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Cos’è TechBar

“Se ascolto dimentico, se vedo ricordo, se faccio capisco” – Confucio

Bar

2

Page 3: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 4: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

4

Page 5: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

5

Page 6: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 7: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 8: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Considerazioni sullo sviluppo

Cross Platform

8

8

Page 9: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

La UI va rifatta...o no? (1/5)

Esempio MIX11 App http://tinyurl.com/442vt3t

iPhone

9

9

Page 10: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

La UI va rifatta...o no? (2/5)

Esempio MIX11 App http://tinyurl.com/442vt3t

WP7

10

10

Page 11: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

La UI va rifatta...o no? (3/5)

Esempio MIX11 App http://tinyurl.com/442vt3t

Android

11

11

Page 12: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

La UI va rifatta...o no? (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

12

12

Page 13: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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 è

molto costoso!13

13

Page 14: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 15: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Fonte: http://www.agiledossier.com/doyouwanttocreatamobileapp15

15

Page 16: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Con la diffusione di HTML5 e js...

ok, ma fare tutto in HTML5/JS è come fare cibo vegerariano perchè

così lo mangiano (quasi) tutti(cit. @alexbream)

16

Oh ragazzi! Ma siam pazzi?

16

Page 17: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 18: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

• nicely layered architecture

• non-presentation logic which is easy to get under solid test coverage

18

Side effect del“Cross-platform Core” approach

Fonte: http://www.agiledossier.com/doyouwanttocreatamobileapp

18

Page 19: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Methods19

19

Page 20: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Cos’è MonoTouch? (2/3)

• MonoDevelop + XCODE 4 per UI

• Cosa c’è‣ C# 4‣ Garbage Collection‣ LINQ / Lamba‣ Generics‣ Reflection / Static Reflection‣ WCF ‣ Parallel Framework‣ Async nelle prossime versioni (Mono 2.11)20

20

Page 21: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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?21

21

Page 22: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 23: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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!

23

23

Page 24: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 25: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Chi c’è dietro a MonoTouch e

Mono for Android?

25

25

Page 26: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Quale sarà il futuro di MT?

26

All  technology  roadmaps  remain  

intactYou  should,  yes.  It  will  

be  compaDble.

Can  we  conDnue  working  with  MonoTouch?

No Panic

1 anno fa...

26

Page 27: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 28: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 29: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 30: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 31: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Xamarin oggi (5/5)

31

Fonte: http://www.visionmobile.com/blog/2012/02/crossplatformtools/

31

Page 32: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Come abbiamo organizzato il nostro progetto?

32

32

Page 33: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Architettura

• Server (Web API, IIS)

• Client (iPad)

• Biz e DAL in comune

• Tool ‘home made’ per sincronizzare i progetti

33

33

Page 34: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 35: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Ingredienti per iniziare

• Un computer Mac con Mac OS X

• iPhone SDK

• MonoTouch (+ Mono)– Simulator only (free), studenti (99$),

Professional (399$), Enterprise (999$)

• MonoDevelop35

35

Page 36: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Configurazione ambiente

• Boot Camp + Parallels = stessa (ma unica) partizione Windows

• Shortcuts per ‣ Mac OS X‣ Windows da Parallels‣ MonoDevelop

36

36

Page 37: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 38: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Visual Studio come IDE (2/2)

• Soluzione funzionante:‣ https://github.com/follesoe/VSMonoTouch ‣ (anche su nuget)

38

38

Page 39: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Poniamo le basi...

...per costruire la prima App!

39

39

Page 40: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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/

40

40

Page 41: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

41

41

Page 42: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 43: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

ViewControllers

• Basato su MVC (o una specie...)

• Creazione di app con più screen‣ Navigation‣ Resize, orientamento

• “Infrastruttura” per UI Controls‣ es. TableViewController

43

43

Page 44: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Esempi di ViewController (1/4)

TabBarController

44

44

Page 45: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Esempi di ViewController (2/4)

NavigationController

45

45

Page 46: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Esempi di ViewController (3/4)

SplitViewController / PopoverController

46

46

Page 47: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Esempi di ViewController (4/4)

TableViewController

47

47

Page 48: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

2° Demo!• Creare una form con UIViewController• Resize e rotazione form• Anchor e docking• App con più form grazie ai ViewController.

48

48

Page 49: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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.aspx49

49

Page 50: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 51: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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-net51

51

Page 52: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Accesso ai dati remoti

• ASMX Web Service e WCFcome in Silverlight

• REST via HttpRequest / Response

• JSON‣ https://github.com/chrisntr/Newtonsoft.Json

52

52

Page 53: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

IoC / DI

• Diverse librerie‣ TinyIoC (funziona :)

‣ OpenNETCF.IoC

‣ Funq, PicoContainer

‣ http://monotouch.info/Tags/IoC53

53

Page 54: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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

Page 55: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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 support - for iPad, for Windows Metro and for Android

55

55

Page 56: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

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 API56

56

Page 57: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Alcuni tool di supporto

• Workspace Reloader‣ http://bit.ly/JM3FZe

• SourceTree‣ http://www.sourcetreeapp.com/

57

57

Page 58: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Troubleshooting

• Eccezioni compilatore AOT

• Altro?

58

58

Page 59: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Domande?

59

59

Page 60: Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Grazie!

60

60