Upload
touchin
View
1.319
Download
2
Embed Size (px)
DESCRIPTION
http://mmeetup.ruhttp://touchin.ru
Citation preview
Разработка кроссплатформенных мобильных приложений на C#
Андрей БасковTouch Instinct
Кроссплатформенный миф
• С + POSIX• Java• HTML + CSS + JS
Особенности мобильных приложений
• Контент «на кончиках пальцев»• Короткие сессии• Плохой интернет• Медленные устройства
Нативный UI
• Привычен пользователю платформы• Работает быстро• Дает богатые возможности• На каждой платформе свой
Всеплатформенный UI
• Везде выглядит одинаково• Одинаково непривычен для всех
пользователей• Зачастую работает медленно• Не используются уникальные особенности
платформы
Текущие решения
• Appcelerator (ex Titanium) (Javascript)• PhoneGap (HTML5 + Javascript)• Unity (C#)• Flex (Dead)• Monotouch и Monodroid (С#)
Monotouch и Monodroid
• Построен на основе Mono• Язык C#• Есть Garbage Collector• Используются родные контроллы для
каждой платформы• Приложение компилируется в бинарный
код• Быстро работает
Почему мы любим C#
• Строгая типизация• Garbage Collector• Properties• Delegates, Events и лямбда-выражения• LINQ• Extension methods• Runtime Generics• Постоянно развивается
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);
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]]];
Основные подходы по созданию кроссплатформенных приложений
• Четкое разделение бизнес логики и UI• Отдельный проект под каждую платформу,
но ссылки на одни и те же файлы• #ifdef’ы для использования схожего
функционала, но с разной реализацией не каждой платформе
• Xamarin.Mobile
О взаимодействии с сервером
• SOAP (XML) – Must DIE!• JSON – лучше, но все равно есть оверхед• Наш выбор – бинарные протоколы
сериализации, с tcp или udp транспортом– BinarySerializer– Protobuf– Thrift
• Данные должны влезать в один MTU пакет(!)
Фигачим
• Простой чат работающий на iPhone, Android, (WP7) и в консоли
• Сервер на C#• Протокол общения – Thrift (Бинарная
сериализация + TCP)
Код!
Что сделали
• Формат данных для общения с сервером• Общий набор файлов с бизнес логикой• Реализацию сервера• UI для каждой из платформ использующий
общую бизнес логику
Что еще можно добавить
• Один набор Unit тестов для бизнес логики• Геолокацию• Адаптацию thrift под WP7
Windows Phone 7 vs MonoX
• В основе WP7 – Silverlight с урезанной BCL• В основе Monotouch и Monodroid – Mono с
полноценной BCL• Про это надо помнить
Как оно устроено
• В финальный package входит код приложения + те части BCL, которые вы используете + Runtime c GC
• В симуляторе обычная JIT компиляция• На девайсе AOT компиляция – на выходе
машинный код под armv6/armv7• Нельзя пользоваться Emit’ом, но можно
Reflection’ом
Недостатки
• Размер приложения • Сложно интегрировать стороние нативные
библиотеки (но можно)• Мало примеров, все равно нужно знать
родные языки• Для реально качественной разработки
нужно знать больше чем нативный девелопер
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
Promo Telephony Radio Trading
Finance Games