Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемwww.devconf.ru
1 Разработка мобильных приложений для iOS и Android на C# Андрей Басков, Touch Instinct
2 C#? Доклад проплачен? Да! (на самом деле нет ) Лямбда-выражения, делегаты, евенты LINQ Properties Generics Структуры dynamic В С# 5 async/await (ммм как сладко)
3 Асинхронный код раньше MyApi.OnSomeMethod += () => { InvokeOnMainThread( (result) => { textView.Text = result; }); } MyApi.SomeMethodAsync();
4 async/await textView.Text = await MyApi.GetUrlAsync(
5 С# vs Objective-C Objective-C: // … [button addTarget:self forControlEvents:UIControlEventTouchUpInside]; // … -(void) touchHandler:(id)sender { textView.text text"; }
6 С# vs Objective-C C#: btn.TouchUpInside += (sender, e) => { textView.Text = "Clicked!"; } ;
7 C# vs Java Java: button.setOnClickListener( new View.OnClickListener() { public void onClick(View v) { textView.setText(Clicked); } );
8 C# vs Java C#: button.Click += (sender, e) { textView.Text = Clicked!; } ;
9 C# vs {0} Проще Чище Развивается очень быстро Меньше скобочек (но еще не Ruby/Python) Из Java песок сыплется [[[[После Objective-C] мир: квадратный] как:очень] ивесь: вдвоеточиях];
10 Мир, дружба!
11 Mono Свободная реализация стандарта ECMA-334 (C#) и ECMA-335 (CLI) Развивается с 2004 года Основатель – Miguel de Icaza (GNOME, Ximian, Midnight Commander, WINE) Исходники, комьюнити, все как у людей На данный момент поддерживается C# 4.0 и большая часть BCL
12 Xamarin Ximian -> Novell -> Attachmate -> Xamarin Продает и саппортит Monotouch + Mono for Android Цены от 399$ за лицензию На сайте отличные туториалы, документация, исходники типичных приложений Выпущено 4 книги
13 Ах, да, представиться 1.5 года опыта разработки с Monotouch Своя компания разрабатывающая мобильные приложения для iOS, Android, WP7 Активно используем Monotouch, Mono for Android, Mono Наши приложения попадают в топы AppStore и Google Play Шарим код, пишем правильные архитектуры Нам уже год, 17 человек, Kinect, бинбегги, массажистки, блекджек
14 Что же такое Monotouch Mono framework с AOT компиляцией для ARM процессоров и Bindings к родным API Код пишется на C# UI используется родной, через C# обертки C#-зированный API (евенты, проперти, енумы) Среда разработки Monodevelop + XCode
15 Процесс компиляции Компилируется ваш код, библиотеки, BCL, обертки над нативными методами в IL Теоретически можно юзать любой язык (F#, IronPython, IronRuby, Nemerle, VB для особенных) IL преобразуется в машинный код с использованием AOT компиляции К коду приложения добавляется Mono Runtime с Garbage Collectorом и всем остальным
16 AOT vs JIT Обычно в.Net и Mono машинный код генерируется в момент запуска – Just In Time компиляция В iOS нельзя компилировать код на лету, только статическая линковка Но мы заранее знаем архитектуру (ARM) поэтому можно компилировать код заранее – Ahead Of Time компиляция
17 Ограничения AOT Нету Emit, но Reflection остается Некоторые специфичные конструкции работать не будут, т.к. компилируются на лету – Generic Virtual Methods – P/Invokes in Generic Types – Некоторые LINQ expressions
18 Linking В момент компиляции в IL из BCL берется только тот код, который реально используется Таким же образом можно вырезать неиспользуемый код в своих либах Нужно для уменьшения размеров приложения
19 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);
20 Обертки над нативными методами Monotouch: Все сводится к P/Invoke метода objc_msgSend c нужными параметрами См код Monotouch.ObjcRuntime.Messaging Mono for Android: Используется JNI (Java Native Interface)
21 Обертки над нативными методами 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); }
22 Структура приложения Практически соответствует такой же у нативного приложения AppDelegate, UIWindows, ViewControllers Для описания UI также используются nib файлы
23 Дебаг Вместе с дебаг сборкой идет вся отладочная инфа + механизм удаленного дебага Раньше был по Wi-Fi сейчас по USB (быстрее) Дебаг полноценный с breakpointами watchами итд
24 Garbage Collector Работает Агрессивен – может часто вызываться Не забывайте – локальная переменная, значит обязательно соберется сборщиком Говорят что в играх, если много объектов может подтормаживать (актуально для Unity скорее)
25 Среда разработки - Monodevelop
26 Для UI - XCode
27 Интеграция со сторонними либами P/Invoke для С кода btouch для Objective-C Bindings В первый раз сложно, а потом халява Есть готовые обертки для популярных либ: Google Analytics, Flurry и др.
28 Минусы Размер (минимум 2-3Мб) Рантайм идет с каждым приложением Производительность (но не критично) Все равно придется учить UIKit/Android UI
29 Плюсики Код шаринг (но не забываем про ограниченный WP7) Не надо учить Objective-C (на самом деле нет) Проще разрабатывать (на самом деле быстрее)
30 А что на практике А на практике вполне себе хорошо CoinKeeper (iOS + Android + сервер) - удобная архитектура, сокращение кода, багов, времени разработки Наш супер [SecretProject] - тоже все пучком Omlet.ru – 2 недели на аппы под iPad и Android, код шаринг на уровне АПИ, быстро реагировали на изменение АПИ
31 Mono for Android Почти тоже самое, за исключением: JIT комплиция, можно EMIT (на андройде вообще все можно, порно, смс вирусы, убиение младенцев) Одновременно живут две машины Mono VM и Dalvik VM GREFs Начиная с Android 1.6 Свой редактор UI в Monodevelop (alpha)
32 Кроссплатформенность Шаринг в районе процентов кода В основном работа c АПИ, с локальной базой, внутренняя бизнес логика UI все равно переписывается Xamarin.Mobile объединяющий основной мобильный функционал (фото, геолокация) Есть различные MVC фреймворки
33 Делайте хорошую архитектуру! Четкое разеделение кода логики и UI Unit testы (на девайсе тоже – TouchUnit) Выносим все что можно, делаем общие методя для стандартных операций (Alert, InvokeOnMainThread итд)
34 Xobot OS Android переписанный на С# Быстрее обычного андройда из-за особенностей C# Просто концепт
35 Риски
36 Конкуренты Appcelerator PhoneGap Unity (тоже на Mono работает)
37 Вопросы! И да, мы супер активно нанимаем! Пишите! Site: touchin.ru
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.