MonotouchРазработка для iPhone на .Netи C#Андрей Басков
О себе5 лет опыта работы и руководства с .Netи C#Руководил созданием читалки журналов для readoz.comна Objective CДелаем текущий проект на monotouchИ просто много читаю ;)
Что расскажуЧто такое monotouchи как он работаетИнструментыПреимущества и недостаткиПроизводительностьПерспективы
Для понимания нужноУметь программироватьИметь опыт работы с managed средами (.Net, Java)Что-то слышать про разработку под iPhone
Monotouch in action
ИнструментыMac OSXcodeи iPhone SDKMonoMonodevelopMonotouch
Лицензирование monotouchАга, не бесплатно Есть бесплатная версия у которой единственное ограничение – нельзя запускать приложение не устройствеСтуденческая лицензия – 99$ (нельзя отправить в AppStore)Персональная лицензия – 399$Enterprise – 999$ за 1 место, 3999$ за 5 (разрешает Enterprise distribution)
Студенческий вариантИспользовать виртуальную машину с Mac OSXcode, iPhone SDK – бесплатноИспользовать Monotouch trialПросить собирать приложение доброго дядю 
Monodevelop
Разработка в monodevelopПривычный интерфейс для .Net-щиковЛюбимый IntellisenseИнтегрированный debug, запуск симулятораЗагрузка приложения на устройствоИнтеграция с SVNЗапуск внешнего редактора xibфайлов
XibфайлыОписывают содержимое View’хПохожи на xamlфайлы Silverlight, WPFДля редактирования используется Interface Builder из Xcode
XibcodebehindАналог codebehindклассов в обычном.Net и SilverlightНа один ViewController 3 файла:HomeViewController.xib(Сам интерфейс)HomeViewController.xib.cs (Ваш код и обработчики событий)HomeViewController.xib.designer.cs (Генерируется monotouchи предоставляет обертку для объектов view controller’a)Переменные для контроллов (кнопки, лейблы) нужно делать самому
Hello world!
Архитектура Monotouch
Monohttp://www.mono-project.com/Main_PageOpen source реализация .Net FrameworkПоддерживается Linux, Mac OS, Windows, а также Sun Solaris, Nintendo Wii, Sony PlayStation 3, Apple iPhoneРеализована большая часть .Net Framework 4 (кроме EF, WPF, WF, урезанный WCF)
MonotouchПостроен на основе MonoКомпилируется в нативный код (Ahead of time compilation)На лету компилировать код нельзя (no System.Emit)В связи с этим есть ряд ограничений - http://monotouch.net/Documentation/Limitations
Monotouch linkerКомпилирует только тот код, который реально используется приложениемИспользует статический анализ, поэтому Reflection не заметит (!)В итоге уменьшается вес приложения
DebugРаботает отлично, как на девайсе так и в симулятореИспользуется soft debugger, поэтому debug код весит намного больше (не сабмититьдебаг код в аппстор!)Инструменты для дебага в monodevelopидентичны тем, которые есть в Visual Studio
ProfilingРеализован с помощью использования Apple Shark и Apple InstrumentsПрофилировать можно только работу девайсаПрофилирование памяти практически не имеет смысла, т.к. инструменты apple не знают про garbage collector
Интеграция с C и Objective Cbtouchутилита генерирующая сборку-обертку для нативной библиотекиВызов селекторов Objective C напрямую из кода MonotouchСтандартный P/Invoke для вызова C методов
Существующие binding’иДля популярных iOSбиблиотек уже сделаны обертки для monotouchFacebook SDK - https://github.com/kevinmcmahon/monotouch-facebookGoogle Analytics - http://wiki.monotouch.net/HowTo/Google/Using_Analytics
ПроизводительностьВ целом хуже чем у нативного решенияГде много вызовов методов (не дай бог рекурсия ) MonotouchбыстрееВ чистой арифметике MonotouchмедленееВ среднем на обычных приложениях это не заметно3D шутеры писать на Monotouchне лучшая идея 
Преимущества.Net framework и C#Garbage collectorИспользование существующего C# кода, правда при соблюдении некоторых условийУдобство в случае одновременного использования Monotouchи .Netна сервереОтносительная кроссплатформенность (iPhone, Android, WP7)Более быстрый переход к программированию на iPhone, т.к. на одну неизвестную меньше (Objective C)Использование сгенерированных прокси для работы с ASP.Net Web services или WCF
Пример генерации прокси	В Visual Studio проект с Web ReferenceВ Monodevelopпроект использующий Reference.csиз предыдущего проектаДостаточно сделать Update web reference в Visual Studio и на клиенте у вас обновленные классы и методы для работы с сервисом
НедостаткиСтоит денегВсе равно нужно использовать CocoaTouchРазмер приложения увеличивается на 3-4 MbНекоторые риски в случае странного поведения Apple
История с запретом сторонних фреймворков8 апреля 2010 Apple обновила пункт 3.3.1, запретив использовать все кроме C, C++, Objective C, Javascript9 сентября 2010 разрешили и сказали, что впредьбудут слушать разработчиков Под запрет попадали Monotouch, Unity, Flash for iPhoneСейчас около 140 приложения опубликовано на сайте Monotouch.net, количество реальных приложений не известно
Примеры приложенийLight BlocksZombie Party (deltaengine.net)
Примеры приложенийИ конечно GeoPoly! (В разработке )
ВыводыMonotouchне панацеяПодходит в определенных ситуацияхСтарый код на C#Кроссплатформенное решение и экономия на ресурсах разработчиковБыстрая разработкаНе нравится C, С++, Objective CМы используем и нам нравится 
БудущееMonotouch 4 с использованием LLVM – быстрее, а код меньшеMonodroid – тоже самое для Android’aWP7 + Nokia а значит в будущем на всех трех платформах можно будет писать на C#
РесурсыОффициальный сайт –http://monotouch.nethttp://monotouch.infoКнига «Professional iPhone Programming with MonoTouch and .NET/C#»Примеры разных приложений с исходниками - https://github.com/conceptdevMiguel de Icaza
Спасибо за внимание!Андрей Басковandrei.baskov@gmail.com@AndreyBaskovhttp://ru.linkedin.com/in/andreybaskovGeopoly (Мы ищем monotouchразработчиков!)http://geopo.ly@GeopolyGame

Monotouch

  • 1.
    MonotouchРазработка для iPhoneна .Netи C#Андрей Басков
  • 2.
    О себе5 летопыта работы и руководства с .Netи C#Руководил созданием читалки журналов для readoz.comна Objective CДелаем текущий проект на monotouchИ просто много читаю ;)
  • 3.
    Что расскажуЧто такоеmonotouchи как он работаетИнструментыПреимущества и недостаткиПроизводительностьПерспективы
  • 4.
    Для понимания нужноУметьпрограммироватьИметь опыт работы с managed средами (.Net, Java)Что-то слышать про разработку под iPhone
  • 5.
  • 6.
  • 7.
    Лицензирование monotouchАга, небесплатно Есть бесплатная версия у которой единственное ограничение – нельзя запускать приложение не устройствеСтуденческая лицензия – 99$ (нельзя отправить в AppStore)Персональная лицензия – 399$Enterprise – 999$ за 1 место, 3999$ за 5 (разрешает Enterprise distribution)
  • 8.
    Студенческий вариантИспользовать виртуальнуюмашину с Mac OSXcode, iPhone SDK – бесплатноИспользовать Monotouch trialПросить собирать приложение доброго дядю 
  • 9.
  • 10.
    Разработка в monodevelopПривычныйинтерфейс для .Net-щиковЛюбимый IntellisenseИнтегрированный debug, запуск симулятораЗагрузка приложения на устройствоИнтеграция с SVNЗапуск внешнего редактора xibфайлов
  • 11.
    XibфайлыОписывают содержимое View’хПохожина xamlфайлы Silverlight, WPFДля редактирования используется Interface Builder из Xcode
  • 12.
    XibcodebehindАналог codebehindклассов вобычном.Net и SilverlightНа один ViewController 3 файла:HomeViewController.xib(Сам интерфейс)HomeViewController.xib.cs (Ваш код и обработчики событий)HomeViewController.xib.designer.cs (Генерируется monotouchи предоставляет обертку для объектов view controller’a)Переменные для контроллов (кнопки, лейблы) нужно делать самому
  • 13.
  • 14.
  • 15.
    Monohttp://www.mono-project.com/Main_PageOpen source реализация.Net FrameworkПоддерживается Linux, Mac OS, Windows, а также Sun Solaris, Nintendo Wii, Sony PlayStation 3, Apple iPhoneРеализована большая часть .Net Framework 4 (кроме EF, WPF, WF, урезанный WCF)
  • 16.
    MonotouchПостроен на основеMonoКомпилируется в нативный код (Ahead of time compilation)На лету компилировать код нельзя (no System.Emit)В связи с этим есть ряд ограничений - http://monotouch.net/Documentation/Limitations
  • 17.
    Monotouch linkerКомпилирует толькотот код, который реально используется приложениемИспользует статический анализ, поэтому Reflection не заметит (!)В итоге уменьшается вес приложения
  • 18.
    DebugРаботает отлично, какна девайсе так и в симулятореИспользуется soft debugger, поэтому debug код весит намного больше (не сабмититьдебаг код в аппстор!)Инструменты для дебага в monodevelopидентичны тем, которые есть в Visual Studio
  • 19.
    ProfilingРеализован с помощьюиспользования Apple Shark и Apple InstrumentsПрофилировать можно только работу девайсаПрофилирование памяти практически не имеет смысла, т.к. инструменты apple не знают про garbage collector
  • 20.
    Интеграция с Cи Objective Cbtouchутилита генерирующая сборку-обертку для нативной библиотекиВызов селекторов Objective C напрямую из кода MonotouchСтандартный P/Invoke для вызова C методов
  • 21.
    Существующие binding’иДля популярныхiOSбиблиотек уже сделаны обертки для monotouchFacebook SDK - https://github.com/kevinmcmahon/monotouch-facebookGoogle Analytics - http://wiki.monotouch.net/HowTo/Google/Using_Analytics
  • 22.
    ПроизводительностьВ целом хужечем у нативного решенияГде много вызовов методов (не дай бог рекурсия ) MonotouchбыстрееВ чистой арифметике MonotouchмедленееВ среднем на обычных приложениях это не заметно3D шутеры писать на Monotouchне лучшая идея 
  • 23.
    Преимущества.Net framework иC#Garbage collectorИспользование существующего C# кода, правда при соблюдении некоторых условийУдобство в случае одновременного использования Monotouchи .Netна сервереОтносительная кроссплатформенность (iPhone, Android, WP7)Более быстрый переход к программированию на iPhone, т.к. на одну неизвестную меньше (Objective C)Использование сгенерированных прокси для работы с ASP.Net Web services или WCF
  • 24.
    Пример генерации прокси ВVisual Studio проект с Web ReferenceВ Monodevelopпроект использующий Reference.csиз предыдущего проектаДостаточно сделать Update web reference в Visual Studio и на клиенте у вас обновленные классы и методы для работы с сервисом
  • 25.
    НедостаткиСтоит денегВсе равнонужно использовать CocoaTouchРазмер приложения увеличивается на 3-4 MbНекоторые риски в случае странного поведения Apple
  • 26.
    История с запретомсторонних фреймворков8 апреля 2010 Apple обновила пункт 3.3.1, запретив использовать все кроме C, C++, Objective C, Javascript9 сентября 2010 разрешили и сказали, что впредьбудут слушать разработчиков Под запрет попадали Monotouch, Unity, Flash for iPhoneСейчас около 140 приложения опубликовано на сайте Monotouch.net, количество реальных приложений не известно
  • 27.
  • 28.
    Примеры приложенийИ конечноGeoPoly! (В разработке )
  • 29.
    ВыводыMonotouchне панацеяПодходит вопределенных ситуацияхСтарый код на C#Кроссплатформенное решение и экономия на ресурсах разработчиковБыстрая разработкаНе нравится C, С++, Objective CМы используем и нам нравится 
  • 30.
    БудущееMonotouch 4 сиспользованием LLVM – быстрее, а код меньшеMonodroid – тоже самое для Android’aWP7 + Nokia а значит в будущем на всех трех платформах можно будет писать на C#
  • 31.
    РесурсыОффициальный сайт –http://monotouch.nethttp://monotouch.infoКнига«Professional iPhone Programming with MonoTouch and .NET/C#»Примеры разных приложений с исходниками - https://github.com/conceptdevMiguel de Icaza
  • 32.
    Спасибо за внимание!АндрейБасковandrei.baskov@gmail.com@AndreyBaskovhttp://ru.linkedin.com/in/andreybaskovGeopoly (Мы ищем monotouchразработчиков!)http://geopo.ly@GeopolyGame