Slide 1

Slide 1 text

Annyce Davis - @brwngrldev Musings on Kotlin Multiplatform Mobile January 2021

Slide 2

Slide 2 text

@brwngrldev

Slide 3

Slide 3 text

@brwngrldev

Slide 4

Slide 4 text

@brwngrldev

Slide 5

Slide 5 text

My journey How I got started with KMM 1. Attended an AMA 2. Started following devs on Twitter 3. Pulled down a sample app 4. Wrote a sample app 5. Read documentation 6. Watched videos on YouTube @brwngrldev

Slide 6

Slide 6 text

After the AMA I finally started to get it! K otlin K otlin/N ative K M P K M M @brwngrldev

Slide 7

Slide 7 text

Twitter friends What are folks up to with KMM @brwngrldev

Slide 8

Slide 8 text

Todo App Created with KMM plugin @brwngrldev

Slide 9

Slide 9 text

• Ktor • Koin • Kermit • SwiftUI • Jetpack Components Developed with: @brwngrldev

Slide 10

Slide 10 text

Architecture Created with KMM plugin Data model API Repository Dependency Injection Shared code Todo App iOS Project Android Project @brwngrldev

Slide 11

Slide 11 text

Data model Kotlinx Serialization @Serializable data class Todo( @SerialName("id") val id: Int, @SerialName("title") val title: String, @SerialName("completed") val completed: Boolean ) @brwngrldev

Slide 12

Slide 12 text

API Ktor private val httpClient = HttpClient { install(JsonFeature) { val json = Json { ignoreUnknownKeys = true } serializer = KotlinxSerializer(json) } } override suspend fun getAllTodos(): List { return httpClient.get(ENDPOINT) } @brwngrldev

Slide 13

Slide 13 text

Repository Koin and Kermit private val api: TodosApi by inject() private val logger: Kermit by inject() private val todos: MutableList = mutableListOf() @brwngrldev

Slide 14

Slide 14 text

Repository Koin and Kermit private val api: TodosApi by inject() private val logger: Kermit by inject() private val todos: MutableList = mutableListOf() @Throws(Exception::class) suspend fun getAllTodos(forceReload: Boolean): List { logger.i{ "loading todos" } return if (todos.isNotEmpty() && !forceReload) { todos } else { api.getAllTodos().also { todos.clear() todos.addAll(it) } } } @brwngrldev

Slide 15

Slide 15 text

Wasn’t all roses • Struggled with using Koin in the iOS app • Couldn’t figure out how to use the Kermit logger in the iOS app • Android Studio would misbehave often • I didn’t know any SwiftUI Challenges

Slide 16

Slide 16 text

How does KMM compare? @brwngrldev

Slide 17

Slide 17 text

Comparison Standard/KMM/Flutter Standard KMM Flutter Language Learning Curve Maturity Platform UI Community @brwngrldev

Slide 18

Slide 18 text

Comparison Standard/KMM/Flutter Standard KMM Flutter Language ⭐⭐ ⭐⭐ ⭐ Learning Curve Maturity Platform UI Community @brwngrldev

Slide 19

Slide 19 text

Comparison Standard/KMM/Flutter Standard KMM Flutter Language ⭐⭐ ⭐⭐ ⭐ Learning Curve ⭐⭐ ⭐⭐ ⭐ Maturity Platform UI Community @brwngrldev

Slide 20

Slide 20 text

Comparison Standard/KMM/Flutter Standard KMM Flutter Language ⭐⭐ ⭐⭐ ⭐ Learning Curve ⭐⭐ ⭐⭐ ⭐ Maturity ⭐⭐ ⭐ Platform UI Community @brwngrldev

Slide 21

Slide 21 text

Comparison Standard/KMM/Flutter Standard KMM Flutter Language ⭐⭐ ⭐⭐ ⭐ Learning Curve ⭐⭐ ⭐⭐ ⭐ Maturity ⭐⭐ ⭐ Platform UI ⭐⭐ ⭐⭐ ⭐ Community @brwngrldev

Slide 22

Slide 22 text

Comparison Standard/KMM/Flutter Standard KMM Flutter Language ⭐⭐ ⭐⭐ ⭐ Learning Curve ⭐⭐ ⭐⭐ ⭐ Maturity ⭐⭐ ⭐ Platform UI ⭐⭐ ⭐⭐ ⭐ Community ⭐⭐ @brwngrldev

Slide 23

Slide 23 text

Community @brwngrldev

Slide 24

Slide 24 text

@brwngrldev

Slide 25

Slide 25 text

Mascot KroN Kira the Nightingale Meant for illustration purposes @brwngrldev

Slide 26

Slide 26 text

Libraries Official listing from JetBrains https://github.com/AAkira/Kotlin-Multiplatform-Libraries @brwngrldev

Slide 27

Slide 27 text

Video tutorials (see Boring Flutter show) @brwngrldev

Slide 28

Slide 28 text

Recommendations How to get more folks into KMM • Mascot (Kron or Kira) • Listing of available libraries • Social media tips (Multiplatform Mondays) • YouTube content from a variety of creators • More codelabs • Partner with existing groups of iOS and Kotlin influencers • Weekly office hours @brwngrldev

Slide 29

Slide 29 text

Thanks! @brwngrldev