Slide 1

Slide 1 text

Getting started Kotlin Multiplatform Mohit Sharma Developer Advocate, Realm codeWithMohit WELCOME

Slide 2

Slide 2 text

Agenda ● Intro ● Why KMM ? ● Basics of KMM ● Getting Started ● Code ● Q & A

Slide 3

Slide 3 text

Hi, I’m Mohit 👋 codeWithMohit MongoDB, Ireland Realm Developer Advocate Dubizzle (Olx), Dubai Mobile Evangelist ToTheNew, New Delhi Lead Mobile Developer

Slide 4

Slide 4 text

- Open Source Mobile Database - Object-oriented database - Build for Offline first application - Out of the box data sync - Function, tiggers, Auth, GraphQL

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

Swag ● Tweets with tags @codewithMohit, @realm, @gdg_nd, #KMMRealmWorkshop ● Share your KMM + Realm Github Repo

Slide 7

Slide 7 text

Why KMM?

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Another perspective UI Logic Data Feature

Slide 10

Slide 10 text

70% App Logic 30% UI UI Logic Data Feature UI

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

What is KMM ?

Slide 15

Slide 15 text

Project Structure

Slide 16

Slide 16 text

Project Structure

Slide 17

Slide 17 text

Project Structure

Slide 18

Slide 18 text

Project Structure

Slide 19

Slide 19 text

actual/expect

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

// Common expect fun randomUUID(): String // Android import java.util.* actual fun randomUUID() = UUID.randomUUID().toString() // iOS import platform.Foundation.NSUUID actual fun randomUUID(): String = NSUUID().UUIDString()

Slide 22

Slide 22 text

// Common expect class Platform() { val platform: String } // Android actual class Platform actual constructor() { actual val platform: String = "Android ${android.os.Build.VERSION.SDK_INT}" } // iOS import platform.UIKit.UIDevice actual class Platform actual constructor() { actual val platform: String = UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion }

Slide 23

Slide 23 text

Suspend functions

Slide 24

Slide 24 text

suspend fun loadMovies():MoviesList? { val url = MY_URL return networkService.loadData(url) } func getMovies() { self.networkService?.loadMovies {(movies, error) in //... } }

Slide 25

Slide 25 text

Library Support - Ktor - Kotlinx Serialisation - Realm - AAkria/Kotlin-Multiplatform -Libraries

Slide 26

Slide 26 text

Get Started

Slide 27

Slide 27 text

Agenda

Slide 28

Slide 28 text

Agenda

Slide 29

Slide 29 text

Agenda

Slide 30

Slide 30 text

Agenda

Slide 31

Slide 31 text

Agenda

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

Setting up gradle

Slide 34

Slide 34 text

Setting up gradle

Slide 35

Slide 35 text

Setting up gradle

Slide 36

Slide 36 text

No content

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

Code

Slide 39

Slide 39 text

The decision to use KMM

Slide 40

Slide 40 text

Advantages Disadvantages - Separation on concern - Kotlin - No bridges! - Low commitment - Learn curve is small - API in Alpha - Gradle configuration is a pain

Slide 41

Slide 41 text

Thank you for your time. codeWithMohit