SlideShare a Scribd company logo
Как создавалось
приложение DotNetRu
Федотовский Павел, 31.01.2018
О чем доклад
Опыт использования Xamarin.Forms при создании DotNetRu App
DotNetRu App
Энциклопедия всех встреч юзер-групп
Просмотр докладов
Новости
DotNetRu App
Нужна кроссплатформенность
Варианты
Нативные приложения
React Native
Xamarin.Forms
…
Использование фич платформ Все делать дважды
Разные языки, фреймворки
Нативные приложения
Нативные контролы Javascript
React Native
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Плюсы Xamarin.Forms
Создание приложения под “все” платформы с использованием
C# + XAML
Почему Xamarin.Forms
1. Нормальный язык (С#)
2. XAML
3. Нативные контролы
4. Хорошая документация
5. Бесплатно
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Поддерживаемые платформы
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/
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Можно использовать нативные
API в общем коде
#if директивы (ANROID, iOS)
Shared Project
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
Отдельная сборка, можно
расшарить
Не нужны #if директивы
Не хватает API
• ToTitleCase
• ToShortDateString
• Reflection: GetMember
Portable Class Library
Павел Федотовский «Как мы разрабатывали приложение для DotNetRu на Xamarin.Forms»
.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

More Related Content

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

PPTX
Станислав Сидристый Xamarin
Apps4All
 
PDF
Разработка мобильных приложений на С# с использованием Xamarin
Mikhail Shcherbakov
 
PPTX
Вячеслав Черников (Binwell) | Xamarin на практике
RIF-Technology
 
PPTX
Кросс-платформенная мобильная разработка
Artur Drobinskiy
 
PDF
Xamarin: опыт использования. Дмитрий Адодин
Yandex
 
PPTX
Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]
Binwell
 
PPTX
DevCon 2016 - Xamarin
Anton Shunkov
 
PDF
Xamarin. Кроссплатформенная мобильная разработка на C# @ ForkConf
Andrej Gaevskij
 
PDF
Xamarin. Кроссплатформенная разработка на C#
ForkConf
 
PPTX
2015-12-12 | AzovDevMeetup 2015 | Мобильная разработка: Native, Hybrid, Cross...
JSC “Arcadia Inc”
 
PDF
Clients.MDDay: Нативные приложения vs Кроссплатформенные конструкторы
Anton Maksimov
 
PPTX
Разработка в Vs2015
Tatiana Smetanina
 
PPTX
DevPro-2014: Кроссплатформенное приложение за 15 минут или Беды и победы моби...
Artur Drobinskiy
 
PPTX
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
Binwell
 
PDF
Xamarin: кроссплатформенные грабли, Дмитрий Моисеев, СКБ Контур
it-people
 
PDF
Scino: Developing for Windows Phone [part-1]
SCINO
 
PDF
Разработка кросплатформенных приложений
barbariska89
 
PDF
UniversalApp "убийца" WPF или же это WPF+ ?
GoSharp
 
PPTX
Разработка WinRT приложений для Windows 8: реальный опыт, UA Mobile 2012
Mykhail Galushko
 
PPTX
О пользе DevOps и Xamarin.Forms для разработки бизнес-приложений [RUSSIAN]
Binwell
 
Станислав Сидристый Xamarin
Apps4All
 
Разработка мобильных приложений на С# с использованием Xamarin
Mikhail Shcherbakov
 
Вячеслав Черников (Binwell) | Xamarin на практике
RIF-Technology
 
Кросс-платформенная мобильная разработка
Artur Drobinskiy
 
Xamarin: опыт использования. Дмитрий Адодин
Yandex
 
Архитектура мобильных приложений с примерами на Xamarin.Forms [RUSSIAN]
Binwell
 
DevCon 2016 - Xamarin
Anton Shunkov
 
Xamarin. Кроссплатформенная мобильная разработка на C# @ ForkConf
Andrej Gaevskij
 
Xamarin. Кроссплатформенная разработка на C#
ForkConf
 
2015-12-12 | AzovDevMeetup 2015 | Мобильная разработка: Native, Hybrid, Cross...
JSC “Arcadia Inc”
 
Clients.MDDay: Нативные приложения vs Кроссплатформенные конструкторы
Anton Maksimov
 
Разработка в Vs2015
Tatiana Smetanina
 
DevPro-2014: Кроссплатформенное приложение за 15 минут или Беды и победы моби...
Artur Drobinskiy
 
Правильный Xamarin для мобильных приложений (Microsoft DevCon School 2016) [R...
Binwell
 
Xamarin: кроссплатформенные грабли, Дмитрий Моисеев, СКБ Контур
it-people
 
Scino: Developing for Windows Phone [part-1]
SCINO
 
Разработка кросплатформенных приложений
barbariska89
 
UniversalApp "убийца" WPF или же это WPF+ ?
GoSharp
 
Разработка WinRT приложений для Windows 8: реальный опыт, UA Mobile 2012
Mykhail Galushko
 
О пользе DevOps и Xamarin.Forms для разработки бизнес-приложений [RUSSIAN]
Binwell
 

More from SpbDotNet Community (20)

PPTX
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
SpbDotNet Community
 
PPTX
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
SpbDotNet Community
 
PDF
Константин Васильев «Fody против рутины»
SpbDotNet Community
 
PDF
Слава Бобик «NancyFx для самых маленьких»
SpbDotNet Community
 
PDF
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
SpbDotNet Community
 
PDF
Игорь Лабутин «Коллекционируем данные в .NET»
SpbDotNet Community
 
PDF
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
SpbDotNet Community
 
PDF
Артём Акуляков - F# for Data Analysis
SpbDotNet Community
 
PPTX
Анатолий Кулаков «The Metrix has you…»
SpbDotNet Community
 
PPTX
Роман Неволин «Провайдеры типов без боли и магии»
SpbDotNet Community
 
PDF
Дмитрий Верескун «Синтаксический сахар C#»
SpbDotNet Community
 
PDF
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
SpbDotNet Community
 
PDF
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
SpbDotNet Community
 
PDF
Алексей Мерсон «Domain Driven Design: профит малой кровью»
SpbDotNet Community
 
PPTX
Егор Гришечко «Async/Await и всё, что вы боялись спросить»
SpbDotNet Community
 
PPTX
Михаил Щербаков «Что может быть проще: делегаты и события»
SpbDotNet Community
 
PDF
Никита Каменский «Есть ли жизнь с UWP?»
SpbDotNet Community
 
PPTX
Александр Кугушев «Roslyn: очевидные неочевидности»
SpbDotNet Community
 
PPTX
ДотаНетоЛогия: СПб 2017
SpbDotNet Community
 
PDF
Юрий Волков «VM via F#»
SpbDotNet Community
 
Станислав Флусов «Sharing общих сборок между процессами и доменами в IIS»
SpbDotNet Community
 
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
SpbDotNet Community
 
Константин Васильев «Fody против рутины»
SpbDotNet Community
 
Слава Бобик «NancyFx для самых маленьких»
SpbDotNet Community
 
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
SpbDotNet Community
 
Игорь Лабутин «Коллекционируем данные в .NET»
SpbDotNet Community
 
Станислав Сидристый «Шаблон Lifetime: для сложного Disposing»
SpbDotNet Community
 
Артём Акуляков - F# for Data Analysis
SpbDotNet Community
 
Анатолий Кулаков «The Metrix has you…»
SpbDotNet Community
 
Роман Неволин «Провайдеры типов без боли и магии»
SpbDotNet Community
 
Дмитрий Верескун «Синтаксический сахар C#»
SpbDotNet Community
 
Александр Саитов «Основы профилирования и оптимизации приложений в .NET»
SpbDotNet Community
 
Сергей Лёвкин «Технологии Microsoft для актуальных трендов»
SpbDotNet Community
 
Алексей Мерсон «Domain Driven Design: профит малой кровью»
SpbDotNet Community
 
Егор Гришечко «Async/Await и всё, что вы боялись спросить»
SpbDotNet Community
 
Михаил Щербаков «Что может быть проще: делегаты и события»
SpbDotNet Community
 
Никита Каменский «Есть ли жизнь с UWP?»
SpbDotNet Community
 
Александр Кугушев «Roslyn: очевидные неочевидности»
SpbDotNet Community
 
ДотаНетоЛогия: СПб 2017
SpbDotNet Community
 
Юрий Волков «VM via F#»
SpbDotNet Community
 
Ad

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