Как создавалось приложение DotNetRu Федотовский Павел, 31.01.2018
О чем доклад Опыт использования Xamarin.Forms при создании DotNetRu App
DotNetRu App Энциклопедия всех встреч юзер-групп Просмотр докладов Новости
DotNetRu App Нужна кроссплатформенность Варианты Нативные приложения React Native Xamarin.Forms …
Использование фич платформ Все делать дважды Разные языки, фреймворки Нативные приложения
Нативные контролы Javascript React Native
Плюсы Xamarin.Forms Создание приложения под “все” платформы с использованием C# + XAML Почему Xamarin.Forms 1. Нормальный язык (С#) 2. XAML 3. Нативные контролы 4. Хорошая документация 5. Бесплатно
Поддерживаемые платформы Platform Backend Status Supported By Android Stable Xamarin iOS Stable Xamarin Tizen Stable Third Party - Samsung UWP Stable Xamarin macOS Preview Xamarin GTK# Early Preview Community WPF Early Preview Community https://github.com/mohachouch/forms- wpf-progress Web? PoC Community https://montemagno.com/building-a- xaml-xamarin-forms-asp-net-website/
Поддерживаемые платформы Platform Backend Status Supported By Android Stable Xamarin iOS Stable Xamarin Tizen Stable Third Party - Samsung UWP Stable Xamarin macOS Preview Xamarin GTK# Early Preview Community WPF Early Preview Community https://github.com/mohachouch/forms- wpf-progress Web? PoC Community https://montemagno.com/building-a- xaml-xamarin-forms-asp-net-website/
iOS 11 65% iOS 10 28% Other 7% iOS: 93% iOS 11 iOS 10 Other Other 19% 5 6% 5.1 19% 6 29% 7 21% 7.1 5% 8.x 1% Android: 80.7% Other 5 5.1 6 7 7.1 8.x
Настройка окружения Xamarin.Forms идет из коробки со студией Windows: Visual Studio 2017 macOS: Visual Studio for Mac Крайне желательно мощное железо  SSD is a must
Настройка Android Реальное устройство • Все просто, включаем Developer Options Эмуляторы (несовместимы между собой!) • Visual Studio Android Emulator • требует Hyper-V • Нет поддержки Google Maps • Google Android Emulator • Несовместим с Hyper-V
Настройка iOS Для сборки требуется macOS => нужен iMac, Mac, MacBook, etc.  Решение: macOS в облаке, e.g. https://macincloud.com Как запустить на реальном устройстве? USB over Network Слишком дорого, проще купить MacBook
Настройка iOS iOS Remote Simulator Работает c ~3 раза  Реальное устройство Можно бесплатно запускать на iPhone/iPad Нет поддержки пуш-уведомлений
Резюме Android Google Android Emulator, если не нужен Hyper-V Очень просто запустить на реальном устройстве iOS Нужна macOS, e.g. https://macincloud.com iOS Remote Simulator
DEMO “Hello, World” in 5 minutes
Подходы Shared Projects Portable Class Libraries .NET Standard https://developer.xamarin.com/guides/cross- platform/application_fundamentals/code-sharing/
Можно использовать нативные API в общем коде #if директивы (ANROID, iOS) Shared Project
Отдельная сборка, можно расшарить Не нужны #if директивы Не хватает API • ToTitleCase • ToShortDateString • Reflection: GetMember Portable Class Library
.NET Standard “Следующий уровень” PCL Спецификация API DotNetRu все еще использует PCL help wanted
Баги
Удаление папок bin/obj https://montemagno.com/easily-clean-bin-obj-folders/ Get-Children . -Include bin,obj -Recurse | For-Each { Remove-Item $_.FullName -Force -Recurse }
Но Open Source! https://github.com/xamarin/Xamarin.Forms http://open.Xamarin.com
Локализация приложения Хочется переключать язык прямо в рантайме Используется Файлы ресурсов (resx) Индексатор Settings Plugin Messaging Center Dependency Service
Высота ListView var adjust = Device.Android ? 1 : - itemsCount + 1; HeightRequest = (itemsCount * RowHeight) - adjust;
Good looking UI?
Good looking UI? BottomNavigationBar Наш пакет, доступен в NuGet https://www.thewissen.io/xamarin-forms-ui-twitter/ https://github.com/sthewissen/KickassUI.Runkeeper
Время сборки https://github.com/brminnick/ImproveXamarinBuildTimes Android: отключить Verify apps over USB
Производительность приложения Из коробки довольно медленно под Android Но прогресс есть  Android Fast Renderers  Startup time improvements https://blog.xamarin.com/5-ways-boost-xamarin-forms-app- startup-time/
Размер приложения iOS – 55 Mb Android – 22.1 Mb Help wanted!
Отладка Live Player Xamarin.Forms Previewer Live Run Current View Нормально не работает ничего 
Forms Previewer Работает очень криво Фокус на Live Player
Live Player Не нужна macOS Позволяет менять код/XAML и тут же видеть результат Много ограничений https://developer.xamarin.com/guides/cross-platform/live/limitations/  Нет поддержки аттрибутов Ни разу не удалось запустить с DotNetRu, куча багов Help wanted!
Live Run Current View Не работает с DotNetRu App Из коробки не работает, нужно вставлять костыли Help wanted!
Third-Party решения https://grialkit.com/gorilla-player/ http://www.livexaml.com/
Подготовка к публикации под iOS Под Windows ничего не работает, куча багов Нужно использовать VS for Mac/Xcode для редактирования Иконки: http://appiconmaker.co/  LaunchScreen
Публикация Нужны аккаунты разработчика Android: 25$ единоразово iOS: 99$ каждый год Visual Studio App Center  Continuos Integration  UI тесты  https://appcenter.ms/apps
Visual Studio App Center После выкладывания жизненный цикл не заканчивается! https://appcenter.ms/apps Нужно установить  Microsoft.AppCenter.Analytics  Microsoft.AppCenter.Crashes
Выводы На Xamarin.Forms разрабатывать можно Все еще куча багов, но стало лучше Open Source – если что, можно допилить С Live Player все будет совсем хорошо 
DotNetRu App GitHub: https://github.com/DotNetRu/App Git Flow – Pull Requests в ветку develop https://github.com/DotNetRu/App/issues Tags help wanted good first issue
Контакты Email: pavel.fedotovsky@outlook.com Telegram: @pfedotovsky

Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»