'

Разработка мобильных приложений для iOS и Android на C#

Понравилась презентация – покажи это...





Слайд 0

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


Слайд 1

C#? Доклад проплачен? Да! (на самом деле нет ?) Лямбда-выражения, делегаты, евенты LINQ Properties Generics Структуры dynamic В С# 5 async/await (ммм как сладко)


Слайд 2

Асинхронный код раньше MyApi.OnSomeMethod += () => { InvokeOnMainThread( (result) => { textView.Text = result; }); } MyApi.SomeMethodAsync();


Слайд 3

async/await textView.Text = await MyApi.GetUrlAsync( “http://touchin.ru”);


Слайд 4

С# vs Objective-C Objective-C: // … [button addTarget:self action:@selector(touchHandler:) forControlEvents:UIControlEventTouchUpInside]; // … -(void) touchHandler:(id)sender { textView.text = @"some text"; }


Слайд 5

С# vs Objective-C C#: btn.TouchUpInside += (sender, e) => { textView.Text = "Clicked!"; } ;


Слайд 6

C# vs Java Java: button.setOnClickListener( new View.OnClickListener() { public void onClick(View v) { textView.setText(“Clicked”); } } );


Слайд 7

C# vs Java C#: button.Click += (sender, e) { textView.Text = “Clicked!”; } ;


Слайд 8

C# vs {0} Проще Чище Развивается очень быстро Меньше скобочек (но еще не Ruby/Python) Из Java песок сыплется [[[[После Objective-C] мир: квадратный] как:очень] ивесь: вдвоеточиях];


Слайд 9

Мир, дружба!


Слайд 10

Mono Свободная реализация стандарта ECMA-334 (C#) и ECMA-335 (CLI) Развивается с 2004 года Основатель – Miguel de Icaza (GNOME, Ximian, Midnight Commander, WINE) Исходники, комьюнити, все как у людей На данный момент поддерживается C# 4.0 и большая часть BCL


Слайд 11

Xamarin Ximian -> Novell -> Attachmate -> Xamarin Продает и саппортит Monotouch + Mono for Android Цены от 399$ за лицензию На сайте отличные туториалы, документация, исходники типичных приложений Выпущено 4 книги https://github.com/xamarin/monotouch-samples


Слайд 12

Ах, да, представиться ? 1.5 года опыта разработки с Monotouch Своя компания разрабатывающая мобильные приложения для iOS, Android, WP7 Активно используем Monotouch, Mono for Android, Mono Наши приложения попадают в топы AppStore и Google Play Шарим код, пишем правильные архитектуры Нам уже год, 17 человек, Kinect, бинбегги, массажистки, блекджек


Слайд 13

Что же такое Monotouch Mono framework с AOT компиляцией для ARM процессоров и Bindings к родным API Код пишется на C# UI используется родной, через C# обертки C#-зированный API (евенты, проперти, енумы) Среда разработки Monodevelop + XCode


Слайд 14

Процесс компиляции Компилируется ваш код, библиотеки, BCL, обертки над нативными методами в IL Теоретически можно юзать любой язык (F#, IronPython, IronRuby, Nemerle, VB для особенных) IL преобразуется в машинный код с использованием AOT компиляции К коду приложения добавляется Mono Runtime с Garbage Collector’ом и всем остальным


Слайд 15

AOT vs JIT Обычно в .Net и Mono машинный код генерируется в момент запуска – Just In Time компиляция В iOS нельзя компилировать код на лету, только статическая линковка Но мы заранее знаем архитектуру (ARM) поэтому можно компилировать код заранее – Ahead Of Time компиляция


Слайд 16

Ограничения AOT Нету Emit, но Reflection остается Некоторые специфичные конструкции работать не будут, т.к. компилируются на лету Generic Virtual Methods P/Invokes in Generic Types Некоторые LINQ expressions


Слайд 17

Linking В момент компиляции в IL из BCL берется только тот код, который реально используется Таким же образом можно вырезать неиспользуемый код в своих либах Нужно для уменьшения размеров приложения


Слайд 18

C#-изация API Подписка на евенты Установка свойств Привычные названия var btn = new UIButton(new RectangleF(0, 0, 200, 80)); btn.Enabled = true; btn.SetTitleColor(UIColor.FromRGB(255, 255, 0), UIControlState.Selected); btn.TouchUpInside += delegate { // your code } ; window.Add(btn);


Слайд 19

Обертки над нативными методами Monotouch: Все сводится к P/Invoke метода objc_msgSend c нужными параметрами См код Monotouch.ObjcRuntime.Messaging Mono for Android: Используется JNI (Java Native Interface)


Слайд 20

Обертки над нативными методами public virtual bool Enabled { [Export("isEnabled")] get { // … return Messaging.bool_objc_msgSend(base.Handle, UIControl.selIsEnabled); } [Export("setEnabled:")] set { // … Messaging.void_objc_msgSend_bool(base.Handle, UIControl.selSetEnabled_, value); } }


Слайд 21

Структура приложения Практически соответствует такой же у нативного приложения AppDelegate, UIWindows, ViewControllers Для описания UI также используются nib файлы


Слайд 22

Дебаг Вместе с дебаг сборкой идет вся отладочная инфа + механизм удаленного дебага Раньше был по Wi-Fi сейчас по USB (быстрее) Дебаг полноценный с breakpoint’ами watch’ами итд


Слайд 23

Garbage Collector Работает ? Агрессивен – может часто вызываться Не забывайте – локальная переменная, значит обязательно соберется сборщиком Говорят что в играх, если много объектов может подтормаживать (актуально для Unity скорее)


Слайд 24

Среда разработки - Monodevelop


Слайд 25

Для UI - XCode


Слайд 26

Интеграция со сторонними либами P/Invoke для С кода btouch для Objective-C Bindings В первый раз сложно, а потом халява Есть готовые обертки для популярных либ: Google Analytics, Flurry и др.


Слайд 27

Минусы Размер (минимум 2-3Мб) Рантайм идет с каждым приложением Производительность (но не критично) Все равно придется учить UIKit/Android UI


Слайд 28

Плюсики Код шаринг (но не забываем про ограниченный WP7) Не надо учить Objective-C (на самом деле нет) Проще разрабатывать (на самом деле быстрее)


Слайд 29

А что на практике А на практике вполне себе хорошо CoinKeeper (iOS + Android + сервер) - удобная архитектура, сокращение кода, багов, времени разработки Наш супер [SecretProject] - тоже все пучком Omlet.ru – 2 недели на аппы под iPad и Android, код шаринг на уровне АПИ, быстро реагировали на изменение АПИ


Слайд 30

Mono for Android Почти тоже самое, за исключением: JIT комплиция, можно EMIT (на андройде вообще все можно, порно, смс вирусы, убиение младенцев) Одновременно живут две машины Mono VM и Dalvik VM GREFs Начиная с Android 1.6 Свой редактор UI в Monodevelop (alpha)


Слайд 31

Кроссплатформенность Шаринг в районе 30-60 процентов кода В основном работа c АПИ, с локальной базой, внутренняя бизнес логика UI все равно переписывается Xamarin.Mobile объединяющий основной мобильный функционал (фото, геолокация) Есть различные MVC фреймворки


Слайд 32

Делайте хорошую архитектуру! Четкое разеделение кода логики и UI Unit test’ы (на девайсе тоже – TouchUnit) Выносим все что можно, делаем общие методя для стандартных операций (Alert, InvokeOnMainThread итд)


Слайд 33

Xobot OS Android переписанный на С# Быстрее обычного андройда из-за особенностей C# Просто концепт


Слайд 34

Риски


Слайд 35

Конкуренты Appcelerator PhoneGap Unity (тоже на Mono работает)


Слайд 36

Вопросы! И да, мы супер активно нанимаем! Пишите! Twitter: @AndreyBaskov Email: ab@touchin.ru Site: touchin.ru


×

HTML:





Ссылка: