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

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

on

  • 1,465 views

http://mmeetup.ru

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

Statistics

Views

Total Views
1,465
Views on SlideShare
1,465
Embed Views
0

Actions

Likes
0
Downloads
8
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Разработка кроссплатформенных мобильных приложений на 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 TradingFinance Games
    • Спасибо за внимание! Андрей Басков Touch Instinct ab@touchinstinct.com @AndreyBaskov +7 906 278 60 87