Programmiamo iPhone e iPad (e non solo!) con MonoTouch

Preview:

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‣ steott@gmail.com‣ @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‣ steott@gmail.com‣ @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

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

‣ 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

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

Recommended