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

Презентация:



Advertisements
Похожие презентации
Краковецкий Александр Software Developer MCP, Microsoft Regional Director DevCamp Винница.
Advertisements

Мобильная веб разработка Ребров Андрей Luxoft Professional.
Мобильный веб (HTML5) или мобильное приложение (iPhone, Android), что же выбрать? Руслан Жакупов.
Чистый код
Microsoft.NET Первая лекция. COM Доступ к компонентам только через интерфейсы Назначение уникальных идентификаторов компонентам и интерфейсам Регистрация.
От стартапа до бизнеса Андрей Басков, CEO Touch Instinct.
Источник: lwn.net Приложения с открытым кодом Windows SQL Server Windows Server System Center.
JavaScript JavaScript – объектно-ориентированный скриптовый язык программирования, разрабатываемый компанией Sun Microsystems. Является диалектом языка.
Обобщения ( generics) Обобщения – это классы, структуры, интерфейсы и методы, в которых некоторые типы сами являются параметрами. Эти типы перечисляются.
Dynamic Language Runtime Евгений Рыбак. Tieto. Содержание Часть IВведение Часть IIАрхитектура Часть IIIЯдро DLR Часть IVCommon Hosting Часть VВопросы.
ФИЛОСОФИЯ.NET Любому современному программисту, который желает идти в ногу с последними веяниями, каждые несколько лет приходится переучиваться.
Высокоуровневые методы информатики и программирования Лекция 9 Делегаты.
Технология MVC в высоконагруженных проектах Андрей Шетухин Илья Космодемьянский.
«Управление сайтом»: новое и забытое старое Александр Кательников Начальник отдела разработки CSN-Софт.
IronRuby: внутренности и примеры использования Рахматиллаев Тимур IndyCode 3-я конференция.NET разработчиков 25 сентября 2011.
Тестирование iOS как процесс Особенности тестирования мобильных приложений Тревогина Полина Руководитель отдела тестирования.
Мобильная веб-разработка Ребров Андрей. 2 Обо мне Luxoft, 10 ЦСР Разработка мобильных приложений в следующих сферах: логистика; перевозка пациентов; поиск.
©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
1. Теоретические основы операционных систем (планирование заданий и использования процессора, обеспечение программ средствами коммуникации и синхронизации,
ДЕЛЕГАТЫ Лекция 7 1. Зачем нужны делегаты 2 И данные, и код располагаются в памяти компьютера по определенным адресам. Передача адресов данных в C# происходит.
Транксрипт:

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

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

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

async/await textView.Text = await MyApi.GetUrlAsync(

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

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

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

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

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

Мир, дружба!

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

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

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

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

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

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

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

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

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);

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

Обертки над нативными методами 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); }

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

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

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

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

Для UI - XCode

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

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

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

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

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

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

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

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

Риски

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

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