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

1,552 views

Published on

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

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,552
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Разработка кроссплатформенных мобильных приложений на C# Андрей Басков Touch Instinct
  2. 2. Кроссплатформенный миф• С + POSIX• Java• HTML + CSS + JS
  3. 3. Особенности мобильных приложений• Контент «на кончиках пальцев»• Короткие сессии• Плохой интернет• Медленные устройства
  4. 4. Нативный UI• Привычен пользователю платформы• Работает быстро• Дает богатые возможности• На каждой платформе свой 
  5. 5. Всеплатформенный UI• Везде выглядит одинаково• Одинаково непривычен для всех пользователей• Зачастую работает медленно• Не используются уникальные особенности платформы
  6. 6. Текущие решения• Appcelerator (ex Titanium) (Javascript)• PhoneGap (HTML5 + Javascript)• Unity (C#)• Flex (Dead)• Monotouch и Monodroid (С#)
  7. 7. Monotouch и Monodroid• Построен на основе Mono• Язык C#• Есть Garbage Collector• Используются родные контроллы для каждой платформы• Приложение компилируется в бинарный код• Быстро работает
  8. 8. Почему мы любим C#• Строгая типизация• Garbage Collector• Properties• Delegates, Events и лямбда-выражения• LINQ• Extension methods• Runtime Generics• Постоянно развивается
  9. 9. 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);
  10. 10. 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]]];
  11. 11. Основные подходы по созданию кроссплатформенных приложений• Четкое разделение бизнес логики и UI• Отдельный проект под каждую платформу, но ссылки на одни и те же файлы• #ifdef’ы для использования схожего функционала, но с разной реализацией не каждой платформе• Xamarin.Mobile
  12. 12. О взаимодействии с сервером• SOAP (XML) – Must DIE!• JSON – лучше, но все равно есть оверхед• Наш выбор – бинарные протоколы сериализации, с tcp или udp транспортом – BinarySerializer – Protobuf – Thrift• Данные должны влезать в один MTU пакет(!)
  13. 13. Фигачим• Простой чат работающий на iPhone, Android, (WP7) и в консоли• Сервер на C#• Протокол общения – Thrift (Бинарная сериализация + TCP)
  14. 14. Код!
  15. 15. Что сделали• Формат данных для общения с сервером• Общий набор файлов с бизнес логикой• Реализацию сервера• UI для каждой из платформ использующий общую бизнес логику
  16. 16. Что еще можно добавить• Один набор Unit тестов для бизнес логики• Геолокацию• Адаптацию thrift под WP7
  17. 17. Windows Phone 7 vs MonoX• В основе WP7 – Silverlight с урезанной BCL• В основе Monotouch и Monodroid – Mono с полноценной BCL• Про это надо помнить
  18. 18. Как оно устроено• В финальный package входит код приложения + те части BCL, которые вы используете + Runtime c GC• В симуляторе обычная JIT компиляция• На девайсе AOT компиляция – на выходе машинный код под armv6/armv7• Нельзя пользоваться Emit’ом, но можно Reflection’ом
  19. 19. Недостатки• Размер приложения • Сложно интегрировать стороние нативные библиотеки (но можно)• Мало примеров, все равно нужно знать родные языки• Для реально качественной разработки нужно знать больше чем нативный девелопер
  20. 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 
  21. 21. Promo Telephony Radio TradingFinance Games
  22. 22. Спасибо за внимание! Андрей Басков Touch Instinct ab@touchinstinct.com @AndreyBaskov +7 906 278 60 87

×