Slide 1

Slide 1 text

Kotlin/Multiplatform What have we been doing for a month without development experience

Slide 2

Slide 2 text

Kotlin/Multiplatform What have we been doing for a month without development experience done

Slide 3

Slide 3 text

Kotlin/Multiplatform What have we been doing for a month without development experience How we suffered done

Slide 4

Slide 4 text

Kotlin/Multiplatform t.me/talanov linkedin.com/in/talanovs Stanislav Talanov New Cloud Technologies

Slide 5

Slide 5 text

DISCLAIMER Я вообще смузи iOS разработчик, права на мнение не имею, как и права тут выступать. Вас предупреждали — вы сами пришли. Тут будет rant не то, что джуна, а вообще трэйни. Еще раз, внимательно, вы слушаете сейчас доклад человека, который еле-еле Gradle осилил (как он тогда думал) за неделю коллективными силами чатика на 50 человек, о чем вообще идет речь? Это абсолютно многострадальная презентация и должна она была выйти еще полгода назад, поэтому тут Франкенштейн из первоначальной версии презентации (Internal), той самой (с) и добавлений в последний момент за день до МосДроида. Если ты джун с горящими глазами — не лезб, оно тебя сожретб!

Slide 6

Slide 6 text

Cold statistics

Slide 7

Slide 7 text

1 month Spare time after work

Slide 8

Slide 8 text

1 developer Without Kotlin experience

Slide 9

Slide 9 text

1 QA Engineer Without development experience

Slide 10

Slide 10 text

Скриншот приложения

Slide 11

Slide 11 text

Why?

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

PLACE FOR YOU

Slide 14

Slide 14 text

Why exactly Kotlin/MPP?

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

React Native Main thread Общая незрелость экосистемы Архитектура в разы сложнее Хороший, качественный код Отсутствие возможности работы с Accessibility JSCore — iOS / Android — ВИРТУАЛЬНАЯ МАШИНА LLVM-несовместимый? “Свой компонент” — даже TextView Royalty? GroundBreaking Changes Future-Proof? Security? Возможность писать без участия Native разработчиков Не может в сторонние библиотеки Ограничения использования API Быстродействие Актуализация кодовой базы – React Native Immaturity - непредсказуемые задержки из-за сырости – Maintaining a Fork of React Native - пришлось делать форк RN и дорого его поддерживать – JavaScript Tooling - сложно масштабировать написанное на JS – Refactoring - тяжело рефакторить RN код – JavaScriptCore inconsistencies - нет JSCore на Android – React Native Open Source Libraries - кривые либы – Parallel Infrastructure and Feature Work - пришлось с нуля наводить мосты между компонентами на RN

Slide 19

Slide 19 text

React Native – React Native Immaturity - непредсказуемые задержки из-за сырости – Maintaining a Fork of React Native - пришлось делать форк RN и дорого его поддерживать – JavaScript Tooling - сложно масштабировать написанное на JS – Refactoring - тяжело рефакторить RN код – JavaScriptCore inconsistencies - нет JSCore на Android – React Native Open Source Libraries - недостаточная поддержка – Parallel Infrastructure and Feature Work - пришлось с нуля наводить мосты между компонентами на RN – Crash Monitoring - не все креши приходили в систему и тяжело дебажились – Native Bridge - не стабильна интеграция с нейтивом – Initialization Time - долго запускается аппа – Initial Render Time - рендер дольше из-за чего мигает UI – App Size - бинарник тяжелее – 64-bit - 64бита на андроиде пока невозомжно – Gestures - приходится отключать сложные жесты – Long Lists - лагают длинные списки – Upgrading React Native - тяжелый апдейт с версии на версию – Accessibility - слабо поддерживаются режимы для инвалидов – Troublesome Crashes - невозпроизводимые креши – SavedInstanceState Across Processes on Android - невозможность сохранить стейт при выключении из фона

Slide 20

Slide 20 text

React Native https://medium.com/airbnb-engineering/sunsetting-react-native-1868ba28e30a https://medium.com/airbnb-engineering/react-native-at-airbnb-the-technology- https://medium.com/airbnb-engineering/building-a-cross-platform-mobile-team-3e1837b40a88 https://habr.com/company/qlean/blog/416097/ https://engineering.udacity.com/react-native-a-retrospective-from-the-mobile-engineering-team-at- udacity-89975d6a8102

Slide 21

Slide 21 text

Scade React/Native Kotlin/Native Flutter Xamarin No third-party IDE for Code / Build ⛔ ⛔ ⚠ ⛔ ⛔ Vendor Independence ⛔ ⚠ ⚠ ⚠ ⛔ Native UI ⚠ ⛔ ✅ ⛔ ⚠ Bridge -> Native ⛔ ✅ ✅ ✅ ⛔ Native for both platforms (iOS/Android) ⛔ ⛔ ✅ ⛔ ⛔

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Kotlin/Native * Kotlin — Boilerplate-free * iOS/Android native support * Kotlin круто * Linux * MacOS * Web Assembly * Windows * and so on…

Slide 24

Slide 24 text

ПРОСТО НЕ ПОЛУЧИТСЯ

Slide 25

Slide 25 text

What is Kotlin/MPP?

Slide 26

Slide 26 text

Kotlin/Multiplatform KOTLIN MESSENGER CORE UI

Slide 27

Slide 27 text

Kotlin/Multiplatform UI Business Logic

Slide 28

Slide 28 text

Kotlin/Multiplatform UI Business Logic Network

Slide 29

Slide 29 text

Kotlin/Multiplatform UI Business Logic Network Data Access

Slide 30

Slide 30 text

Kotlin/Multiplatform KOTLIN MESSENGER CORE UI

Slide 31

Slide 31 text

Kotlin/Multiplatform UI *.framework LLVM LLDB *.* Native Debugger +

Slide 32

Slide 32 text

Kotlin/Multiplatform Sources Kotlin IR LLVM Bitcode LLVM Native binary * Kotlin-frontend * Kotlin Native-backend * Machine Code * System Linker Xcode / Android Studio Gradle LLDB

Slide 33

Slide 33 text

Святослав Щербина Kotlin для написания общего кода под Android и iOS youtu.be/BDTgkXUgXPk

Slide 34

Slide 34 text

Kotlin/Multiplatform KOTLIN MESSENGER CORE UI

Slide 35

Slide 35 text

Kotlin/Multiplatform KOTLIN MESSENGER CORE UI BACKEND / FRONTEND

Slide 36

Slide 36 text

Support

Slide 37

Slide 37 text

Code example protocol RoomProfile { var profileID: String { get } var title: String { get } var abbreviation: String { get } var colorIndex: Int { get } var type: Type { get } } enum Type { case unknown case user(_ id: String) case group } interface RoomProfile {
 val profileID: String
 val title: String
 val abbreviation: String
 val colorIndex: Int
 val type: Type
 } sealed class Type {
 object Unknown: Type()
 class User(val id: String): Type()
 object Group: Type()
 }

Slide 38

Slide 38 text

Code example // Syntax sugar from Swift fun List.joined(separator: String): String { val string = StringBuilder() for (s in this) { if (string.isNotEmpty()) { string.append(separator) } string.append(s) } return string.toString() } fun String.replacingOccurrences(of: String, with: String) = replace(of, with)

Slide 39

Slide 39 text

Minute of my personal butthurt

Slide 40

Slide 40 text

Святослав Щербина Kotlin для написания общего кода под Android и iOS youtu.be/BDTgkXUgXPk

Slide 41

Slide 41 text

* Immutability * Fast pace / Beta * Painful migrations * Android Studio & IDEA have different behaviour * Lack of documentation * Examples don’t match documentation * Heisenbugs, Bohrbugs, Mandelbugs * And more…

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

PLACE FOR YOU

Slide 45

Slide 45 text

The starting point

Slide 46

Slide 46 text

So… Is it a product-ready solution?

Slide 47

Slide 47 text

Cons — Fast-paced beta — You need to participate — There’s no better solution for native*

Slide 48

Slide 48 text

Pros — Common tests — You must write platform-specific code — Scalability

Slide 49

Slide 49 text

Pros — Release — Independence — Open-source

Slide 50

Slide 50 text

Questions? t.me/talanov linkedin.com/in/talanovs Stanislav Talanov New Cloud Technologies