Successfully reported this slideshow.

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

1,691 views

Published on

MonoTouch ha delle caratteristiche che lo differenziano rispetto agli altri framework per lo sviluppo su iPhone / iPad: vediamo quali sono, che vantaggi ci possono dare e in che modo possono rivelarsi più divertenti :), in particolar modo nell'ambito delle applicazioni LOB (Line of Business).

Anche se MonoTouch non è direttamente cross-platform, cercheremo inoltre di dare uno sguardo a come organizzare i nostri progetti in modo tale da farli girare anche su altri device, in particolare Android, Windows Phone 7, e perché no, desktop e netbook, col minor sforzo possibile.

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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

  1. 1. ProgrammiamoiPhone e iPad (e non solo!)con• Stefano Ottaviani ‣ steott@gmail.com ‣ @ste8
  2. 2. Quale sarà il futuro di MT? 2
  3. 3. Quale sarà il futuro di MT? 2
  4. 4. Quale sarà il futuro di MT? 2
  5. 5. Quale sarà il futuro di MT? All  technology  roadmaps  remain   intact 2
  6. 6. Quale sarà il futuro di MT? All  technology  roadmaps  remain   intact 2
  7. 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. 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
  9. 9. Conosciamoci un po’3
  10. 10. Conosciamoci un po’• Chi utilizza già MonoTouch? 3
  11. 11. Conosciamoci un po’• Chi utilizza già MonoTouch?• Chi ha idea di cosa si tratta? 3
  12. 12. Conosciamoci un po’• Chi utilizza già MonoTouch?• Chi ha idea di cosa si tratta?• Chi conosce già Objective-C? 3
  13. 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. 14. Chi sono?4
  15. 15. Chi sono?• Dev / SEng @ KILOG Srl ‣ Da Palm OS a iPad, passando per Windows CE / Mobile (C++, .NET CF) 4
  16. 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. 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. 18. Cosa devo sviluppare? (1/2) 5
  19. 19. Cosa devo sviluppare? (1/2)• App LOB (Line of Business) ‣ Online e soprattutto OFFLINE ✴Non si vive di soli servizi! 5
  20. 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. 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. 22. Cosa devo sviluppare? (2/2) 6
  23. 23. Cosa devo sviluppare? (2/2)• Performante ‣ L’exe non deve essere per forza piccolo 6
  24. 24. Cosa devo sviluppare? (2/2)• Performante ‣ L’exe non deve essere per forza piccolo• Controllo sul deploy dell’app 6
  25. 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. 26. Il layer UI va cmq rifatto (1/5) Esempio MIX11 App http://tinyurl.com/442vt3t iPhone 7
  27. 27. Il layer UI va cmq rifatto (2/5) Esempio MIX11 App http://tinyurl.com/442vt3t WP7 8
  28. 28. Il layer UI va cmq rifatto (3/5) Esempio MIX11 App http://tinyurl.com/442vt3t Android 9
  29. 29. Il layer UI va cmq rifatto (4/5) Ipse dixit: Martin Fowler http://martinfowler.com/bliki/CrossPlatformMobile.html To summarize:• Dont 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. 30. Il layer UI va cmq rifatto (5/5)Ste dixit: ma almeno riutilizziamo lalogica di business e di accesso dati... ... soprattutto in app offline! Riscrivere il codice in linguaggi diversi per ogni piattaforma è 11 molto costoso!
  31. 31. Che strumenti abbiamo? 12
  32. 32. Che strumenti abbiamo?• Objective-C ‣ learning curve ulteriore x il linguaggio ‣ target: “solo” iPhone, iPad, Mac OS X 12
  33. 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. 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. 35. Cos’è MonoTouch? (1/3)13
  36. 36. Cos’è MonoTouch? (1/3)• Come Mono... ma diverso! ‣ Suite per portare C# e .NET su iPhone! 13
  37. 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. 38. Cos’è MonoTouch? (2/3)14
  39. 39. Cos’è MonoTouch? (2/3)• MonoDevelop + Interface Builder ‣ Lavori in corso per IB 4 14
  40. 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. 41. Cos’è MonoTouch? (3/3)15
  42. 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. 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. 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. 45. Soddisfa i miei bisogni? (1/3) 16
  46. 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. 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. 48. Soddisfa i miei bisogni? (2/3) 17
  49. 49. Soddisfa i miei bisogni? (2/3)• UX usabile e attraente! ✴Stesse possibilità di Objective-C (IB) 17
  50. 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. 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. 52. Soddisfa i miei bisogni? (3/3) 18
  53. 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
  54. 54. Risorse per iniziare19
  55. 55. Risorse per iniziare• 2 Video da NDC 2010 ‣ http://tekpub.com/conferences/ndc2010 19
  56. 56. Risorse per iniziare• 2 Video da NDC 2010 ‣ http://tekpub.com/conferences/ndc2010• Stack Overflow / Mailing List 19
  57. 57. Risorse per iniziare• 2 Video da NDC 2010 ‣ http://tekpub.com/conferences/ndc2010• Stack Overflow / Mailing List• Esempi: TweetStation 19
  58. 58. Risorse per iniziare• 2 Video da NDC 2010 ‣ http://tekpub.com/conferences/ndc2010• Stack Overflow / Mailing List• Esempi: TweetStation• Libri 19
  59. 59. Ingredienti per iniziare20
  60. 60. Ingredienti per iniziare• Un computer Mac con Mac OS X 20
  61. 61. Ingredienti per iniziare• Un computer Mac con Mac OS X• iPhone SDK 20
  62. 62. Ingredienti per iniziare• Un computer Mac con Mac OS X• iPhone SDK• MonoTouch (+ Mono) 20
  63. 63. Ingredienti per iniziare• Un computer Mac con Mac OS X• iPhone SDK• MonoTouch (+ Mono)• MonoDevelop 20
  64. 64. Configurazione ambiente 21
  65. 65. Configurazione ambiente• Boot Camp + Parallels = stessa (ma unica) partizione Windows 21
  66. 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. 67. Visual Studio come IDE (1/2) 22
  68. 68. Visual Studio come IDE (1/2)• Perchè vorrei farlo? ‣ IDE migliore / Resharper, ... 22
  69. 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. 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. 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. 72. Poniamo le basi... ...per costruire la prima App!24
  73. 73. Cocoa Touch: il Framework 25
  74. 74. Cocoa Touch: il Framework• Cocoa : .NET FX = Objective-C : C# 25
  75. 75. Cocoa Touch: il Framework• Cocoa : .NET FX = Objective-C : C#• Foundation ‣ objects, memory, ... 25
  76. 76. Cocoa Touch: il Framework• Cocoa : .NET FX = Objective-C : C#• Foundation ‣ objects, memory, ...• UIKit, GameKit, MapKit, ... 25
  77. 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/
  78. 78. Window e Views26
  79. 79. Window e Views• Application / AppDelegate ‣ main, ... ‣ 10 secondi per caricare! 26
  80. 80. Window e Views• Application / AppDelegate ‣ main, ... ‣ 10 secondi per caricare!• Window ‣ 1 sola per App!!! Poi coi ViewControllers... 26
  81. 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. 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
  83. 83. ViewControllers28
  84. 84. ViewControllers• Basato su MVC (o una specie...) 28
  85. 85. ViewControllers• Basato su MVC (o una specie...)• Creazione di app con più screen ‣ Navigation ‣ Resize, orientamento 28
  86. 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. 87. Esempi di ViewController (1/4) TabBarController 29
  88. 88. Esempi di ViewController (2/4) NavigationController 30
  89. 89. Esempi di ViewController (3/4) SplitViewController / PopoverController 31
  90. 90. Esempi di ViewController (4/4) TableViewController 32
  91. 91. 2° Demo!• Creare una form con UIViewController• Resize e rotazione form• Anchor e docking• App con più form grazie ai ViewController. 33
  92. 92. Altri approcci per UI34
  93. 93. Altri approcci per UI• Tentativi di MVVM 34
  94. 94. Altri approcci per UI• Tentativi di MVVM• DSL? (Domain-specific language) 34
  95. 95. Altri approcci per UI• Tentativi di MVVM• DSL? (Domain-specific language) ‣ iCircuit: http://praeclarum.org/post/1520024382/interfaces- caches-cross-platform 34
  96. 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. 97. Accesso ai dati locali (1/2)35
  98. 98. Accesso ai dati locali (1/2)• SQLite ‣ portabilità in altre piattaforme?? ‣ Repository / DAO pattern? ORM? 35
  99. 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. 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. 101. Accesso ai dati remoti37
  102. 102. Accesso ai dati remoti• ASMX Web Service e WCF come in Silverlight 37
  103. 103. Accesso ai dati remoti• ASMX Web Service e WCF come in Silverlight• REST via HttpRequest / Response 37
  104. 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. 105. IoC / DI• Diverse librerie ‣ OpenNETCF.IoC ‣ Funq, PicoContainer, TinyIoC ‣ http://monotouch.info/Tags/IoC 38
  106. 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. 107. Alcuni framework di supporto 40
  108. 108. Alcuni framework di supporto• MonoTouch.Dialog ‣ https://github.com/migueldeicaza/MonoTouch.Dialog 40
  109. 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. 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
  111. 111. What else?41
  112. 112. What else?• UIAlertView non “asincrona” ‣ magari qualcosa con le coroutine, a la Caliburn? 41
  113. 113. Domande?42
  114. 114. Grazie!43

×