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

Илья Ефимов "Обзор Xamarin Forms"

DotNetRu
October 10, 2019

Илья Ефимов "Обзор Xamarin Forms"

Как только речь заходит о Xamarin, все начинают спрашивать: "А не тормозит? А, наверное, много багов? А, наверное, можно реализовать не все, что есть в нативных решениях?". Так что об этом поговорим в первую очередь. Дальше поговорим о самой разработке на Xamarin: конечно же про MVVM, code-behind, ReactiveUI, IoC DI, DependencyService — чтобы архитектура была слаженной. Отдельная тема — навигация, создание экземпляров страниц и передача в них параметров. В конце поговорим о CI, аналитике и баг-репортах на примере AppCenter.

DotNetRu

October 10, 2019
Tweet

More Decks by DotNetRu

Other Decks in Programming

Transcript

  1. 2 Илья Ефимов. efimovilya86 skill.net.rude Занимаюсь программированием 15 лет. Работал

    в больших и маленьких компаниях. Сделал игру. Работал в стартапе. Делаю платформу для обучения. @ilyaefimov86 18+
  2. О чем рассказ • Что такое Xamarin Forms. • Когда

    нужно использовать. • Компиляция и рантайм. • MVVM, code-behind, ReactiveUI, IoC DI, DependencyService • Навигация, создание экземпляров страниц и передача в них параметров. • CI, аналитика и баг-репорт - все это есть в AppCenter. • Резюме. 3
  3. Когда нужно использовать • Есть команда C#. • Особенно которая

    умеет WPF. • Много готового кода. • Когда важна скорость разработки. 9
  4. Компиляция в iOS Ваш код на C# MSIL Компилятор Mono

    Нативный код Компилятор AOT 15
  5. Исполнение в iOS Ядро операционной системы Среда выполнения Objective-C Cреда

    выполнения AOT Mono iOS API .NET/C# API Bindings (на основе селекторов) 19
  6. namespace Example.Binding { [Register("NSEnumerator")] class NSEnumerator : NSObject { static

    Selector selInit = new Selector("init"); static Selector selAllObjects = new Selector("allObjects"); [Export("init")] public NSEnumerator() : base(NSObjectFlag.Empty) { Handle = Messaging.IntPtr_objc_msgSend(this.Handle, selInit.Handle); } public NSEnumerator(IntPtr handle) : base(handle) {} [Export("nextObject")] public virtual NSObject NextObject() { return Runtime.GetNSObject( Messaging.IntPtr_objc_msgSend(this.Handle, selNextObject.Handle)); } public virtual NSArray AllObjects { [Export("allObjects")] get { return (NSArray) Runtime.GetNSObject( Messaging.IntPtr_objc_msgSend(this.Handle, selAllObjects.Handle)); } } } } 20
  7. Исполнение в iOS Ядро операционной системы Среда выполнения Objective-C Cреда

    выполнения AOT Mono iOS API .NET/C# API Bindings (на основе селекторов) Нативная библиотека Управляемая библиотека Регистраторы 21
  8. class MyViewController : UIViewController{ [Export ("myFunc")] public void MyFunc ()

    { } } @interface MyViewController : UIViewController { } -(void)myFunc; @end @implementation MyViewController {} -(void) myFunc { // код вызывающий управляемый метод MyViewController.MyFunc } @end 22
  9. Исполнение в iOS Ядро операционной системы Среда выполнения Objective-C Cреда

    выполнения AOT Mono iOS API .NET/C# API Bindings (на основе селекторов) Нативная библиотека Управляемая библиотека Регистраторы MyApp.ipa 23
  10. • Remember me - приложение для запоминания. • Основано на

    кривой запоминания Эббингауза. • Напоминает о том, что нужно повторить информацию, через определенные промежутки времени. 25
  11. Архитектура приложения • Проект с общей библиотекой .NetStandard. • Xaml.

    • MVVM. • IoC DI, DependencyService. • Навигация. • ReactiveUI. • TabbedPage. 26
  12. 27 • Сборка. • Отправка билда на устройство. • Тестирование.

    • Диагностика неполадок. • Аналитика.
  13. Резюме • Отличный инструмент для специалистов .Net/C#. • Хорошая производительность.

    • Стандартными средствами можно реализовать практически все. Для остального есть биндинги. • При принятии решения оценивайте риски бизнеса. 28