Compose Multiplatform 101: A declarative framework for sharing UIs across Multiplatform with Kotlin.
Dalinaum (Leonaro YongUk Kim) @ Coupang PayCompose Multiplatform 101A declarative framework for sharing UIs across Multiplatform with Kotlin.
View Slide
Copyright © 2022 Coupang, Inc. All right reserved. ࢎਊػ ݽٚ ౿ ࢚৬ ౿ ۽Ҋ ߂ ࢲ࠺झ ݃ח Ҵ ߂ ӝఋ Ҵоী ١۾غয ח Coupang, inc. ߂/ژח Ӓ ҅ৌࢎ(ాடೞৈ “౿”ۄ ೣ) ੑפ. Ӓ ৻ ৈӝࢲ әػ ഥࢎח ध߹ ݾਵ۽݅ әػ Ѫਵ۽, ౿ ࢎਊػ ӝসݺ ز ഥࢎ ١۾ ࢚ੌ ࣻ ਵݴ ೧ ഥࢎо ױةਵ۽ ز ࢚ী ೠ ة ࣗਬӂਸ оח Ѫਸ ੋפ.ৈӝী ನೣػ ࠁח ਗਵ۽ࢲ ࠄੋ ѐੋ ҃ਸ ߄ఔਵ۽ ೠ Ѫਵ۽ ౿ Ѽ೧ա Ѽਸ աఋղח Ѫ ইשਸ ߋഃ نפ. ౿ ৈӝী ನೣػ ࠁ ࢿա ҕࢿ, ഛࢿ, উࢿী ೧ ഛੋೞ ঋওਵݴ, Ӓী ೠ যځೠ ࣿب ೞ ঋणפ.
1. Introduction
Compose Multiplatformۆ?• Google Jetpack Composeী ӝ߈ೠ JetBrains য়ࣗझ ۽ં• Kotlin Multiplatformী ઓ.• Androidח Kotlin/JVM, ART (Android Runtime)ী ӝ߈ೞৈ زೣ.• iOSח Kotlin/Native ӝࣿী ӝ߈ೞৈ ֎౭࠳ ٘۽ ࠽٘.• Desktop JVM (Java virtual machine)ী ӝ߈ೞৈ ز. (ઑӘ पݎ. ֎౭࠳ ইש)• Web Kotlin/WASM ী ӝ߈ೞৈ ز.• SKIKOܳ Ӓې ۨয۽ ࢎਊ.
ݣ౭ ߔূ٘ Kotlin• নೠ ߔূ٘ܳ ਗ• JVM ߔূ٘• Java bytecodeо ఋѶ• JavaScript ߔূ٘• Native ߔূ٘• LLVM ӝ߈ (LLVM bitcode)
Web Assembly• അੋ ਢ ࠳ۄо ఖೞҊ ח झఖ ӝ߈ о࢚ ݠन.• JVM झఖ ӝ߈, উ٘۽٘ Dalvik ۨझఠ ӝ߈ о࢚ݠन.• WAPM ࢎ ١ীࢲ рױೠ ॆ ٘,C য ٘١ਸ ਢ ࠳ۄী प೯೧ࠅࣻ .• https://wapm.io/python/python(module(func (export "addTwo") (param i32 i32) (result i32)local.get 0local.get 1i32.add))
2. Kotlin Multiplatform
11ݒ֙ ݣ౭ۖಬ ۄ࠳۞ܻח ૐо.
12ౣܽ ݣ౭ۖಬ ই ߬ఋ ױ҅
13Kotlin Multiplatform ۄ࠳۞ܻ
14Kotlin Multiplatformਸ ਤ೧ ਃೠ ѪAndroid Studio ݣ౭ۖಬ গܻா࣌ਸ ٜ݅Ҋ दޛۨఠա ೞ٘ਝযܳ प೯.
15Kotlin Multiplatformਸ ਤ೧ ਃೠ ѪXcodeXcodeח ߔӒۄ٘ীࢲ ࣻ೯ ؽ.Kotlin/Nativeо ઓೞח ߡਸ ࢸ೧ঠ ೣ.
16Kotlin Multiplatformਸ ਤ೧ ਃೠ ѪKotlinMultiplatformMobileউ٘۽٘ झౚ٣য়ীࢲ Kotlin Multiplatform Mobile ۞Ӓੋ ࢸ.
17Kotlin Multiplatformਸ ਤ೧ ਃೠ ѪJDK Android Studioী ೧ ࢸ.Kotlin Plugin Android Studioী ࢸ. সؘܳ ೧ࢲ ߡਸ ୭नച ೧ঠ.
18Kotlin Multiplatformਸ ਤ೧ ਃೠ ѪKDoctor KMPܳ ਤ೧ ਃೠ ജ҃ ח Ѩೞח জ.
19
20Kotlin Multiplatformਸ ਤ೧ ਃೠ ѪCocoaPods KMP SPM(SwiftPackageManager)ܳ ਗೞ ঋ. ( ৵!)
21Kotlin Multiplatform Appਵ۽ ࢜ ۽ંܳ ݅ٞ.
22ಁః ֎ উ٘۽٘/߄ জۢ بݫੋ ࣽਵ۽ ೣ.
23জ ֎ӝࠄਵ۽ androidApp, iosApp, shared۽ জ ֎ ೧.iOS framework distribution Regular۽ Cocoapods -_-ਸ ࢶఖೡ ࣻ .
24androidApp উ٘۽٘ ҙ۲ ٘ח androidApp ইې ਤೣ
25উ٘۽٘חCompose۽ ࢤࢿ ؽ
26iosApp iOS ҙ۲ ٘ח iOSAppী ਤೣ.
27iOSח SwiftUI۽Compose ইתפ.
28
29ߡ ܻח যڌѱ ೮ਸөਃ?expect৬ actualshared/src/commonMainiOS৬ Androidীࢲ ݽف ࢎਊೡ ੋఠಕझܳ expect ఃਕ٘۽ ݅ٞ.
30ߡ ܻח যڌѱ ೮ਸөਃ?expect৬ actualshared/src/androidMainAndroid ҳഅਸ actual ఃਕ٘ܳ ࠢৈ ҳഅ
31ߡ ܻח যڌѱ ೮ਸөਃ?expect৬ actualshared/src/iOSMainiOS ҳഅਸ actual ఃਕ٘ܳ ࠢৈ ҳഅ
32KMP for iOSীࢲ ݅աѱ غח ࢚ടٜObjCഅ Kotlin ObjC݅ ਗ೧ࢲ ઁցܼ ېझ݅ ਗೞҊ ੋఠಕझܳ ਗೞ ޅೣ. Abstract classܳ न ࢎਊ೧ঠ ೣ. (ઁցܼ ࢚ਵ۽ ېझ݅ оמೠ Ѫب ױ) @HinddenFromObjC, @ObjcName ఃਕ٘ܳ ӓਵ۽ ഝਊೞ.@ObjcName(swiftName=“_”) APIܳ झਤ ѱ ೞӝ ਤ೧ ࢎਊೡ Ѫ.plane.fuel(volume: .Gallons(gallons: 12.5)) न plane.fuel(.Gallons(12.5)) ӝਵ۽ח ܽ Swiftܳ ߄۽ ఋѱೡ Ѫ. Swiftܳ ObjeCܳ ઁ৻ೞҊ ߄ੋ٘ೡ ࣻ হӝী ߊࢤೠ ޙઁ.SourceKitten৬ э بҳٜ۽ р ٘ܳ ࢤࢿೞ.ۄੋ ؘ݃ী ѻ য۰Suspendsuspendח ߔ(completion handler) غҊ ߔ Swiftীࢲ async۽ ഐ оמೞ݅ ஂࣗо ࠛоמೣ. Flowب ੜ ਗغ ঋ. Flowо ੋఠಕझҊ KMPਸ ੜਗೞ ޅೣ. (ৈ۞ߣ நझо ਃ) KMP-NativeCoroutines ۄ࠳۞ܻܳ ഝਊ೧ঠ ೣ.https://github.com/rickclephas/KMP-NativeCoroutines ౣܽ ৻о झਤ ೩ٜ۞ ׳ غ ঋਸ ࣻ য @Throws ఃਕ٘۽ Errorܳ ೧ঠ ೣ.
33KMP for iOSীࢲ ݅աѱ غח ࢚ടٜCocoaPodsই ҕधਵ۽ SPM(Swift Package Manager)ܳ ਗೞ ঋ. Gradle API ࣻળীࢲ ܻػ റী ਗೠҊ ೣ. (ઁ?)CocoaPodsח ઓࢿਸ ࣗझ۽ оઉ৬ э ࠽٘ী ࢎਊೞӝী ݒ ࠺ബਯ.TouchLab ۄ࠳۞ܻ KMMBridgeܳ ࢎਊद.https://github.com/touchlab/KMMBridge SPMਸ ೞӝ ਤ೧ࢲח Git ܻನషܻ৬ झక౮ ੌ ࣗо ਃೞ. (AWS?)FrozenGlobal Objectח ӝࠄਵ۽ frozen. Ӕೡ ࣻ ݅ ߸҃ೡ ࣻ হ.@ThreadLocalਸ ࠢݶ freeze ഐ উೣ. Atomicೠ ܐҳઑ ࢎਊ ਃೡ ࣻ . freeze() ഛ ೣࣻܳ ਊ೧ ؘఠܳ ܾ ࣻ Ҋ ಽ ࣻח হ.Global ۽ಌ౭ח ݫੋझۨ٘ীࢲ݅ ࠅ ࣻ .
34KMP for iOSীࢲ ݅աѱ غח ࢚ടٜMemoryManagementझఖ ۨझ ٣ߡӦ য۵Ҋ, ݫݽܻ ݒפݢо ই উח ঋ. https://youtrack.jetbrains.com/issue/KT-55512ଵҊKotlin Multiplatform Mobileਸ ഝਊೠ ؘ݃ী ٘ۄߡজ ѐߊ ঠӝKotlin/Multiplatform for iOS developers : state & future by Salomon Brys
3. Compose for iOS
36Compose Multiplatform iOS Android Applicationమ݁ਸ ਊ೧ࢲ द೧ঠమ݁ https://github.com/JetBrains/compose-multiplatform-ios-android-template
37Compose for iOSܳ ਤ೧ ਃೠ ѪAndroid Studio Android জҗ iOS জܳ प೯ೡ ࣻ ח ѐߊ ജ҃.XcodeXcodeח ߔӒۄ٘ীࢲ ࣻ೯ ؽ.Kotlin/Nativeо ઓೞח ߡਸ ࢸ೧ঠ ೣ.KotlinMultiplatformMobileউ٘۽٘ झౚ٣য়ীࢲ Kotlin Multiplatform Mobile ۞Ӓੋ ࢸ.CocoaPods Compose for iOSب SPM(SwiftPackageManager)ܳ ਗೞ ঋ.
38Compose for iOSܳ ਤ೧ ਃೠ Ѫ
39shared/src/commonMain
40androidApp/src/commonMain
41iosApp/iosApp
42iosApp/iosApp
43Shared/commonMain/resources
44sharedApp/src/iosMain
45 ߸҃೧ࠁח Compose for iOSTextField ୶о TextFieldܳ ୶оೞח ؘݽܳ द.
4. Compose for Desktop
47Compose for Desktop ౠCross-Platformݣ౭ۖಬ ইצ ۽झۖಬਵ۽ ࠙ܨ. JVM ఋѶҊ JVM ؋ী ৈ۞ ۖಬীࢲ بח Ѫਸ ۽झۖಬਵ۽ ࢸݺ.SKIKOSKIA ౣܽ ߄ੋ٬ SKIKOী ೧ ۪؊݂. https://github.com/JetBrains/skikoSKIA ಪ ۪؊݂ ઁ ݃ ׳ۄ झܽ ࢫ పझܳ ೞ ݈.ComposeMultiplatformIDE supportੋభܻઁ ই٣যա উ٘۽٘ झౚ٣য়ী ࢸ.https://plugins.jetbrains.com/plugin/16541-compose-multiplatform-ide-supportIntelliJ IDEA ੋభܻઁ ই٣য 2020.3 ࢚ীࢲ ࢎਊоמ.
48Compose for Desktop ౠଵҊ࢚ You can do desktop too! By Victor Kropphttps://www.youtube.com/watch?v=Mgf_9kxM1BAJDK 15 JDK11ਵ۽ ۽ં ࢤࢿ оמ. ֎౭࠳ ߓನ ಁఃਸ ਤ೧ࢲח 15 ࢚.
49Compose Multiplatform desktop applicationNew Project۽ दೞӝ
50
51
5. Compose for Web
53Compose for Web ౠWebAssemblyJavaScriptܳ ॳ ঋҊ WebAssembly۽ प೯.Kotlin/WASM ఋѶ.ComposeHTMLHTMLਸ ࢤࢿೞח Kotlin/JS ۄ࠳۞ܻب .Compose for Webҗ ޖҙ.ComposeMultiplatformIDE supportੋభܻઁ ই٣যա উ٘۽٘ झౚ٣য়ী ࢸ.https://plugins.jetbrains.com/plugin/16541-compose-multiplatform-ide-supportIntelliJ IDEA ੋభܻઁ ই٣য 2020.3 ࢚ীࢲ ࢎਊоמ.
54WASM ઁ https://github.com/Kotlin/kotlin-wasm-examples
55
56
6. Compose Multiplatformਊ ۄ࠳۞ܻٜ
58
59Glide, Coil উ KamelKamel https://github.com/Kamel-Media/Kamel
60Retrofit, HttpClient -> Ktor (1/3, commonMain)Ktor https://ktor.io/
61Ktor (2/3, androidMain)
62Ktor (3/3, iosMain)
63GSON -> kotlinx.serialization (1/3)kotlinx.serializationhttps://github.com/Kotlin/kotlinx.serialization
64kotlinx.serialization (2/3)
65kotlinx.serialization + Ktor content negotiation (3/3)
66Android ViewModel -> moko-mvvmmoko-mvvm https://github.com/icerockdev/moko-mvvm
67উ ۄ࠳۞ܻpreCompose https://github.com/Tlaster/PreComposeComposeImageLoderhttps://github.com/qdsfdhvh/compose-imageloader
Fin.