SlideShare a Scribd company logo
1 of 73
Download to read offline
Programmiamo
iPhone e iPad (e non solo!)
con
                            o do po
• Stefano Ottaviani    1a nn
  ‣ steott@gmail.com
  ‣ @ste8




                                      1
Della serie...




2




                     2
Conosciamoci un po’
• Hai seguito la sessione di 1 anno fa?

• Hai usato MonoTouch in produzione?

• Conosci MonoTouch?



    3




                                          3
Chi sono?
• Dev / SEng @ KILOG Srl
  ‣ Da Palm OS a iPad, passando per Windows CE / Mobile
      (C++, .NET CF) - 10 anni sul mobile!


• Communities
  ‣ DotNetMarche, XPUG Marche, TechBar


• Contatti
  ‣        steott@gmail.com
  ‣        @ste8
       4
  ‣        blogs.ugidotnet.org/ste8



                                                          4
Conclusioni :)




5




                     5
... e C# non è solo
     “la copia” di Java
         (since 3.5)


6




                          6
7
8
Cosa devo sviluppare?            (1/4)


• Line of Business Applications (LoB)
 Online e soprattutto OFFLINE

• Sales Force Automation, CRM,
  assistenze tecniche, ...

• Ciclo di vita: medio / lungo

• Porting / Reengineering di app
  esistenti (WM6, netbook, ...)
    9




                                           9
Cosa devo sviluppare?   (2/4)




 10




                                10
Cosa devo sviluppare?             (3/4)



• Device:iPhone e iPad come riferimenti
  ‣ ma ci sono anche Android, WP7, netbook


• UX usabile e attraente!




    11




                                             11
Cosa devo sviluppare?               (4/4)



• Performante
  ‣ L’exe non deve essere per forza piccolo

• Controllo sul deploy dell’app

• Ridurre potenziali problemi x sviluppo
  ‣ No puntatori & rilascio memoria

    12




                                              12
Che strumenti abbiamo?




 13




                         13
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
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
     15
          Fonte: http://www.agiledossier.com/doyouwanttocreatamobileapp


                                                                          15
Con la diffusione di HTML5 e js...


                              pazzi?
                   Ma si   am
          aga zzi!
Oh      r
              ok, ma fare tutto in HTML5/JS è
            come fare cibo vegerariano perchè
                così lo mangiano (quasi) tutti
   16
                            (cit. @alexbream)

                                             16
Considerazioni sullo
          sviluppo
      Cross Platform


17




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



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

                iPhone




 18




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



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

                  WP7




 19




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



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

                Android




 20




                                             20
La UI va rifatta...o no?                                (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 21 that platform, with a experience design
       for
  based on that platforms interaction style

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



... ma almeno riutilizziamo la logica
di business e di accesso dati...

          ... soprattutto in app offline!

    Riscrivere il codice in linguaggi
    diversi per ogni piattaforma è
   22
            molto costoso!

                                            22
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.
   23




                                       23
Side effect del
“Cross-platform Core” approach
• nicely layered architecture

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




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




                                                                         24
Cos’è
     MonoTouch



25




                 25
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, Dynamic, ... =>
    26

      Attenzione! Usati da molti ORM ‘light’

                                               26
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)
     27




                                                27
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
     28
• Prezzo:pro o contro?

                                                  28
Soddisfa i miei bisogni?           (1/3)



• App LOB (Line of Business)
  ‣ Online e soprattutto OFFLINE
  ✴Si... e fa molto altro!

• Device:iPhone e iPad come riferimenti
  ‣ ma ci sono anche Android, WP7, netbook
  ✴Posso condividere BIZ e DAL!

    29




                                             29
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
     30
  ✴Stesse possibilità di Objective-C!

                                                                30
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




    31




                                               31
Chi c’è dietro a
       MonoTouch e
     Mono for Android?


32




                          32
1 anno fa...
      Quale sarà il futuro di MT?

                                   No P anic

                                     Can	
  we	
  conDnue	
  
                                       working	
  with	
  
                                       MonoTouch?
   All	
  technology	
  
roadmaps	
  remain	
  
          intact
                                   You	
  should,	
  yes.	
  It	
  will	
  
                                      be	
  compaDble.
                33




                                                                              33
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”
    34




                                          34
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
     35




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


     36




                                                              36
Xamarin oggi                          (4/5)



• Xamarin Identified as a Leader in Mobile
  Cross-Platform Application Development
  Tools




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




                                                                               37
Xamarin oggi                          (5/5)




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


                                                                      38
Risorse per iniziare
• 2 Video da NDC 2010
  ‣ http://tekpub.com/conferences/ndc2010


• Stack Overflow / Mailing List

• Esempi: galleria su xamarin.com

• Libri
     39




                                            39
Come abbiamo organizzato
   il nostro progetto?



  40




                           40
Ingredienti per iniziare
• Un computer Mac con Mac OS X

• iPhone SDK

• MonoTouch (+ Mono)
  – Simulator only (free), studenti (99$),
    Professional (399$), Enterprise (999$)

• MonoDevelop
    41




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

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

    42




                                         42
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
    43




                                             43
Visual Studio come IDE                   (2/2)



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




    44




                                                  44
Architettura
• “Progetto” Server (Web API, IIS)

• “Progetto” Client (iPad)

• Biz e DAL in comune

• Tool ‘home made’ per sincronizzare i
  progetti
    45




                                         45
UI Patterns
• No Data Binding :(

• MVP e Presentation Model
  ‣   http://martinfowler.com/eaaDev/PresentationModel.html
  ‣   http://martinfowler.com/eaaDev/SupervisingPresenter.html



• Soluzioni ‘MVVM’
  ‣ MonoCross, MvvmCross
  ‣ ATTENZIONE: Future direction (Under
    consideration): More tablet support - for iPad, for
     46

      Windows Metro and for Android

                                                                 46
UI: XCode vs Codice
• Approcci 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



    47




                                                       47
Request / Response
            Service Layer (1/3)
• Cos’è e perchè ?
  ‣ http://davybrion.com/blog/2009/11/requestresponse-
    service-layer-series/
  ‣ http://davybrion.github.com/Agatha/

  ‣ Video workshop DotNetMarche:
     • https://vimeo.com/album/1490635/video/17700408
     • https://vimeo.com/album/1490635/video/18120319




     48




                                                         48
Request / Response
       Service Layer (2/3)




49




                             49
Request / Response
       Service Layer (3/3)




50




                             50
UI + Request/Response SL




  51




                           51
Data Access Layer (1/3)
• TransactionScope è supportato
  ‣ Utile per Request / Response SL

• Sqlite su iPad, Sql Server sul server

• No Core Data

• ORM o no? (es. Vici CoolStorage o altri
 ‘light’ per Sqlite)
     52




                                            52
DAL: Sqlite (2/3)
• Supporta subset query DDL!
  ‣ ALTER TABLE, DROP COLUMN, ...
  ‣ Attenti ai generatori di script!


• Molto lasco sui tipi di dati!!
  ‣ Lunghezza stringhe?
  ‣ Valori decimal?
  ‣ DateTime salvati come stringhe!
    53




                                       53
DAL: Performance Tips (3/3)
• 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
        54




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

• REST via HttpRequest / Response

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


     55




                                                  55
Sincronizzazione
• Quanti dati?
  ‣ oltre 100K - 1M records per tabella

• Sync Framework(s) ?

• Soluzioni ‘home made’ ?


    56




                                          56
DDD è un buon amico (1/3)
• Domain Driven Design: si può fare!

• Entity, Value Object, Repository...
  chissené....




    57




                                        57
DDD è un buon amico (2/3)
• Applicabile anche a “rich” UI

• Task Based UI
  ‣ “It is possible to bring forward the
    intention of the user; this will allow the
    Application Server to process behaviors
    as opposed to saving data”
  ‣ http://cqrs.wordpress.com/documents/task-based-ui/

     58




                                                         58
DDD è un buon amico (3/3)
• Separare il comportamento dai dati

• Capire che entità state trattando
  ‣ Una fattura è la stessa fattura per tutti?
  ‣ Bounded Context
  ‣ Mandare il vostro DBA nei matti in tre semplici mosse
    https://vimeo.com/31739391


• Command Handler di CQRS
     59

 (vedi Request Response Service Layer)

                                                            59
IoC / DI
• Diverse librerie
  ‣ TinyIoC (funziona :)

  ‣ OpenNETCF.IoC, Funq, PicoContainer

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



    60




                                         60
Testing (Unit, Integration) (1/2)
• Ora supporto per girare su device




    61




                                      61
Testing (Unit, Integration)(2/2)
• Testare la business logic / DAL

• Testare l’”MVC” Apple:
  ‣ Supervisor Controller
   http://ben.phegan.name/index.php/2011/02/28/
   monotouch-and-unit-testing/




    62




                                                  62
Alcune librerie di supporto                                           (1/3)



• MonoTouch.Dialog
  ‣   https://github.com/migueldeicaza/MonoTouch.Dialog
  ‣   ATTENZIONE su iPad (se UITableViewController non full-screen)




       63




                                                                              63
Alcune librerie di supporto                                        (2/3)



• Framework per MVVM
  • MonoCross
   ‣ 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




   64




                                                                           64
Alcune librerie di supporto                                                   (3/3)



• 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 API
       65




                                                                                      65
Alcuni tool di supporto
• Workspace Reloader
  ‣   http://bit.ly/JM3FZe



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




       66




                                      66
Troubleshooting




67




                       67
Troubleshooting (1/2)
• Eccezioni compilatore AOT
  ‣ specialmente con LINQ

• Encoding non unicode dei caratteri

• Qualche problema con MonoDevelop
  in full-screen
    68




                                       68
Troubleshooting (2/2)
• Attenzione ai Trampolini!
  ‣ Ran out of trampolines of type 0,1,2
    http://docs.xamarin.com/ios/troubleshooting#Ran_out_of_trampolines_of_type_0


  ‣ Understanding the impact
    http://monotouch.2284126.n4.nabble.com/Understanding-the-impact-of-trampolines-td4495086.html




      69




                                                                                                    69
Bonus




70




             70
Cosa è possibile fare a
        questo punto...
• Riutilizzo di Biz e Dal in servizi
  esposti sul web

• Creazione di client in qualsiasi
  tecnologia su questi servizi



    71




                                       71
Domande?




72




                72
Grazie!
• Stefano Ottaviani
  ‣ steott@gmail.com
  ‣ @ste8




    73




                         73

More Related Content

Similar to MonoTouch, un anno dopo

Define & design apps for success
Define & design apps for successDefine & design apps for success
Define & design apps for successAcrmnet s.r.l.
 
Touch&play framework
Touch&play frameworkTouch&play framework
Touch&play frameworkCSP Scarl
 
Sviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapSviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapDotNetMarche
 
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
 
Crossdev sdk/tools: devil's deception
Crossdev sdk/tools: devil's deceptionCrossdev sdk/tools: devil's deception
Crossdev sdk/tools: devil's deceptionLuciano Colosio
 
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
 
Html5 apps - GWT oriented
Html5 apps - GWT orientedHtml5 apps - GWT oriented
Html5 apps - GWT orientedfirenze-gtug
 
Sviluppo di applicazioni mobile cross platform
Sviluppo di applicazioni mobile cross platformSviluppo di applicazioni mobile cross platform
Sviluppo di applicazioni mobile cross platformDan Ardelean
 
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
 
Smau milano 2012 arena social media massimo-grava
Smau milano 2012   arena social media massimo-gravaSmau milano 2012   arena social media massimo-grava
Smau milano 2012 arena social media massimo-gravaSMAU
 
Smau Napoli 2016 - Michele Aponte, Microsoft
Smau Napoli 2016 - Michele Aponte, MicrosoftSmau Napoli 2016 - Michele Aponte, Microsoft
Smau Napoli 2016 - Michele Aponte, MicrosoftSMAU
 
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppoLorenzo Braghetto
 
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
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld DevicesGWTcon
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoDiego La Monica
 
Roadmap pubblicazione app WP7 - Community Tour 2011 DotNetUmbria
Roadmap pubblicazione app WP7 - Community Tour 2011 DotNetUmbriaRoadmap pubblicazione app WP7 - Community Tour 2011 DotNetUmbria
Roadmap pubblicazione app WP7 - Community Tour 2011 DotNetUmbriaFabrizio Bernabei
 

Similar to MonoTouch, un anno dopo (20)

Define & design apps for success
Define & design apps for successDefine & design apps for success
Define & design apps for success
 
Touch&play framework
Touch&play frameworkTouch&play framework
Touch&play framework
 
Sviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGapSviluppo di applicazioni mobile con PhoneGap
Sviluppo di applicazioni mobile con PhoneGap
 
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
 
Crossdev sdk/tools: devil's deception
Crossdev sdk/tools: devil's deceptionCrossdev sdk/tools: devil's deception
Crossdev sdk/tools: devil's deception
 
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
 
Html5 apps - GWT oriented
Html5 apps - GWT orientedHtml5 apps - GWT oriented
Html5 apps - GWT oriented
 
platforms
platformsplatforms
platforms
 
Sviluppo di applicazioni mobile cross platform
Sviluppo di applicazioni mobile cross platformSviluppo di applicazioni mobile cross platform
Sviluppo di applicazioni mobile cross platform
 
Openmoko - La costruzione di un “Telefoninux”
Openmoko - La costruzione di un “Telefoninux”Openmoko - La costruzione di un “Telefoninux”
Openmoko - La costruzione di un “Telefoninux”
 
Smau milano 2012 arena social media massimo-grava
Smau milano 2012   arena social media massimo-gravaSmau milano 2012   arena social media massimo-grava
Smau milano 2012 arena social media massimo-grava
 
Smau Napoli 2016 - Michele Aponte, Microsoft
Smau Napoli 2016 - Michele Aponte, MicrosoftSmau Napoli 2016 - Michele Aponte, Microsoft
Smau Napoli 2016 - Michele Aponte, Microsoft
 
Intro xamarin forms
Intro xamarin formsIntro xamarin forms
Intro xamarin forms
 
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
 
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 !
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
 
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
 
Io, Android
Io, AndroidIo, Android
Io, Android
 
Roadmap pubblicazione app WP7 - Community Tour 2011 DotNetUmbria
Roadmap pubblicazione app WP7 - Community Tour 2011 DotNetUmbriaRoadmap pubblicazione app WP7 - Community Tour 2011 DotNetUmbria
Roadmap pubblicazione app WP7 - Community Tour 2011 DotNetUmbria
 
Adesso In Onda
Adesso In OndaAdesso In Onda
Adesso In Onda
 

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
 

MonoTouch, un anno dopo

  • 1. Programmiamo iPhone e iPad (e non solo!) con o do po • Stefano Ottaviani 1a nn ‣ steott@gmail.com ‣ @ste8 1
  • 3. Conosciamoci un po’ • Hai seguito la sessione di 1 anno fa? • Hai usato MonoTouch in produzione? • Conosci MonoTouch? 3 3
  • 4. Chi sono? • Dev / SEng @ KILOG Srl ‣ Da Palm OS a iPad, passando per Windows CE / Mobile (C++, .NET CF) - 10 anni sul mobile! • Communities ‣ DotNetMarche, XPUG Marche, TechBar • Contatti ‣ steott@gmail.com ‣ @ste8 4 ‣ blogs.ugidotnet.org/ste8 4
  • 6. ... e C# non è solo “la copia” di Java (since 3.5) 6 6
  • 7. 7
  • 8. 8
  • 9. Cosa devo sviluppare? (1/4) • Line of Business Applications (LoB) Online e soprattutto OFFLINE • Sales Force Automation, CRM, assistenze tecniche, ... • Ciclo di vita: medio / lungo • Porting / Reengineering di app esistenti (WM6, netbook, ...) 9 9
  • 10. Cosa devo sviluppare? (2/4) 10 10
  • 11. Cosa devo sviluppare? (3/4) • Device:iPhone e iPad come riferimenti ‣ ma ci sono anche Android, WP7, netbook • UX usabile e attraente! 11 11
  • 12. Cosa devo sviluppare? (4/4) • Performante ‣ L’exe non deve essere per forza piccolo • Controllo sul deploy dell’app • Ridurre potenziali problemi x sviluppo ‣ No puntatori & rilascio memoria 12 12
  • 14. 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
  • 15. 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 15 Fonte: http://www.agiledossier.com/doyouwanttocreatamobileapp 15
  • 16. Con la diffusione di HTML5 e js... pazzi? Ma si am aga zzi! Oh r ok, ma fare tutto in HTML5/JS è come fare cibo vegerariano perchè così lo mangiano (quasi) tutti 16 (cit. @alexbream) 16
  • 17. Considerazioni sullo sviluppo Cross Platform 17 17
  • 18. La UI va rifatta...o no? (1/5) Esempio MIX11 App http://tinyurl.com/442vt3t iPhone 18 18
  • 19. La UI va rifatta...o no? (2/5) Esempio MIX11 App http://tinyurl.com/442vt3t WP7 19 19
  • 20. La UI va rifatta...o no? (3/5) Esempio MIX11 App http://tinyurl.com/442vt3t Android 20 20
  • 21. La UI va rifatta...o no? (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 21 that platform, with a experience design for based on that platforms interaction style 21
  • 22. La UI va rifatta...o no? (5/5) ... ma almeno riutilizziamo la logica di business e di accesso dati... ... soprattutto in app offline! Riscrivere il codice in linguaggi diversi per ogni piattaforma è 22 molto costoso! 22
  • 23. 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. 23 23
  • 24. Side effect del “Cross-platform Core” approach • nicely layered architecture • non-presentation logic which is easy to get under solid test coverage 24 Fonte: http://www.agiledossier.com/doyouwanttocreatamobileapp 24
  • 25. Cos’è MonoTouch 25 25
  • 26. 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, Dynamic, ... => 26 Attenzione! Usati da molti ORM ‘light’ 26
  • 27. 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) 27 27
  • 28. 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 28 • Prezzo:pro o contro? 28
  • 29. Soddisfa i miei bisogni? (1/3) • App LOB (Line of Business) ‣ Online e soprattutto OFFLINE ✴Si... e fa molto altro! • Device:iPhone e iPad come riferimenti ‣ ma ci sono anche Android, WP7, netbook ✴Posso condividere BIZ e DAL! 29 29
  • 30. 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 30 ✴Stesse possibilità di Objective-C! 30
  • 31. 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 31 31
  • 32. Chi c’è dietro a MonoTouch e Mono for Android? 32 32
  • 33. 1 anno fa... Quale sarà il futuro di MT? No P anic Can  we  conDnue   working  with   MonoTouch? All  technology   roadmaps  remain   intact You  should,  yes.  It  will   be  compaDble. 33 33
  • 34. 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” 34 34
  • 35. 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 35 35
  • 36. 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 ... 36 36
  • 37. Xamarin oggi (4/5) • Xamarin Identified as a Leader in Mobile Cross-Platform Application Development Tools 37 Fonte: http://www.visionmobile.com/blog/2012/02/crossplatformtools/ 37
  • 38. Xamarin oggi (5/5) 38 Fonte: http://www.visionmobile.com/blog/2012/02/crossplatformtools/ 38
  • 39. Risorse per iniziare • 2 Video da NDC 2010 ‣ http://tekpub.com/conferences/ndc2010 • Stack Overflow / Mailing List • Esempi: galleria su xamarin.com • Libri 39 39
  • 40. Come abbiamo organizzato il nostro progetto? 40 40
  • 41. Ingredienti per iniziare • Un computer Mac con Mac OS X • iPhone SDK • MonoTouch (+ Mono) – Simulator only (free), studenti (99$), Professional (399$), Enterprise (999$) • MonoDevelop 41 41
  • 42. Configurazione ambiente • Boot Camp + Parallels = stessa (ma unica) partizione Windows • Shortcuts per ‣ Mac OS X ‣ Windows da Parallels ‣ MonoDevelop 42 42
  • 43. 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 43 43
  • 44. Visual Studio come IDE (2/2) • Soluzione funzionante: ‣ https://github.com/follesoe/VSMonoTouch ‣ (anche su nuget) 44 44
  • 45. Architettura • “Progetto” Server (Web API, IIS) • “Progetto” Client (iPad) • Biz e DAL in comune • Tool ‘home made’ per sincronizzare i progetti 45 45
  • 46. UI Patterns • No Data Binding :( • MVP e Presentation Model ‣ http://martinfowler.com/eaaDev/PresentationModel.html ‣ http://martinfowler.com/eaaDev/SupervisingPresenter.html • Soluzioni ‘MVVM’ ‣ MonoCross, MvvmCross ‣ ATTENZIONE: Future direction (Under consideration): More tablet support - for iPad, for 46 Windows Metro and for Android 46
  • 47. UI: XCode vs Codice • Approcci 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 47 47
  • 48. Request / Response Service Layer (1/3) • Cos’è e perchè ? ‣ http://davybrion.com/blog/2009/11/requestresponse- service-layer-series/ ‣ http://davybrion.github.com/Agatha/ ‣ Video workshop DotNetMarche: • https://vimeo.com/album/1490635/video/17700408 • https://vimeo.com/album/1490635/video/18120319 48 48
  • 49. Request / Response Service Layer (2/3) 49 49
  • 50. Request / Response Service Layer (3/3) 50 50
  • 52. Data Access Layer (1/3) • TransactionScope è supportato ‣ Utile per Request / Response SL • Sqlite su iPad, Sql Server sul server • No Core Data • ORM o no? (es. Vici CoolStorage o altri ‘light’ per Sqlite) 52 52
  • 53. DAL: Sqlite (2/3) • Supporta subset query DDL! ‣ ALTER TABLE, DROP COLUMN, ... ‣ Attenti ai generatori di script! • Molto lasco sui tipi di dati!! ‣ Lunghezza stringhe? ‣ Valori decimal? ‣ DateTime salvati come stringhe! 53 53
  • 54. DAL: Performance Tips (3/3) • 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 54 54
  • 55. Accesso ai dati remoti • ASMX Web Service e WCF come in Silverlight • REST via HttpRequest / Response • JSON ‣ https://github.com/chrisntr/Newtonsoft.Json 55 55
  • 56. Sincronizzazione • Quanti dati? ‣ oltre 100K - 1M records per tabella • Sync Framework(s) ? • Soluzioni ‘home made’ ? 56 56
  • 57. DDD è un buon amico (1/3) • Domain Driven Design: si può fare! • Entity, Value Object, Repository... chissené.... 57 57
  • 58. DDD è un buon amico (2/3) • Applicabile anche a “rich” UI • Task Based UI ‣ “It is possible to bring forward the intention of the user; this will allow the Application Server to process behaviors as opposed to saving data” ‣ http://cqrs.wordpress.com/documents/task-based-ui/ 58 58
  • 59. DDD è un buon amico (3/3) • Separare il comportamento dai dati • Capire che entità state trattando ‣ Una fattura è la stessa fattura per tutti? ‣ Bounded Context ‣ Mandare il vostro DBA nei matti in tre semplici mosse https://vimeo.com/31739391 • Command Handler di CQRS 59 (vedi Request Response Service Layer) 59
  • 60. IoC / DI • Diverse librerie ‣ TinyIoC (funziona :) ‣ OpenNETCF.IoC, Funq, PicoContainer ‣ http://monotouch.info/Tags/IoC 60 60
  • 61. Testing (Unit, Integration) (1/2) • Ora supporto per girare su device 61 61
  • 62. Testing (Unit, Integration)(2/2) • Testare la business logic / DAL • Testare l’”MVC” Apple: ‣ Supervisor Controller http://ben.phegan.name/index.php/2011/02/28/ monotouch-and-unit-testing/ 62 62
  • 63. Alcune librerie di supporto (1/3) • MonoTouch.Dialog ‣ https://github.com/migueldeicaza/MonoTouch.Dialog ‣ ATTENZIONE su iPad (se UITableViewController non full-screen) 63 63
  • 64. Alcune librerie di supporto (2/3) • Framework per MVVM • MonoCross ‣ 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 64 64
  • 65. Alcune librerie di supporto (3/3) • 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 API 65 65
  • 66. Alcuni tool di supporto • Workspace Reloader ‣ http://bit.ly/JM3FZe • SourceTree ‣ http://www.sourcetreeapp.com/ 66 66
  • 68. Troubleshooting (1/2) • Eccezioni compilatore AOT ‣ specialmente con LINQ • Encoding non unicode dei caratteri • Qualche problema con MonoDevelop in full-screen 68 68
  • 69. Troubleshooting (2/2) • Attenzione ai Trampolini! ‣ Ran out of trampolines of type 0,1,2 http://docs.xamarin.com/ios/troubleshooting#Ran_out_of_trampolines_of_type_0 ‣ Understanding the impact http://monotouch.2284126.n4.nabble.com/Understanding-the-impact-of-trampolines-td4495086.html 69 69
  • 70. Bonus 70 70
  • 71. Cosa è possibile fare a questo punto... • Riutilizzo di Biz e Dal in servizi esposti sul web • Creazione di client in qualsiasi tecnologia su questi servizi 71 71
  • 73. Grazie! • Stefano Ottaviani ‣ steott@gmail.com ‣ @ste8 73 73