SlideShare a Scribd company logo
1 of 114
Download to read offline
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

More Related Content

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

Smau milano 2012 arena social media davide-senatore
Smau milano 2012   arena social media davide-senatoreSmau milano 2012   arena social media davide-senatore
Smau milano 2012 arena social media davide-senatoreSMAU
 
Openmoko - La costruzione di un “Telefoninux”
Openmoko - La costruzione di un “Telefoninux”Openmoko - La costruzione di un “Telefoninux”
Openmoko - La costruzione di un “Telefoninux”Marco Trevisan
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld DevicesGWTcon
 
Sviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapSviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapDotNetMarche
 
Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !Gianfranco Pulitano
 
Touch&play framework
Touch&play frameworkTouch&play framework
Touch&play frameworkCSP Scarl
 
Crossdev sdk/tools: devil's deception
Crossdev sdk/tools: devil's deceptionCrossdev sdk/tools: devil's deception
Crossdev sdk/tools: devil's deceptionLuciano Colosio
 
Crossdev sdk/tools: devil's deception - Luciano Colosio
Crossdev sdk/tools: devil's deception - Luciano ColosioCrossdev sdk/tools: devil's deception - Luciano Colosio
Crossdev sdk/tools: devil's deception - Luciano ColosioWhymca
 
Festivalmente: Getting Things done
Festivalmente: Getting Things doneFestivalmente: Getting Things done
Festivalmente: Getting Things doneVincenzo Garambone
 
Define & design apps for success
Define & design apps for successDefine & design apps for success
Define & design apps for successAcrmnet s.r.l.
 
Applicazioni iPhone: un mercato per tutti?
Applicazioni iPhone: un mercato per tutti?Applicazioni iPhone: un mercato per tutti?
Applicazioni iPhone: un mercato per tutti?Omar Cafini
 
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceDiego La Monica
 
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
 Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progettoMicrosoft Mobile Developer
 
Sviluppare una app mobile net oriented
Sviluppare una app mobile net orientedSviluppare una app mobile net oriented
Sviluppare una app mobile net orientedAlessandro Morvillo
 
Html5 apps - GWT oriented
Html5 apps - GWT orientedHtml5 apps - GWT oriented
Html5 apps - GWT orientedfirenze-gtug
 
Flutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaformaFlutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaformaCommit University
 

Similar to Programmiamo iPhone e iPad (e non solo!) con MonoTouch (20)

Mobile development .net
Mobile development .netMobile development .net
Mobile development .net
 
Adesso In Onda
Adesso In OndaAdesso In Onda
Adesso In Onda
 
Smau milano 2012 arena social media davide-senatore
Smau milano 2012   arena social media davide-senatoreSmau milano 2012   arena social media davide-senatore
Smau milano 2012 arena social media davide-senatore
 
Openmoko - La costruzione di un “Telefoninux”
Openmoko - La costruzione di un “Telefoninux”Openmoko - La costruzione di un “Telefoninux”
Openmoko - La costruzione di un “Telefoninux”
 
platforms
platformsplatforms
platforms
 
Apple App World
Apple App WorldApple App World
Apple App World
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
 
Sviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapSviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGap
 
Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !Mr.Robot - How To Make a Robot !
Mr.Robot - How To Make a Robot !
 
Touch&play framework
Touch&play frameworkTouch&play framework
Touch&play framework
 
Crossdev sdk/tools: devil's deception
Crossdev sdk/tools: devil's deceptionCrossdev sdk/tools: devil's deception
Crossdev sdk/tools: devil's deception
 
Crossdev sdk/tools: devil's deception - Luciano Colosio
Crossdev sdk/tools: devil's deception - Luciano ColosioCrossdev sdk/tools: devil's deception - Luciano Colosio
Crossdev sdk/tools: devil's deception - Luciano Colosio
 
Festivalmente: Getting Things done
Festivalmente: Getting Things doneFestivalmente: Getting Things done
Festivalmente: Getting Things done
 
Define & design apps for success
Define & design apps for successDefine & design apps for success
Define & design apps for success
 
Applicazioni iPhone: un mercato per tutti?
Applicazioni iPhone: un mercato per tutti?Applicazioni iPhone: un mercato per tutti?
Applicazioni iPhone: un mercato per tutti?
 
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
 
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
 Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
Le basi per lo sviluppo su Windows Phone tool, SDK, il primo progetto
 
Sviluppare una app mobile net oriented
Sviluppare una app mobile net orientedSviluppare una app mobile net oriented
Sviluppare una app mobile net oriented
 
Html5 apps - GWT oriented
Html5 apps - GWT orientedHtml5 apps - GWT oriented
Html5 apps - GWT oriented
 
Flutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaformaFlutter: Google alla conquista del mobile multi piattaforma
Flutter: Google alla conquista del mobile multi piattaforma
 

More from Stefano Ottaviani

Accessibility Days: esperienze e condivisioni per l'accessibilità
Accessibility Days: esperienze e condivisioni per l'accessibilitàAccessibility Days: esperienze e condivisioni per l'accessibilità
Accessibility Days: esperienze e condivisioni per l'accessibilitàStefano Ottaviani
 
Come organizzare un evento in cui nessuno sia escluso (versione ICM Summit)
Come organizzare un evento in cui nessuno sia escluso (versione ICM Summit)Come organizzare un evento in cui nessuno sia escluso (versione ICM Summit)
Come organizzare un evento in cui nessuno sia escluso (versione ICM Summit)Stefano Ottaviani
 
Introduzione allo Unit Testing
Introduzione allo Unit TestingIntroduzione allo Unit Testing
Introduzione allo Unit TestingStefano Ottaviani
 
Le meta-community: quando l'unione fa la forza
Le meta-community: quando l'unione fa la forzaLe meta-community: quando l'unione fa la forza
Le meta-community: quando l'unione fa la forzaStefano Ottaviani
 
Visual Studio 2015: novità per gli sviluppatori iOS, Android e Cross-Platform
Visual Studio 2015: novità per gli sviluppatori iOS, Android e Cross-PlatformVisual Studio 2015: novità per gli sviluppatori iOS, Android e Cross-Platform
Visual Studio 2015: novità per gli sviluppatori iOS, Android e Cross-PlatformStefano Ottaviani
 
Save ourselves with unit testing :)
Save ourselves with unit testing :)Save ourselves with unit testing :)
Save ourselves with unit testing :)Stefano Ottaviani
 
Utilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software DeveloperUtilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software DeveloperStefano Ottaviani
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailStefano Ottaviani
 
Generazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETGenerazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETStefano Ottaviani
 

More from Stefano Ottaviani (11)

Accessibility Days: esperienze e condivisioni per l'accessibilità
Accessibility Days: esperienze e condivisioni per l'accessibilitàAccessibility Days: esperienze e condivisioni per l'accessibilità
Accessibility Days: esperienze e condivisioni per l'accessibilità
 
Come organizzare un evento in cui nessuno sia escluso (versione ICM Summit)
Come organizzare un evento in cui nessuno sia escluso (versione ICM Summit)Come organizzare un evento in cui nessuno sia escluso (versione ICM Summit)
Come organizzare un evento in cui nessuno sia escluso (versione ICM Summit)
 
Introduzione allo Unit Testing
Introduzione allo Unit TestingIntroduzione allo Unit Testing
Introduzione allo Unit Testing
 
Le meta-community: quando l'unione fa la forza
Le meta-community: quando l'unione fa la forzaLe meta-community: quando l'unione fa la forza
Le meta-community: quando l'unione fa la forza
 
Visual Studio 2015: novità per gli sviluppatori iOS, Android e Cross-Platform
Visual Studio 2015: novità per gli sviluppatori iOS, Android e Cross-PlatformVisual Studio 2015: novità per gli sviluppatori iOS, Android e Cross-Platform
Visual Studio 2015: novità per gli sviluppatori iOS, Android e Cross-Platform
 
Un anno di DevMarche
Un anno di DevMarcheUn anno di DevMarche
Un anno di DevMarche
 
Mobile e Smart Client
Mobile e Smart ClientMobile e Smart Client
Mobile e Smart Client
 
Save ourselves with unit testing :)
Save ourselves with unit testing :)Save ourselves with unit testing :)
Save ourselves with unit testing :)
 
Utilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software DeveloperUtilizzare Windows Vista come Software Developer
Utilizzare Windows Vista come Software Developer
 
Sviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRailSviluppo Web Agile Con MonoRail
Sviluppo Web Agile Con MonoRail
 
Generazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NETGenerazione Dinamica di Codice in .NET
Generazione Dinamica di Codice in .NET
 

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à il futuro di MT? 2
  • 3. Quale sarà il futuro di MT? 2
  • 4. Quale sarà il futuro di MT? 2
  • 5. Quale sarà il futuro di MT? All  technology   roadmaps  remain   intact 2
  • 6. Quale sarà il futuro di MT? All  technology   roadmaps  remain   intact 2
  • 7. 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
  • 8. 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
  • 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
  • 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
  • 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
  • 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 UI va cmq rifatto (1/5) Esempio MIX11 App http://tinyurl.com/442vt3t iPhone 7
  • 27. Il layer UI va cmq rifatto (2/5) Esempio MIX11 App http://tinyurl.com/442vt3t WP7 8
  • 28. Il layer UI va cmq rifatto (3/5) Esempio MIX11 App http://tinyurl.com/442vt3t Android 9
  • 29. 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
  • 30. 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!
  • 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
  • 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
  • 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
  • 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 miei bisogni? (1/3) 16
  • 46. 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
  • 47. 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
  • 48. Soddisfa i miei bisogni? (2/3) 17
  • 49. Soddisfa i miei bisogni? (2/3) • UX usabile e attraente! ✴Stesse possibilità di Objective-C (IB) 17
  • 50. 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
  • 51. 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!
  • 52. Soddisfa i miei bisogni? (3/3) 18
  • 53. 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
  • 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
  • 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
  • 65. Configurazione ambiente • Boot Camp + Parallels = stessa (ma unica) partizione Windows 21
  • 66. 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
  • 67. Visual Studio come IDE (1/2) 22
  • 68. Visual Studio come IDE (1/2) • Perchè vorrei farlo? ‣ IDE migliore / Resharper, ... 22
  • 69. Visual Studio come IDE (1/2) • Perchè vorrei farlo? ‣ IDE migliore / Resharper, ... • Si può fare! (cit) ‣ o quasi.... solo build, NO RUN 22
  • 70. 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
  • 71. 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
  • 72. Poniamo le basi... ...per costruire la prima App! 24
  • 73. Cocoa Touch: il Framework 25
  • 74. Cocoa Touch: il Framework • Cocoa : .NET FX = Objective-C : C# 25
  • 75. Cocoa Touch: il Framework • Cocoa : .NET FX = Objective-C : C# • Foundation ‣ objects, memory, ... 25
  • 76. Cocoa Touch: il Framework • Cocoa : .NET FX = Objective-C : C# • Foundation ‣ objects, memory, ... • UIKit, GameKit, MapKit, ... 25
  • 77. 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/
  • 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! • 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
  • 84. ViewControllers • Basato su MVC (o una specie...) 28
  • 85. ViewControllers • Basato su MVC (o una specie...) • Creazione di app con più screen ‣ Navigation ‣ Resize, orientamento 28
  • 86. ViewControllers • Basato su MVC (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! • Creare una form con UIViewController • Resize e rotazione form • Anchor e docking • App con più form grazie ai ViewController. 33
  • 93. Altri approcci per UI • Tentativi di MVVM 34
  • 94. Altri approcci per UI • Tentativi di MVVM • DSL? (Domain-specific language) 34
  • 95. Altri approcci per UI • Tentativi di MVVM • DSL? (Domain-specific language) ‣ iCircuit: http://praeclarum.org/post/1520024382/interfaces- caches-cross-platform 34
  • 96. 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
  • 97. Accesso ai dati locali (1/2) 35
  • 98. Accesso ai dati locali (1/2) • SQLite ‣ portabilità in altre piattaforme?? ‣ Repository / DAO pattern? ORM? 35
  • 99. 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
  • 100. 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
  • 101. Accesso ai dati remoti 37
  • 102. Accesso ai dati remoti • ASMX Web Service e WCF come in Silverlight 37
  • 103. Accesso ai dati remoti • ASMX Web Service e WCF come in Silverlight • REST via HttpRequest / Response 37
  • 104. Accesso ai dati remoti • 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 • 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
  • 107. Alcuni framework di supporto 40
  • 108. Alcuni framework di supporto • MonoTouch.Dialog ‣ https://github.com/migueldeicaza/MonoTouch.Dialog 40
  • 109. 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
  • 110. 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
  • 112. What else? • UIAlertView non “asincrona” ‣ magari qualcosa con le coroutine, a la Caliburn? 41

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n