Мобильная разработка

Учебник Kotlin Multiplatform для начинающих

26 уроков · 8 разделов · бесплатно, без регистрации

Kotlin Multiplatform (KMP) позволяет писать бизнес-логику один раз и запускать её на iOS, Android, desktop и в вебе, сохраняя при этом нативный UI на каждой платформе. Этот курс ведёт от идеи «общая логика, нативный интерфейс» через механизм expect/actual, общий и платформенный код, сеть на Ktor, сериализацию, корутины, хранение данных и внедрение зависимостей — до Compose Multiplatform, интеропа со Swift, постепенного внедрения в готовое приложение, тестирования, CI и честного сравнения с Flutter, React Native и нативной разработкой. Предполагается, что вы уже знакомы с Kotlin и Android; мы постоянно проводим параллели и не повторяем основы.

Курс «Kotlin Multiplatform: общий код для iOS и Android» состоит из 8 разделов и 26 уроков: Что такое Kotlin Multiplatform и как он устроен, Настройка проекта и сборка, Механизм expect/actual, Сеть, сериализация и асинхронность, Данные, зависимости и архитектура, UI: нативный и Compose Multiplatform, Интероп со Swift и интеграция и Тестирование, CI и зрелость экосистемы. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Что такое Kotlin Multiplatform и как он устроен

    1. Зачем нужен Kotlin Multiplatform

      Проблема дублирования логики между iOS и Android и подход KMP: общий код бизнес-логики при нативном UI.

    2. Бэкенды компилятора: JVM, Native, JS, Wasm

      Как один Kotlin-исходник превращается в байткод JVM, нативный бинарник iOS, JavaScript и WebAssembly.

    3. Анатомия KMP-проекта: source sets

      commonMain, androidMain, iosMain и иерархия исходных наборов: где какой код живёт в KMP-проекте.

  2. 2 Настройка проекта и сборка

    1. Gradle и плагин Kotlin Multiplatform

      Подключение kotlin-multiplatform плагина, объявление целей androidTarget и iOS в build.gradle.kts.

    2. Сборка iOS-фреймворка и подключение к Xcode

      Как KMP собирает .framework/XCFramework и как iOS-приложение импортирует общий модуль в Swift.

    3. Общий и платформенный код в одном модуле

      Как уживаются commonMain и платформенные наборы, и когда выносить логику в общий код.

  3. 3 Механизм expect/actual

    1. expect и actual: объявление и реализация

      Как expect-объявление в общем коде получает actual-реализации на Android и iOS.

    2. expect-классы, свойства и фабрики

      Применение expect/actual к классам и свойствам, и почему фабричная функция часто удобнее expect-класса.

    3. expect/actual против интерфейсов и DI

      Когда выбирать expect/actual, а когда — интерфейс с внедрением зависимостей в KMP.

  4. 4 Сеть, сериализация и асинхронность

    1. Ktor Client: мультиплатформенный HTTP

      Как Ktor Client работает на разных движках (OkHttp, Darwin) и как описать общий API-клиент в KMP.

    2. kotlinx.serialization: модели и JSON

      Сериализация моделей в KMP без рефлексии: @Serializable, кодогенерация и работа с JSON через Json.

    3. Корутины в KMP и нюансы iOS

      Dispatchers, structured concurrency в общем коде и особенности корутин на Kotlin/Native и iOS.

  5. 5 Данные, зависимости и архитектура

    1. SQLDelight: типобезопасная БД

      Как SQLDelight генерирует типобезопасный Kotlin API из SQL и работает на Android и iOS.

    2. multiplatform-settings для простого хранения

      Лёгкое key-value хранилище в KMP поверх SharedPreferences и NSUserDefaults через единый API.

    3. Koin: внедрение зависимостей в KMP

      Как Koin собирает граф зависимостей общего модуля и связывает платформенные реализации.

    4. Архитектура общего модуля и shared ViewModel

      Clean Architecture в KMP, общий ViewModel со StateFlow и граница между общим кодом и нативным UI.

  6. 6 UI: нативный и Compose Multiplatform

    1. Нативный UI поверх общего модуля

      Как Jetpack Compose и SwiftUI подключаются к общему shared ViewModel и его состоянию.

    2. Compose Multiplatform: общий UI

      Что такое Compose Multiplatform, как он делит UI на Android/iOS/desktop/web и его текущий статус зрелости.

    3. Навигация и ресурсы в общем UI

      Навигация и общие ресурсы (строки, изображения) в Compose Multiplatform-проекте.

  7. 7 Интероп со Swift и интеграция

    1. Как Swift вызывает Kotlin

      Генерация Objective-C/Swift API из Kotlin: маппинг типов, suspend-функций и Flow на стороне iOS.

    2. Постепенное внедрение в готовое приложение

      Стратегия миграции на KMP: с какого слоя начать и как подключить общий модуль без переписывания.

    3. Реальный пример: общий слой данных

      Сквозной пример общего слоя данных в KMP: DTO, API, репозиторий и кэш, питающие нативный UI.

  8. 8 Тестирование, CI и зрелость экосистемы

    1. Тестирование общего кода

      Как писать общие тесты в commonTest, мокать платформенные зависимости и запускать тесты под обе платформы.

    2. CI, публикация и сборка под обе платформы

      Нюансы CI для KMP: сборка iOS требует macOS, публикация общего модуля и кэширование Gradle.

    3. Ограничения и подводные камни

      Честный разбор минусов KMP: отладка iOS, размер фреймворка, интероп и зрелость инструментов.

    4. KMP против Flutter, React Native и нативной разработки

      Итоговое сравнение KMP с Flutter, React Native и нативом: что делится, какой UI и когда что выбирать.