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?




   All	
  technology	
  
roadmaps	
  remain	
  
          intact


                 2
Quale sarà il futuro di MT?




   All	
  technology	
  
roadmaps	
  remain	
  
          intact


                 2
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
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
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
       4
  ‣        blogs.ugidotnet.org/ste8
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 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
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!
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
    13

      Methods
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
     14
  ‣ Parallel Framework
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
     15
• Prezzo:pro o contro?
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
     17
  ✴Stesse possibilità di Objective-C!
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)

• MonoDevelop
   20
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
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
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:
       25
  ‣   http://www.kevfoo.com/2011/05/quick-primer-cocoa-and-cocoa-touch/
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, ...)
     26
  ‣ Base per User Control! No ViewController
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




    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.aspx
    34
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 WCF
  come in Silverlight




   37
Accesso ai dati remoti
• ASMX Web Service e WCF
  come in Silverlight

• REST via HttpRequest / Response




    37
Accesso ai dati remoti
• ASMX Web Service e WCF
  come 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
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
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

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

  • 1.
    Programmiamo iPhone e iPad(e non solo!) con • Stefano Ottaviani ‣ steott@gmail.com ‣ @ste8
  • 2.
    Quale sarà ilfuturo di MT? 2
  • 3.
    Quale sarà ilfuturo di MT? 2
  • 4.
    Quale sarà ilfuturo di MT? 2
  • 5.
    Quale sarà ilfuturo di MT? All  technology   roadmaps  remain   intact 2
  • 6.
    Quale sarà ilfuturo di MT? All  technology   roadmaps  remain   intact 2
  • 7.
    Quale sarà ilfuturo 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à ilfuturo 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
  • 9.
  • 10.
    Conosciamoci un po’ •Chi utilizza già MonoTouch? 3
  • 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
  • 14.
  • 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
  • 18.
  • 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
  • 22.
  • 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 UIva cmq rifatto (1/5) Esempio MIX11 App http://tinyurl.com/442vt3t iPhone 7
  • 27.
    Il layer UIva cmq rifatto (2/5) Esempio MIX11 App http://tinyurl.com/442vt3t WP7 8
  • 28.
    Il layer UIva cmq rifatto (3/5) Esempio MIX11 App http://tinyurl.com/442vt3t Android 9
  • 29.
    Il layer UIva 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 UIva 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!
  • 31.
  • 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
  • 35.
  • 36.
    Cos’è MonoTouch? (1/3) •Come Mono... ma diverso! ‣ Suite per portare C# e .NET su iPhone! 13
  • 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
  • 38.
  • 39.
    Cos’è MonoTouch? (2/3) •MonoDevelop + Interface Builder ‣ Lavori in corso per IB 4 14
  • 40.
    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 14 ‣ Parallel Framework
  • 41.
  • 42.
    Cos’è MonoTouch? (3/3) •Thin layer sopra le API native ‣ rapidità di aggiornamento all’iOS SDK ‣ binding x utilizzo librerie Objective-C 15
  • 43.
    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
  • 44.
    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 • Prezzo:pro o contro?
  • 45.
    Soddisfa i mieibisogni? (1/3) 16
  • 46.
    Soddisfa i mieibisogni? (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 mieibisogni? (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
  • 48.
    Soddisfa i mieibisogni? (2/3) 17
  • 49.
    Soddisfa i mieibisogni? (2/3) • UX usabile e attraente! ✴Stesse possibilità di Objective-C (IB) 17
  • 50.
    Soddisfa i mieibisogni? (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 mieibisogni? (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!
  • 52.
    Soddisfa i mieibisogni? (3/3) 18
  • 53.
    Soddisfa i mieibisogni? (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
  • 54.
  • 55.
    Risorse per iniziare •2 Video da NDC 2010 ‣ http://tekpub.com/conferences/ndc2010 19
  • 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
  • 59.
  • 60.
    Ingredienti per iniziare •Un computer Mac con Mac OS X 20
  • 61.
    Ingredienti per iniziare •Un computer Mac con Mac OS X • iPhone SDK 20
  • 62.
    Ingredienti per iniziare •Un computer Mac con Mac OS X • iPhone SDK • MonoTouch (+ Mono) 20
  • 63.
    Ingredienti per iniziare •Un computer Mac con Mac OS X • iPhone SDK • MonoTouch (+ Mono) • MonoDevelop 20
  • 64.
  • 65.
    Configurazione ambiente • BootCamp + Parallels = stessa (ma unica) partizione Windows 21
  • 66.
    Configurazione ambiente • BootCamp + Parallels = stessa (ma unica) partizione Windows • Shortcuts per ‣ Mac OS X ‣ Windows da Parallels ‣ MonoDevelop ‣ Info a breve nel blog 21
  • 67.
    Visual Studio comeIDE (1/2) 22
  • 68.
    Visual Studio comeIDE (1/2) • Perchè vorrei farlo? ‣ IDE migliore / Resharper, ... 22
  • 69.
    Visual Studio comeIDE (1/2) • Perchè vorrei farlo? ‣ IDE migliore / Resharper, ... • Si può fare! (cit) ‣ o quasi.... solo build, NO RUN 22
  • 70.
    Visual Studio comeIDE (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 comeIDE (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
  • 72.
    Poniamo le basi... ...per costruire la prima App! 24
  • 73.
    Cocoa Touch: ilFramework 25
  • 74.
    Cocoa Touch: ilFramework • Cocoa : .NET FX = Objective-C : C# 25
  • 75.
    Cocoa Touch: ilFramework • Cocoa : .NET FX = Objective-C : C# • Foundation ‣ objects, memory, ... 25
  • 76.
    Cocoa Touch: ilFramework • Cocoa : .NET FX = Objective-C : C# • Foundation ‣ objects, memory, ... • UIKit, GameKit, MapKit, ... 25
  • 77.
    Cocoa Touch: ilFramework • Cocoa : .NET FX = Objective-C : C# • Foundation ‣ objects, memory, ... • UIKit, GameKit, MapKit, ... • Intro per .Net Dev: 25 ‣ http://www.kevfoo.com/2011/05/quick-primer-cocoa-and-cocoa-touch/
  • 78.
  • 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! • UsareMonoDevelop (anche più istanze) • Creare UI con / senza Interface Builder • Utilizzo di immagini / risorse • Creazione di custom control con UIView • Utilizziamo le tabelle 27
  • 83.
  • 84.
    ViewControllers • Basato suMVC (o una specie...) 28
  • 85.
    ViewControllers • Basato suMVC (o una specie...) • Creazione di app con più screen ‣ Navigation ‣ Resize, orientamento 28
  • 86.
    ViewControllers • Basato suMVC (o una specie...) • Creazione di app con più screen ‣ Navigation ‣ Resize, orientamento • “Infrastruttura” per UI Controls ‣ es. TableViewController 28
  • 87.
    Esempi di ViewController (1/4) TabBarController 29
  • 88.
    Esempi di ViewController (2/4) NavigationController 30
  • 89.
    Esempi di ViewController (3/4) SplitViewController / PopoverController 31
  • 90.
    Esempi di ViewController (4/4) TableViewController 32
  • 91.
    2° Demo! • Creareuna form con UIViewController • Resize e rotazione form • Anchor e docking • App con più form grazie ai ViewController. 33
  • 92.
  • 93.
    Altri approcci perUI • Tentativi di MVVM 34
  • 94.
    Altri approcci perUI • Tentativi di MVVM • DSL? (Domain-specific language) 34
  • 95.
    Altri approcci perUI • Tentativi di MVVM • DSL? (Domain-specific language) ‣ iCircuit: http://praeclarum.org/post/1520024382/interfaces- caches-cross-platform 34
  • 96.
    Altri approcci perUI • 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
  • 97.
    Accesso ai datilocali (1/2) 35
  • 98.
    Accesso ai datilocali (1/2) • SQLite ‣ portabilità in altre piattaforme?? ‣ Repository / DAO pattern? ORM? 35
  • 99.
    Accesso ai datilocali (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 datilocali (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
  • 101.
    Accesso ai datiremoti 37
  • 102.
    Accesso ai datiremoti • ASMX Web Service e WCF come in Silverlight 37
  • 103.
    Accesso ai datiremoti • ASMX Web Service e WCF come in Silverlight • REST via HttpRequest / Response 37
  • 104.
    Accesso ai datiremoti • 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 • Attentia 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
  • 107.
  • 108.
    Alcuni framework disupporto • MonoTouch.Dialog ‣ https://github.com/migueldeicaza/MonoTouch.Dialog 40
  • 109.
    Alcuni framework disupporto • 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 disupporto • 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
  • 111.
  • 112.
    What else? • UIAlertViewnon “asincrona” ‣ magari qualcosa con le coroutine, a la Caliburn? 41
  • 113.
  • 114.