Download - Sviluppo di applicazioni mobile con MonoTouch e Mono for Android

Transcript
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