Similar presentations:
Один код, две платформы: миф или реальность
1.
Потяков Виталий / Руководитель мобильной разработкиИвлев Александр / Ведущий программист
Разработка мобильного СБИС, 2017
2.
● Введение● Фреймворки
● Web-приложения
● Native UI, C++ Back
● CouchBase
● Итог
3.
Нашеприложение
4.
ХотимМобильное приложение
Нативный интерфейс
Offline режим
Удобство разработки
5.
Мобильные платформы73%
19%
>1%
6.
Реклама7.
XamarinНативен
С# как язык
Единый код
3 платформы
7
8.
А что не так?8
9.
XamarinКривой интерфейс
Глючная среда
Баги
Где найти специалистов?
9
10.
Гибриды● PhoneGap
● Cordova
● Ionic
● Monaca, Taco… ой
10
11.
Нативнаяразработка
11
12.
ЯзыкиSwift / Obj-C
Kotlin / Java
C++ / C
djinni
12
13.
IDEXcode / AppCode
Android Studio
VS / CLion / Console
13
14.
А оно тогостоит?
14
15.
Что хорошо?● Единая Бизнес Логика
● Классные специалисты
● Идеальный интерфейс
● Параллельная разработка
15
16.
А что плохо?● Дорогая разработка
● Коммуникация команд
● Дублирование интерфейса
● Мосты между языками
16
17.
МостыJinni для Java
C для Obj-c/Swift
djinni
17
18.
Мост из ObjC в C++@interface Test : NSObject
+ (int32_t)func(NSString*)s;
@end
@implementation Test
+ (int32_t)func:(NSString*)s {
return SomeCppClass::Func(std::string([s UTF8String],
[s lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);
}
@end
18
19.
Мост из Java в C++jint JNICALL Java_Test_func(JNIEnv* jniEnv, jobject, jstring js) {
const jsize len = env->GetStringLength(js);
const jchar* c = env->GetStringChars(js, nullptr);
std::string s = Utf16ToUtf8(std::string(c, len));
env->ReleaseStringChars(js, c);
return SomeCppClass::Func( s );
}
19
20.
И так каждыйраз…
20
21.
DJINNIuser = record {
name: string;
birthday: date;
}
users_storage = interface +c {
static instance(): users_storage;
find_user(id: i32): optional<user>;
}
21
22.
И вроде всехорошо
22
23.
Что делаетbackend?
Взаимодействие с API
Кэширование
Актуализация кэша
24.
Типичный модульCloud
UI
API
БЛ
25.
Идея!На сервер реплику БД
Не взаимодействуем с API
Наполняем всегда реплику
26.
Реплика на сервереAPI + БЛ
Sync
БЛ
27.
Есть решенияRealm
Firebase
Couchbase
28.
CouchbaseLite
Sync
Gateway
Couchbase
Server
29.
СouchBase● NO SQL
● View (Indexes)
● Live Query
● Репликация
30.
Sync GatewayCBL
Sync Gateway
Change Feed
БЛ
Doc update
CB
CB
CB
31.
CouchbaseServer
Хранит реплики
Не используем на прямую
32.
Что дальшe?Общий
интерфейс!
33.
FacebookAD Manager
80-85% общего кода
9 месяцев iOS
5 месяцев Android
34.
Так вот оно!JS как язык
Один поток JS
Платформо-зависимый код
35.
В общемслучае миф!
36.
Framework● Быстрый старт
● Прототипирование
● Не native интерфейс
● Мини приложения
37.
С++● Сложная БЛ
● Мосты
● Есть программисты
● Дублирование интерфейса
38.
CouchBase● Большие проекты
● Сложность вхождения
● Серверная инфраструктура
39.
Ищите свойпуть!