3. Особенности мобильных
приложений
• Контент «на кончиках пальцев»
• Короткие сессии
• Плохой интернет
• Медленные устройства
4. Нативный UI
• Привычен пользователю платформы
• Работает быстро
• Дает богатые возможности
• На каждой платформе свой
5. Всеплатформенный UI
• Везде выглядит одинаково
• Одинаково непривычен для всех
пользователей
• Зачастую работает медленно
• Не используются уникальные особенности
платформы
6. Текущие решения
• Appcelerator (ex Titanium) (Javascript)
• PhoneGap (HTML5 + Javascript)
• Unity (C#)
• Flex (Dead)
• Monotouch и Monodroid (С#)
7. Monotouch и Monodroid
• Построен на основе Mono
• Язык C#
• Есть Garbage Collector
• Используются родные контроллы для
каждой платформы
• Приложение компилируется в бинарный
код
• Быстро работает
8. Почему мы любим C#
• Строгая типизация
• Garbage Collector
• Properties
• Delegates, Events и лямбда-выражения
• LINQ
• Extension methods
• Runtime Generics
• Постоянно развивается
9. C# code
var context = CIContext.FromOptions (new CIContextOptions () {
UseSoftwareRenderer = true
});
var ciImage = new CIImage (cgImage);
var hueAdjustFilter = new CIHueAdjust {
InputAngle = 3.0f * Math.PI,
Image = ciImage,
};
var colorControlsFilter = new CIColorControls {
InputSaturation = 1.3f,
InputBrightness = 0.3f,
Image = hueAdjustFilter.OutputImage
};
ciImage = colorControlsFilter.OutputImage;
context.CreateImage (ciImage, ciImage.Extent);
11. Основные подходы по созданию
кроссплатформенных приложений
• Четкое разделение бизнес логики и UI
• Отдельный проект под каждую
платформу, но ссылки на одни и те же
файлы
• #ifdef’ы для использования схожего
функционала, но с разной реализацией не
каждой платформе
• Xamarin.Mobile
12. О взаимодействии с сервером
• SOAP (XML) – Must DIE!
• JSON – лучше, но все равно есть оверхед
• Наш выбор – бинарные протоколы
сериализации, с tcp или udp транспортом
– BinarySerializer
– Protobuf
– Thrift
• Данные должны влезать в один MTU
пакет(!)
13. Фигачим
• Простой чат работающий на
iPhone, Android, (WP7) и в консоли
• Сервер на C#
• Протокол общения – Thrift (Бинарная
сериализация + TCP)
15. Что сделали
• Формат данных для общения с сервером
• Общий набор файлов с бизнес логикой
• Реализацию сервера
• UI для каждой из платформ использующий
общую бизнес логику
16. Что еще можно добавить
• Один набор Unit тестов для бизнес логики
• Геолокацию
• Адаптацию thrift под WP7
17. Windows Phone 7 vs MonoX
• В основе WP7 – Silverlight с урезанной BCL
• В основе Monotouch и Monodroid – Mono с
полноценной BCL
• Про это надо помнить
18. Как оно устроено
• В финальный package входит код
приложения + те части BCL, которые вы
используете + Runtime c GC
• В симуляторе обычная JIT компиляция
• На девайсе AOT компиляция – на выходе
машинный код под armv6/armv7
• Нельзя пользоваться Emit’ом, но можно
Reflection’ом
19. Недостатки
• Размер приложения
• Сложно интегрировать стороние нативные
библиотеки (но можно)
• Мало примеров, все равно нужно знать
родные языки
• Для реально качественной разработки
нужно знать больше чем нативный
девелопер
20. Coin Keeper
• Customer: i-Free
• 1st Top Finance (Russia)
• 2nd Top Paid (Russia)
• 3rd Top Grossing (Russia)
• 5th Top Finance US!
• Average 4.5 stars
• Still growing!
• People love it