Привет! Меня зовут Максим, я руководитель мобильной разработки в KTS.

1 ноября состоялся релиз Kotlin 1.9.20, beta компилятора k2. 

Но для нас интереснее глобальное изменение статуса KMP. Мы используем эту технологию в мобильной разработке и написали про неё несколько статей:

Что изменилось с переходом в релиз?

Технология стабильна

На самом деле, она была стабильна и на уровне беты. За почти 2 года работы мы не сталкивались с проблемами, которые заблокировали бы дальнейшее использование технологии. Статус беты означает:

  • вы можете использовать эту технологию, и JB сделает все возможное, чтобы минимизировать проблемы с миграцией

  • технология практически завершена, но не на 100%, поэтому возможны изменения — включая основанные на обратной связи от пользователей

Соблюдение совместимости

Основная часть KMP включает в себя компилятор, библиотеки и другие компоненты, в ней покрываются основные юзкейсы переиспользования кода. Эта часть является стабильной в версии Kotlin 1.9.20. 

Но KMP имеет некоторые более сложные функции, такие как классы expect/actual. Они завершены не полностью и помечены как нестабильные. При их использовании Kotlin предупредит, что они могут измениться в будущих версиях.

Всё это означает, что основная часть KMP стабильна и безопасна для использования, но некоторые более сложные функции могут быть изменены в будущем, и вам нужно быть внимательными, если решите их использовать.

Экосистема

С релизом ввели новый визард и упростили конфигурацию.

Теперь есть новый шаблон для проектов, который автоматически настраивает части кода для разных типов проектов и уменьшает количество избыточного кода, который обычно нужен в сценариях сборки.

Для выявления и решения распространённых ошибок добавили примерно 50 диагностических сообщений в Kotlin Gradle plugin. 

Теперь ошибки сборки будут отображаться более понятно и удобно в среде разработки Xcode.

В течение ближайших недель JB обещают новости о новых улучшениях тулинга.

Kotlin 1.9.0 and earlier (a standard setup)
kotlin {
    androidTarget()
    iosArm64()
    iosSimulatorArm64()

    sourceSets {
        val commonMain by getting

        val iosMain by creating {
            dependsOn(commonMain)
        }

        val iosArm64Main by getting {
            dependsOn(iosMain)
        }

        val iosSimulatorArm64Main by getting {
            dependsOn(iosMain)
        }
    }
}

Kotlin 1.9.20
kotlin {
    androidTarget()
    iosArm64()
    iosSimulatorArm64()

    // The iosMain source set is created automatically
}

База материалов по KMP

JB сам дорабатывает документацию. В ноябре они проведут несколько вебинаров для новичков, где расскажут про технологию и рассмотрят разные сценарии использования KMP.

Также JB активно поощряют пользователей на создание контента, проводят кампании по признанию заслуг сообщества и выделяют отдельных людей. Это не всё: крупные компании начинают пользоваться KMP, и доклады по технологии регулярно появляются на крупных конференциях.

Список компаний, которые уже используют KMP

Всё это популяризирует KMP и увеличивает базу материалов.

Ускорение скорости сборки 

Для повышения скорости сборки внесли несколько улучшений:

Развитие библиотек

JB представил статистику, по которой с 2021 года количество библиотек KMP постоянно растёт:

Вы можете найти популярные библиотеки по многим направлениям в репозитории KMP-Awesome.

Google переводит библиотеки на Kotlin. Команда Android в Google поддерживает пользователей KMP, предоставляя мультиплатформенные версии библиотек Jetpack. Уже готовы совместимые с KMP библиотеки Collections, DataStore, Annotations и Paging.

Улучшение интеропа со Swift

Уже есть инструменты, позволяющие улучшить интероп со Swift, чтобы ios-разработчикам удобнее было использовать KMP в проектах, например SKIE

JB планируют продолжать улучшать интероп и добавить поддержку SwiftPM.

Compose multiplatform

Плюс KMP в возможности выбора того, что шарить: бизнес-логика частично или полностью, или даже UI с Compose Multiplatform. Развитие Compose Multiplatform для iOS даст возможность шарить ещё больше кода. По нашему опыту, сейчас мы экономим 20-25% с использованием KMP.

Compose Multiplatform для Android и десктопной версии стабилен. Поддержка iOS в настоящее время находится в стадии альфа-версии, а поддержка веба (Wasm) является экспериментальной.

В релизах часто улучшается iOS-поддержка, например в релизе 1.5.10 обещают улучшение производительности рендеринга и TextField для iOS, улучшенную совместимость с UIKit, увеличение скорости компиляции для iOS с Kotlin 1.9.20. iOS-бета Compose Multiplatrofm планируется в 2024. 

При этом уже есть кейсы использования Compose Multiplatform для приложений: 

  1. Концепт зарубежного банковского приложения — статья на Medium.


    Уровень усилий, необходимых в различных сценариях, с использованием KMP (KMM) и без

  2. Кейс на канале Kotlin by JetBrains о приложении для оптимизации доставки товара на последнем этап пути, когда груз или посылка должны быть доставлены непосредственно до конечного получателя — last mile delivery

Вывод

Стейбл-версию в KMP можно смело использовать в проде. Даже при том, что технологией можно было пользоваться и раньше, сейчас добавилась гарантия совместимости.

JetBrains активно развивает популярность KMP. Можно предположить, что развитие экосистемы и сообщества сильно поможет распространению.

В продолжение развития ждём Compose Multiplatfotrm iOS, который должен сильно улучшить поддержку iOS и ускорить разработку приложений, где нужно шарить UI между платформами.

Комментарии (8)


  1. regs
    03.11.2023 10:58
    +3

    Я думаю для многих KMP - это KM Player


    1. SHLAKBAUM
      03.11.2023 10:58

      Особенно учитывая, что официальное сокращение Kotlin Multiplatform Mobile - KMM


      1. MAX1993M Автор
        03.11.2023 10:58

  1. DjPhoeniX
    03.11.2023 10:58

    Compose Multiplatform для Android и десктопной версии стабилен

    Что вы называете desktop? Windows? MacOS? Linux? GTK? Qt? X11? Wayland? OpenGL? Vulkan?


    1. Pisaca
      03.11.2023 10:58

      Ага, более того, в отличии от мобильных платформ, на десктопе часто приходится отображать данные в табличной представлении, а КМР вообще в эту степь не могёт.


      1. MAX1993M Автор
        03.11.2023 10:58

        Все-таки не нужно смешивать KMP и Compose multiplatform. KMP не нацелен на реализацию кроссплатформенного UI.

        А различия верстки на мобильном устройстве и десктопе придется учитывать при использовании любой технологии. Но это не значит что нельзя создать адаптивную верстку и переиспользовать UI-элементы.


    1. MAX1993M Автор
      03.11.2023 10:58

      Из платформ поддерживаются Windows, MacOS, Linux. В Compose Multiplatftorm для отрисовки используется Skia. В качестве skia backend могут быть использованы OpenGL/Vulkan/Metal/DirectX


  1. Apollon_Diamed
    03.11.2023 10:58

    Я понимаю, что я скорее всего не ваша целевая аудитория, но все же было бы здорово, если бы в начале статьи был краткий экскурс что такое KMP.