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
//...
}
}
Advantages Disadvantages
- Separation on concern
- Kotlin
- No bridges!
- Low commitment
- Learn curve is small
- API in Alpha
- Gradle configuration is
a pain