Работали ли вы с Kotlin Multiplatform?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Да, работал. Создавал общую логику для iOS и Android на Kotlin Multiplatform Mobile (сейчас в составе Kotlin Multiplatform).
Использовал Ktor для сетевых запросов, SQLDelight для работы с базой данных и Koin для зависимостей.
Разрабатывал следующие слои:
- Data Layer: Работа с локальными данными и сетью.
- Domain Layer: Бизнес-логика.
UI слой оставался платформозависимым.
Основные преимущества, которые выделил:
- Переиспользование кода: Значительное сокращение дублирования логики.
- Единый язык: Kotlin для обеих платформ.
- Интероперабельность: Нативное взаимодействие с платформенным кодом (Swift/Objective-C и Java/Kotlin).
Выделил также сложности:
- Зрелость экосистемы: Некоторые библиотеки могут быть менее зрелыми, чем на платформоспцифичных стеках.
- Отладка: Отладка кросс-платформенного кода может быть менее тривиальной.
- CI/CD: Настройка CI/CD pipeline требует внимания к специфике 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}!"
}
}
В данном примере Platform является ожидаемым (expect) классом, реализация которого предоставляется на каждой платформе (actual). Greeting использует этот класс для формирования приветствия.
Опыт работы с KMP, хотя и не был основным фокусом, показал потенциал для ускорения разработки и унификации логики в кросс-платформенных проектах.