Sobes.tech
Senior

Работили ли сте с Kotlin Multiplatform?

sobes.tech AI

Отговор от AI

Да, работих по този въпрос. Създадох обща логика за iOS и Android с помощта на Kotlin Multiplatform Mobile (сега част от Kotlin Multiplatform).

Използвах Ktor за мрежови заявки, SQLDelight за работа с бази данни и Koin за управление на зависимости.

Разработих следните слоеве:

  • Слой данни: Работа с локални данни и мрежа.
  • Слой домейн: Бизнес логика.

UI слойът остана зависим от платформата.

Основните предимства, които подчертах:

  • Повторна употреба на код: Значително намаляване на дублирането на логика.
  • Единен език: Kotlin за двете платформи.
  • Интероперабилност: Нативно взаимодействие с платформения код (Swift/Objective-C и Java/Kotlin).

Също така подчертах някои трудности:

  • Зрелост на екосистемата: Някои библиотеки може да са по-малко зрели в сравнение с платформено-специфичните стекове.
  • Отстраняване на грешки: Отстраняването на грешки в кода за множество платформи може да бъде по-малко интуитивно.
  • CI/CD: Настройката на CI/CD pipelines изисква внимание към спецификите на KMP.

Ето пример за прост клас от общ модул:

// commonMain
expect class Platform() {
    val name: String
}

// androidMain
actual class Platform actual constructor() {
    actual val name: String = "Android ${android.os.Build.VERSION.SDK_INT}"
}

// iosMain
actual class Platform actual constructor() {
    actual val name: String =
        UIDevice.currentDevice.systemName() + " " + UIDevice.currentDevice.systemVersion
}

// commonMain
class Greeting {
    private val platform: Platform = Platform()

    fun greet(): String {
        return "Hello, ${platform.name}!"
    }
}

Опитът с KMP, макар и да не беше основният фокус, показа потенциала за ускоряване на разработката и обединяване на логиката в мултиплатформени проекти.