Sobes.tech
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-қа зиян келтірмей қамтамасыз етеді.