Kotlin Multiplatform Mobile - третий путь между нативной и кросс-платформенной разработкой. UI на каждой платформе свой, бизнес-логика - общая. Мы проверили этот подход на двух коммерческих проектах.
Чем KMM отличается от Flutter и React Native
Flutter и RN рисуют свой UI. KMM шарит только бизнес-логику и data-слой, UI - нативный SwiftUI на iOS и Compose на Android. Это убирает главную боль кросс-платформы (UI feel) ценой того, что часть кода всё равно дублируется.
Что в KMM уже работает
- Сетевой слой через Ktor - работает идентично на обеих платформах.
- Локальная БД через SQLDelight - типобезопасные SQL-запросы, общие на iOS и Android.
- Бизнес-логика и валидация - пишется один раз.
- Coroutines + Flow - работают и на iOS (через KotlinX-coroutines).
- Сериализация через kotlinx.serialization - общая для всего проекта.
Что всё ещё сырое
- Compose Multiplatform UI - за пределами Android в 2023-м только для отчаянных.
- Интеграция со Swift в iOS-проекте - Objective-C-headers, ругань на нативные generics.
- Cocoapods-обвязка - местами хрупкая, обновления KMM ломают сборку.
- Документация - лучше, чем была, но провалы в краях ниши заметны.
Кому стоит брать
Командам с двумя нативными приложениями, которые устали дублировать бизнес-логику. KMM позволяет сэкономить 30–40% времени на повторяющихся задачах, не жертвуя UI-качеством. Особенно хорошо подходит для финтех, где модели данных большие и сложные, а UI - относительно простой.
Кому не стоит
- Стартапу с одним инженером - учиться двум платформенным UI-фреймворкам долго.
- Проекту, где UI - основная сложность, а данные - простые.
- Команде, где нет ни одного человека с опытом Kotlin.