Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Understanding Kotlin Multiplatform (Busan)
Search
HyunWoo Lee
September 07, 2025
Programming
0
68
Understanding Kotlin Multiplatform (Busan)
Google I/O Extended Busan 2025에서 진행한 Understanding Kotlin Multiplatform의 Speaker Deck입니다.
HyunWoo Lee
September 07, 2025
Tweet
Share
More Decks by HyunWoo Lee
See All by HyunWoo Lee
Navigating Dependency Injection with Metro
l2hyunwoo
1
210
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
1
670
Understanding Kotlin Multiplatform
l2hyunwoo
0
310
파급효과: From AI to Android Development
l2hyunwoo
0
300
선언형 UI에서의 상태관리
l2hyunwoo
0
600
선언형 UI를 학습할 때 알아둬야하는 키워드들
l2hyunwoo
0
500
Essential concepts to know when learning Declarative UI
l2hyunwoo
2
1.6k
React Native under the hood
l2hyunwoo
0
160
유연한 Composable 설계
l2hyunwoo
0
730
Other Decks in Programming
See All in Programming
生成AIを利用するだけでなく、投資できる組織へ
pospome
2
450
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
2.2k
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
7
4.3k
ELYZA_Findy AI Engineering Summit登壇資料_AIコーディング時代に「ちゃんと」やること_toB LLMプロダクト開発舞台裏_20251216
elyza
2
1.1k
Implementation Patterns
denyspoltorak
0
160
dchart: charts from deck markup
ajstarks
3
960
Patterns of Patterns
denyspoltorak
0
480
ThorVG Viewer In VS Code
nors
0
690
[AI Engineering Summit Tokyo 2025] LLMは計画業務のゲームチェンジャーか? 最適化業務における活⽤の可能性と限界
terryu16
2
330
Spinner 軸ズレ現象を調べたらレンダリング深淵に飲まれた #レバテックMeetup
bengo4com
1
220
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
5.4k
副作用をどこに置くか問題:オブジェクト指向で整理する設計判断ツリー
koxya
1
430
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
Odyssey Design
rkendrick25
PRO
0
460
A Soul's Torment
seathinner
4
2.1k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
61
48k
Documentation Writing (for coders)
carmenintech
77
5.2k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
550
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
22k
My Coaching Mixtape
mlcsv
0
23
Rails Girls Zürich Keynote
gr2m
95
14k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
1
36
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
610
Optimizing for Happiness
mojombo
379
70k
Transcript
Understanding Kotlin Multiplatform HyunWoo Lee Android/React Native Engineer, Viva Republica(Toss)
Organizer, GDG Korea Android/Kotlin User Groups Seoul Kotlin Multiplatform: Theory and Practice
2023.12 GDG Devfest Incheon
Kotlin Multiplatform
Kotlin Multiplatform Is it stable?
Kotlin Multiplatform Is it widely used?
Kotlin Multiplatform
Google I/O Extended 25 Google Docs Google Docsח iOS ജ҃ীࢲ
KMPܳ ഝਊೞҊ णפ. ӝઓ ٘৬ ࠺Ү೮ਸ ٸ ࢿמ ରо ѱ ա ঋҊ য়۰ ࠁ ؊ જ ҃ب णפ.
Google I/O Extended 25 উ٘۽٘ ٘о ࢿػ ࢚ടীࢲ ࡅܰѱ iOSীب
ਊೞӝ ਤ೧ ࠺ૉפझ ۽ਸ ҕਬೡ ࣻ ח KMPܳ ఖ೮णפ. Duolingo
Kotlin Multiplatform, Is it good?
Google I/O Extended 25 Advantage of KMP ֎౭࠳ ӝמਸ ࢿמ
ೞ হ Ӓ۽ Virtual Machine ҅க হয ࢿػ ٘о ۖಬ ֎౭࠳ ٘۽ ஹੌؾפ. ੋ ٘ ݃Ӓۨ࣌ оמ ֎౭࠳ ٘۽ ஹੌ غӝী ӝઓ ٘ب ഝਊೡ ࣻ Ҋ ܳ ഝਊ೧ࢲ ࠗ࠙ ਊ, ਊ оמפ. ٘ ࢎਊࢿҗ ࢎਊ ҃ ੌҙࢿ زੌೠ ٘߬झܳ ৈ۞ ۖಬী ҕਬо оמೞৈ ٘ ࢎਊࢿਸ ֫ੌ ࣻ Ҋ ী ٮۄ ۖಬী ޖҙೞѱ زੌೠ ҃ਸ ઁҕೡ ࣻ णפ.
Google I/O Extended 25 01 ࢎਊীѱ “જ” ҃ਸ ઁҕ೧ ࣻ
যঠೠ. 02 ۨਕܳ ഝਊೠ জٜ दীࢲ જ Ѿҗܳ ࠁৈঠ ೠ 03 ೧ ӝࣿਸ ӝ߈ਵ۽ ࢿҕੋ ழܻযܳ ऺ ޙоٜ যঠೠ. Good Framework? KMPח ֎౭࠳ জٜҗ زੌೠ ࢿמਵ۽ ӝמਸ ҳഅೡ ࣻ ٘߬झܳ ҕਬೞҊ ѐߊ दрਸ ױ୷ೞৈ दী ࡅܰҊ উਵ۽ ઁಿਸ ࢶࠁੌ ࣻ ӝઓ Kotlin, Android ޙоٜਸ ഝਊೡ ࣻ
Let’s start! Kotlin Multiplatform
୭नചػ Kotlin Multiplatform మ݁ ࢎਊ ೧ࢲ KMP/CMP জ ઁ оמ
Android Studio
୭नചػ Kotlin Multiplatform మ݁ ࢎਊ ೧ࢲ KMP/CMP জ ઁ оמ
Android Studio
Kotlin Multiplatform Shared Module మ݁ ୶о Android Studio
ӒܻҊ Gradle ٘ܳ झਸ਼ ࠁݶ Target? sourceSet? binaries? framework? kotlin
{ targets .filterIsInstance<KotlinNativeTarget>() .forEach { target -> target.binaries { framework { baseName = "Snup" isStatic = true } } } sourceSets { androidMain.dependencies { implementation(compose.preview) implementation(libs.androidx.activity.compose) } commonMain.dependencies { implementation(projects.feature.preview) implementation(libs.androidx.lifecycle.viewmodel) implementation(libs.androidx.lifecycle.runtimeCompose) implementation(libs.androidx.navigation.compose) implementation(libs.kotlinx.serialization.json) } commonTest.dependencies { implementation(libs.kotlin.test) } } }
Understanding Kotlin Multiplatform Project
ӝࠄਵ۽ • App Module • ৈ۞ѐ subproject(Library Module) ۽ ҳࢿؽ
Android ۽ં ҳࢿ
۽ં ٘ܳ ஹੌೡ ࢚ ఋѶਸ ࢶ ࣗझ ٘ܳ ۖಬ р
ҕਬೡ ࣻ ب۾ ҳࢿ Kotlin Multiplatform ۽ં ҳࢿ
build.gradle plugins { id(“org.jetbrains.kotlin”) id(“com.android.library”) } android { … }
kotlin { … }
build.gradle plugins { id(“org.jetbrains.kotlin.multiplatform”) id(“com.android.kotlin.multiplatform.library”) } kotlin { … }
public fun org.gradle.api.Project.kotlin( configure: org.gradle.api.Action<org.jetbrains.kotlin.gradle.dsl .KotlinAndroidProjectExtension> ): kotlin.Unit { /*
compiled code */ }
public fun org.gradle.api.Project.kotlin( configure: org.gradle.api.Action<org.jetbrains.kotlin.gradle.dsl .KotlinMultiplatformExtension> ): kotlin.Unit { /*
compiled code */ }
• যڃ ۖಬ ই౭ಂܳ ࢤࢿೡ Ѫੋ ೞח Ѫ •
۽ ܴਸ ࠢੌ ࣻب Ҋ ۖಬ ߹۽ ৈ ۞ѐ ఋӥਸ ೡ ࣻ Targets
• Kotlin Toolchainীࢲ ؽ • ٘о جইоח पੋ ജ҃ਸ
• example) iOSSimulatorArm64 Platform
plugins { … } android { namespace = “io.google.extended.busan” compileSdk
= 35 // … } kotlin { … }
plugins { … } kotlin { androidLibrary { namespace =
“io.google.extended.busan” compileSdk = 35 } iosX64 { … } }
Google I/O Extended 25 https://www.jetbrains.com/help/kotlin-multiplatform-dev/ multiplatform-hierarchy.html#manual-configuration
• ஹੌ җীࢲ ܻغח Kotlin ࣗझ ੌ, ઓࢿ, ܻࣗझ ҙ۲
ࠁٜਸ ೞח ҕр • ܲ Source Setী ઓ ҙ҅ܳ ࢸ೧ ٘ ܳ ҕਬೡ ࣻ Ҋ ਃೠ ҃ ழझథ ࣗझࣇਸ ೡ ࣻ Source Sets
kotlin { sourceSets { commonMain.dependencies { … } wasmJsMain {
dependencies { implementation(libs.kotlinx.immutable) } } val nonWasmJsMain by creating { dependsOn(commonMain.get()) } appleMain { dependsOn(nonWasmJsMain) } desktopMain { dependsOn(nonWasmJsMain) } androidMain { dependsOn(nonWasmJsMain) } } }
kotlin { sourceSets { commonMain.dependencies { … } wasmJsMain {
dependencies { implementation(libs.kotlinx.immutable) } } val nonWasmJsMain by creating { dependsOn(commonMain.get()) } appleMain { dependsOn(nonWasmJsMain) } desktopMain { dependsOn(nonWasmJsMain) }
} val nonWasmJsMain by creating { dependsOn(commonMain.get()) } appleMain {
dependsOn(nonWasmJsMain) } desktopMain { dependsOn(nonWasmJsMain) } androidMain { dependsOn(nonWasmJsMain) } } }
val nonWasmJsMain by creating { dependsOn(commonMain.get()) } appleMain { dependsOn(nonWasmJsMain)
} desktopMain { dependsOn(nonWasmJsMain) } androidMain { dependsOn(nonWasmJsMain) }
Google I/O Extended 25 • ݽٕ ղীࢲ ࢶػ ݽٚ ݽٕীࢲ
ࢎਊغח ҕా ٘ܳ ࢿೞח ࣗझࣇੑפ. • ࢶػ ۖಬী ஹੌ ؼ ࣻ ח ٘ܳ ࢿೡ ࣻ݅ ਵݶ commonMainীࢲ ࢿೡ ࣻ णפ. • ݽٕী androidTarget, jvm݅ ࢸ೮ݶ, commonMainীࢲب jvm ఋѶ ٘ܳ ࢿೡ ࣻ णפ. What is “common”? Common ఋѶب, ۖಬب ইתפ.
Understanding Kotlin Multiplatform Publishing
Google I/O Extended 25 JAR/AAR • JVM & Android ࢚
• ӝઓҗ زੌೠ ߑध • Gradleীࢲ ࢎਊೣ Klib • JVM & Android ઁ৻ ఋѶ • Gradleীࢲ ࢎਊೣ XCFramework • iOS ਊ Binary format • Cocoapods/SPM(Swift Package Manager) ഝਊ ೞৈ ࢎਊೡ ࣻ Binary formats
plugins { id(“maven-publish”) } group = “io.google.extended.busan” version = “1.0.0”
publishing { repositories { maven { … } } }
Understanding Kotlin Multiplatform Publishing - iOS
plugins { … } kotlin { // androidLibrary { …
} iosX64 { binaries { framework { baseName = “NunuFramework” } } } build.gradle
Google I/O Extended 25 • ѐߊੌ ٸח ࠽٘ दী ѐߊੋ
Shared Module(KMP Module) ࠽٘ Ѿҗޛਸ জী ನೣೠ • ߓನܳ ೡ ٸীח Gradleীࢲ ۄ࠳۞ܻܳ ࢎਊೞח Ѫۢ Cocoapods, Swift Package Managerীࢲ ߉ਸ ࣻ ب۾ ৻ࠗ ࢲߡী ۨਕܳ ߓನ/ࢸೠ. ৈӝࢲ ੌө? ઁ݅ ೧֬ও iOS জী ֍ ঋও.
cd ${PROJECT_DIR}/path/to/project ./gradlew \ :yourSharedModule:embedAndSignAppleFram eworkForXcode Local Integration
Google I/O Extended 25 Swift Package Manager • Appleীࢲ ӂೞח
Binary package ߓನ ҙܻ ߑध • അ iOS ࢤక҅ Best Practice Apple ҕधੋ Package Manager
Google I/O Extended 25 Swift Package Manager • ./gradlew <your_shared>:assembleXCFramework
• XCFrameworkܳ .zipਵ۽ ݅ • Github Release৬ э ܻݽ ജ҃ী ৢ۰֬ח • Package.swift ੌਸ ࢿೠ • ৻ࠗ ۨನఠܻী Package.swift ੌਸ য֍ח How to deploy “framework”?
Google I/O Extended 25 CocoaPods • iOS ѐߊٜ SPM
ইצ CocoaPodsਸ ࢎਊೞҊ ݶ ఖ оמ • Gradle DSL۽ب ۄ࠳۞ܻ ߓನо оמೣ ઁח ҳध ػ ࢲ٘౭ ಁః ݒפ
Summary
Google I/O Extended 25 CodeLab - Get Started with Kotlin
Multiplatform CodeLab - Migrate existing apps to Room KMP
Thank You HyunWoo Lee Android/React Native Engineer, Viva Republica(Toss) Organizer,
GDG Korea Android/Kotlin User Groups Seoul Kotlin Multiplatform: Theory and Practice