22
Разработка кроссплатформенных мобильных приложений на C# Андрей Басков Touch Instinct

Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

  • Upload
    touchin

  • View
    1.319

  • Download
    2

Embed Size (px)

DESCRIPTION

http://mmeetup.ruhttp://touchin.ru

Citation preview

Page 1: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Разработка кроссплатформенных мобильных приложений на C#

Андрей БасковTouch Instinct

Page 2: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Кроссплатформенный миф

• С + POSIX• Java• HTML + CSS + JS

Page 3: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Особенности мобильных приложений

• Контент «на кончиках пальцев»• Короткие сессии• Плохой интернет• Медленные устройства

Page 4: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Нативный UI

• Привычен пользователю платформы• Работает быстро• Дает богатые возможности• На каждой платформе свой

Page 5: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Всеплатформенный UI

• Везде выглядит одинаково• Одинаково непривычен для всех

пользователей• Зачастую работает медленно• Не используются уникальные особенности

платформы

Page 6: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Текущие решения

• Appcelerator (ex Titanium) (Javascript)• PhoneGap (HTML5 + Javascript)• Unity (C#)• Flex (Dead)• Monotouch и Monodroid (С#)

Page 7: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Monotouch и Monodroid

• Построен на основе Mono• Язык C#• Есть Garbage Collector• Используются родные контроллы для

каждой платформы• Приложение компилируется в бинарный

код• Быстро работает

Page 8: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Почему мы любим C#

• Строгая типизация• Garbage Collector• Properties• Delegates, Events и лямбда-выражения• LINQ• Extension methods• Runtime Generics• Постоянно развивается

Page 9: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

C# codevar 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);

Page 10: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Objective-C codeCIContext *context = [CIContext contextWithOptions: [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:kCIContextUseSoftwareRenderer]];CIImage *ciImage = [CIImage initWithCGImage:cgImage]; CIFilter *hueAdjustFilter = [CIFilter filterWithName:@"CIHueAdjust"];CIFilter *colorControlsFilter = [CIFilter filterWithName:@"CIColorControls"]; [hueAdjustFilter setValue:[NSNumber numberWithDouble:3.0 * M_PI] forKey:@"inputAngle"]; [colorControlsFilter setDefaults];[colorControlsFilter setValue:[NSNumber numberWithDouble:1.3] forKey:@"inputSaturation"];[colorControlsFilter setValue:[NSNumber numberWithDouble:0.3] forKey:@"inputBrightness"]; [hueAdjustFilter setValue:ciImage forKey:@"inputImage"];[colorControlsFilter setValue:[hueAdjustFilter valueForKey:@"outputImage"] forKey:@"inputImage"];ciImage = [colorControlsFilter valueForKey:@"outputImage"]; [context [createCGImage: ciImage fromExtent:[ciImage extent]]];

Page 11: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Основные подходы по созданию кроссплатформенных приложений

• Четкое разделение бизнес логики и UI• Отдельный проект под каждую платформу,

но ссылки на одни и те же файлы• #ifdef’ы для использования схожего

функционала, но с разной реализацией не каждой платформе

• Xamarin.Mobile

Page 12: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

О взаимодействии с сервером

• SOAP (XML) – Must DIE!• JSON – лучше, но все равно есть оверхед• Наш выбор – бинарные протоколы

сериализации, с tcp или udp транспортом– BinarySerializer– Protobuf– Thrift

• Данные должны влезать в один MTU пакет(!)

Page 13: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Фигачим

• Простой чат работающий на iPhone, Android, (WP7) и в консоли

• Сервер на C#• Протокол общения – Thrift (Бинарная

сериализация + TCP)

Page 14: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Код!

Page 15: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Что сделали

• Формат данных для общения с сервером• Общий набор файлов с бизнес логикой• Реализацию сервера• UI для каждой из платформ использующий

общую бизнес логику

Page 16: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Что еще можно добавить

• Один набор Unit тестов для бизнес логики• Геолокацию• Адаптацию thrift под WP7

Page 17: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Windows Phone 7 vs MonoX

• В основе WP7 – Silverlight с урезанной BCL• В основе Monotouch и Monodroid – Mono с

полноценной BCL• Про это надо помнить

Page 18: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Как оно устроено

• В финальный package входит код приложения + те части BCL, которые вы используете + Runtime c GC

• В симуляторе обычная JIT компиляция• На девайсе AOT компиляция – на выходе

машинный код под armv6/armv7• Нельзя пользоваться Emit’ом, но можно

Reflection’ом

Page 19: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Недостатки

• Размер приложения • Сложно интегрировать стороние нативные

библиотеки (но можно)• Мало примеров, все равно нужно знать

родные языки• Для реально качественной разработки

нужно знать больше чем нативный девелопер

Page 20: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

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

Page 21: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Promo Telephony Radio Trading

Finance Games

Page 22: Андрей Басков «Разработка кросс-платформенных мобильных приложений на C#»

Спасибо за внимание!

Андрей БасковTouch Instinct

[email protected]@AndreyBaskov+7 906 278 60 87