Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CodeFest 2018. Дмитрий Моисеев (СКБ Контур) — Xamarin в продакшене — полёт нормальный

CodeFest 2018. Дмитрий Моисеев (СКБ Контур) — Xamarin в продакшене — полёт нормальный

Посмотрите выступление Дмитрия: https://2018.codefest.ru/lecture/1332/

У Xamarin сложилась противоречивая репутация. Кто-то его безудержно ругает за проблемы со стабильностью и инструментарием, кто-то выводит приложения в сторы и радуется всем прелестям кроссплатформенности. Наша команда – из вторых. Уже три года мы успешно разрабатываем на C# и Xamarin мобильное приложение для предпринимателей, и на собственном опыте успели оценить, насколько ситуация с Xamarin изменилась к лучшему. Я расскажу, как сегодня можно использовать Xamarin для одновременного выпуска релизов сложного приложения на iOS и Android.

Доклад будет полезен мобильным разработчикам, не успевшим попробовать Xamarin, а так же тем, кто пробовал его несколько лет назад и был разочарован этим опытом.

16b6c87229eaf58768d25ed7b2bbbf52?s=128

CodeFest

April 09, 2018
Tweet

Transcript

  1. Xamarin в продакшене — полёт нормальный Дмитрий Моисеев Инженер-программист СКБ

    Контур
  2. Контур.Эльба

  3. 2 приложения — почему больно? • Отдельные интерфейсы • Отдельная

    реализация фич
  4. 2 приложения — почему больно? • Отдельные интерфейсы • Отдельная

    реализация фич • Отдельные баги и фиксы
  5. 2 приложения — почему больно? • Отдельные интерфейсы • Отдельная

    реализация фич • Отдельные баги и фиксы • Отдельное тестирование • …отдельное ВСЁ
  6. 60+ таких экранов

  7. Xamarin куплен Microsoft

  8. Xamarin — что это? Xamarin (Mono) Нативные API (iOS/Android)

  9. Кроссплатформенный код 1.1) Portable Class Library (PCL) 1.2) .NET Standard

    2) Shared project
  10. Что идёт в общий код • Сеть

  11. Что идёт в общий код • Сеть • БД

  12. Что идёт в общий код • Сеть • БД •

    Бизнес-логика (модели, валидация и т.п.)
  13. Что НЕ идёт в общий код • Push-уведомления • Фоновая

    работа • Взаимодействие с системой (распознавание отпечатков, счётчики на иконках и т.п.) (кроме как в виде интерфейсов)
  14. К чему пришли? • Общая реализация фич • Общие баги

    и фиксы • Общие тесты
  15. К чему пришли? • Общая реализация фич • Общие баги

    и фиксы • Общие тесты • Отдельные интерфейсы • Отдельные UI баги и фиксы
  16. Первые впечатления

  17. Источник картинки: https://www.liveinternet.ru/users/muza_serko/post383733474

  18. Миф: не используется в топовых проектах

  19. Миф: не используется в топовых проектах Slack Storyo Alaska Airlines

    Pinterest ...и фиг знает сколько ещё...
  20. Миф: медленный старт

  21. Миф: медленный старт 0 200 400 600 800 1000 1200

    Android iOS Натив Xamarin.Forms
  22. Миф: медленный старт 0 200 400 600 800 1000 1200

    Android iOS Натив Xamarin Xamarin.Forms
  23. Миф: Xamarin — слоупок

  24. Миф: Xamarin — слоупок REST API Источник: https://www.altexsoft.com/blog/engineering/performance-comparison-xamarin-forms-xamarin-ios-xamarin-android-vs-android-and-ios-native-applications/ 0 20

    40 60 80 100 120 140 160 180 200 Android iOS Натив Xamarin
  25. Миф: UI — ограничен (по возможностям и скорости)

  26. Миф: ограниченный UI 1) Xamarin.Forms 2) MVVM-архитектура 3) Сторонние библиотеки

  27. Что такое Xamarin.Forms Entry EntryRenderer (iOS) EntryRenderer (Android) UITextField EditText

  28. Минусы Xamarin.Forms - Ограниченность готовых UI-компонентов

  29. Минусы Xamarin.Forms - Ограниченность готовых UI-компонентов - Производительность на Android

  30. Минусы Xamarin.Forms - Ограниченность готовых UI-компонентов - Производительность на Android

    - Глюки (иногда) - Местами отломана поддержка iOS 7
  31. Xamarin.Forms в сравнении c 2015 + Меньше глюков + Выше

    скорость + Margin у всех компонентов + Превью XAML-вёрстки
  32. Миф: ограниченный UI 1) Xamarin.Forms 2) MVVM архитектура 3) Сторонние

    библиотеки
  33. MVVM в Эльбе Bind(() => isPriceWithNdsSwitch.IsVisible, () => Model.IsBillWithNds); BindAction(formOfMoneyButton.OnClick(),

    ()=> Model.ChangeFormOfMoney());
  34. MVVM в Эльбе binder.Bind(() => State, () => Model.State); private

    PushLoginViewModel.Phaze State { set { if (value == PushLoginViewModel.Phaze.Complete) { progressBarBlock.FadeOut(); succesBlock.FadeIn(); }
  35. Миф: ограниченный UI 1) Xamarin.Forms 2) MVVM архитектура 3) Сторонние

    библиотеки
  36. Сторонние библиотеки

  37. Миф: сырые инструменты

  38. Миф: сырые инструменты (IDE) • Xamarin Studio

  39. Миф: сырые инструменты (IDE) • Xamarin Studio • Visual Studio

    (Windows)
  40. Миф: сырые инструменты (IDE) • Xamarin Studio • Visual Studio

    (Windows) • JetBrains Rider
  41. Миф: сырые инструменты (IDE) • Xamarin Studio • Visual Studio

    (Windows) • JetBrains Rider • Visual Studio (macOS) • MonoDevelop (Linux)
  42. Симулятор iOS под Windows

  43. Профайлер — работает! (но только в Enterprise)

  44. Не мифы

  45. Большой размер приложения 0 1000 2000 3000 4000 5000 6000

    7000 8000 Android iOS Натив Xamarin
  46. Большой размер приложения 0 1000 2000 3000 4000 5000 6000

    7000 8000 Android iOS 2-3 фото в 13 Мп Натив Xamarin
  47. Не мифы • Не избавляет от необходимости понимать принципы работы

    нативных платформ
  48. Не мифы • Не избавляет от необходимости понимать принципы работы

    нативных платформ • Не избавляет от чтения Java/Objective-C/Swift
  49. Не мифы • Не избавляет от необходимости понимать принципы работы

    нативных платформ • Не избавляет от чтения Java/Objective-C/Swift • Медленные релизный билд (3 минуты на платформу) • Не готовит кофе
  50. Плюсы Xamarin • Экономит время на бизнес-логике • Экономит время

    на багфиксах • Экономит время на тестировании
  51. Плюсы Xamarin • Экономит время на бизнес-логике • Экономит время

    на багфиксах • Экономит время на тестировании • .NET
  52. @Newbilius Вопросы? www.old-hard.ru newbilius@gmail.com