Senior
Сіз Kotlin Multiplatform-пен жұмыс істедіңіз бе?
sobes.tech AI
AI-дан жауап
Иә, жұмыс істедім.
Kotlin Multiplatform Mobile (KMM) қолдандым жалпы бизнес-логиканы iOS және Android қосымшаларында жасау үшін.
KMM-нің негізгі артықшылықтары:
- Бизнес-логика үшін жалпы код базасы.
- Нативті UI-фреймворктарды қолдану мүмкіндігі.
- Android-те Java/Kotlin-мен, iOS-те Swift/Objective-C-пен жақсы өзара әрекеттесу.
- Барлық жобаларға біртіндеп енгізу.
KMM қолданудың мысалы:
- Желілік қабат (Ktor).
- Мәліметтер қоры (SQLDelight).
- Preferences-пен жұмыс (Multiplatform Settings).
- Бизнес-логика (ViewModel-дер, Use Cases).
Типтік KMM жобасының құрылымы:
shared: Жалпы модуль.androidApp: Android-қосымша,shared-ке тәуелді.iosApp: iOS-қосымша,shared-ке тәуелді.
KMM-да тәуелділіктерді build.gradle.kts файлында сипатталады, платформаларға арналған блоктарды пайдалана отырып:
// build.gradle.kts shared
kotlin {
// ...
sourceSets {
val commonMain by getting {
dependencies {
// Жалпы тәуелділіктер (Ktor, SQLDelight және т.б.)
}
}
val androidMain by getting {
dependencies {
// Тек Android үшін тәуелділіктер
}
}
val iosMain by getting // iOS-тың нативті тәуелділіктері үшін бос
val iosX64Main by getting
val iosArm64Main by getting
val iosSimulatorArm64Main by getting
}
}
Нативті кодпен өзара әрекеттесу үшін expect/actual механизмдері пайдаланылады:
// commonMain:
expect class Platform() {
fun getPlatformName(): String
}
// androidMain:
actual class Platform actual constructor() {
actual fun getPlatformName(): String {
return "Android ${android.os.Build.VERSION.SDK_INT}"
}
}
// iosMain:
import platform.UIKit.UIDevice
actual class Platform actual constructor() {
actual fun getPlatformName(): String {
return UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion()
}
}
iOS фреймворкін құрастыру Gradle тапсырмасы syncFramework арқылы орындалады:
./gradlew syncFramework
Фреймворк содан кейін Xcode жобасына интеграцияланады.
Маған KMM тәсілі ұнайды, себебі ол кодты қайта пайдалану мүмкіндігін нативті UX-қа зиян келтірмей қамтамасыз етеді.