CodeFest 2012. Кашкута И. — Серебряная пуля...

Post on 28-May-2015

946 views 4 download

Tags:

Transcript of CodeFest 2012. Кашкута И. — Серебряная пуля...

Серебряная пуля кроссплатформенной разработки

мобильных приложений

Игорь Кашкута@XRazont

Смартфонов много

iOS

Android

Windows Mobile Symbian

iOS

Windows Phone 7

Blackberry

Android

Windows Mobile

Symbian

Bada

Windows Phone 7Blackberry

Meego

Symbian

Смартфонов очень много

iOS

AndroidWindows Mobile Symbian

iOS

Windows Phone 7

Blackberry

Android

Windows Mobile

Symbian

Bada

Windows Phone 7

Blackberry

Meego

Symbian

Symbian

Symbian

Bada

Bada

Windows Phone 7 Windows Phone 7

Android

Android

Symbian

Symbian

Meego

Windows Phone 7

Windows Phone 7

Windows MobileWindows Mobile

Android

Android

SymbianSymbian

iOS

iOS

Blackberry

Blackberry

Windows Mobile

Windows Mobile iOS

iOS

Blackberry

Blackberry

iOS

iOS

iOS

Android

Android

Android

iOS

Смартфонов ужасно много

iOS

AndroidWindows MobileSymbian

iOS

Windows Phone 7

Blackberry

Android

Symbian

Bada

Windows Phone 7

Blackberry

Meego

Symbian

Symbian

Symbian

Bada

Bada

Windows Phone 7Windows Phone 7

Android

Android

Symbian

Symbian

Meego

Windows Phone 7

Windows Phone 7

Windows MobileWindows Mobile

Android

Android

Symbian

Symbian

iOS

iOS

Blackberry

Blackberry

Windows Mobile

Windows Mobile iOS

iOS

Blackberry

Blackberry

iOS

iOS

iOS

Android

Android

Android

iOS

iOS

Android

Windows Mobile

Symbian

iOS

BlackberryAndroidSymbian

Bada

Blackberry

Meego

Symbian

Symbian

Bada

Bada

Windows Phone 7

Android

Android

Symbian

Symbian

Meego

Android

Android

SymbianSymbian

iOS

iOS

Blackberry

Blackberry

iOS

iOS

Blackberry

Blackberry

iOS

iOSiOS

Android

Android

Android

iOS

iOS

Android

Windows Mobile

Symbian

iOS

Android Symbian

Bada

Blackberry

Meego

Symbian

Symbian

Symbian

Bada

Bada

Windows Phone 7

Android

Android

Symbian

Symbian

Meego

Windows Phone 7

Windows Mobile

Windows Mobile

Android

Symbian

iOS

iOS

BlackberryBlac

kber

ry

Windows Mobile

Windows Mobile

iOS

iOS

Blackberry

Blackberry

iOS

iOS

iOS

Android

Android

Android

iOS

Вакуум

Вакуум

ВакуумВакуум

Вакуум

Вакуум

Вакуум

Вакуум

Вакуум

Вакуум

Вакуум

Вакуум

Конь Вакуум

Вакуу

м

1.

Мобильный 2ГИС

Справочник 3D Карта Поиск проезда

Справочник 3D Карта Поиск проезда

Offline!

Мобильный 2ГИС

ПриложениеКарта

Поиск Данные(файл) Обновления

ПозиционированиеФильтры

Сортировки

Проезд

Мобильный 2ГИС

Четыре платформы:

Мобильный 2ГИС

Идея

• Общий код — работает везде

• Нативный код — пишется каждый раз

Qt

• Windows Mobile и Symbian — из коробки• Наши порты на Android и iOS

•Базовый класс объекта•Строки•Контейнеры•Файлы•Потоки

QtCore

Qt

{

•Сокеты•HTTPQtNetwork

Qt

{

QtGui

Qt

{ •Контролы•Пользовательский ввод

QObject1• Signal1(int)• Signal2(QString)• Signal3(QString)

QObject2• Slot1(int)• Slot2(int)• Slot3(QString)

Асинхронно Межпоточно

Слоты и сигналы

Qt и iOS

• Только QtCore• QAbstractEventDispatcher

Qt и iOS

Интеграция с XСode:• QtCore static fat library• Custom Build Step(moc-компиляция)

Сеть

HTTPRequestQtNetwork

NSURLConnectionAndroid, Windows Mobile и Symbian

iOS }

GPS

iOSAndroid

Windows MobileSymbian

LocationService}

Phone

iOSAndroid

Windows MobileSymbian

PhoneDialer}

SMS

iOSAndroid

Windows MobileSymbian

SmsSender}

Browser

iOSAndroid

Windows MobileSymbian

WebOpener}

Интерфейс

QtGuiAndroidSymbian

Windows Mobile

UIKitiOS

Бизнес-логика

UIKitQtGui

80%

20%

Общий код

База данныхСеть

Общий код Нативный код

Точка счастья

Мы

2.

iOS Android WP7Blackberry

Evernote

Evernote Cloud API

Blackberry

Windows Phone 7

iOS

Android

API

Apache Thrift

ServiceC++

Ruby

Python

JavaPHP

C#

Objective-C

Генерирует нативный код

C++std::vector<std::string>

JavaArrayList<String>

Apache Thrift

Evernote Cloud APIBlackberry

Windows Phone 7

iOS

Android Thrift

Thrift API

3.

Списки

Ячейки списков

Аватар

Full Name Username

Прошедшее времяТвит

Three20

• Написан на Objective-C• Огромен и могуч• Слабо документирован• Больше не развивается

И это только одна платформа!

Клиентский веб

iOS Web Android

WebView

Internet/Memory

iOS/Android

Клиентский веб

ПриложениеNative Code

Прямой контроль

• Обновления «на лету»

• Сложно• Теряется нативность поведения

Проблемы

• Та же идея• Поддерживают большинство платформ

Фреймворки

Wikipedia Mobile App

• С/C++

• Генерация кода

• Client Web + Native Bridges

Итог

Вопросы?

Игорь Кашкута@XRazont