Как стать автором
Обновить
239.78
KTS
Создаем цифровые продукты для бизнеса

Compose Multiplatform 1.8.0: поддержка iOS переходит в stable

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.4K

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

Мы разрабатываем приложения на KMP еще с 2021 года, а в прошлом году начали экспериментировать с Compose Multiplatform. Вчера JetBrains официально объявили о выходе CMP 1.8.0, c которой поддержка iOS переходит в статус stable. Это важный этап, поскольку теперь CMP можно всерьез рассматривать как основу для кроссплатформенной мобильной разработки.

В этой статье мы познакомимся с обновлением и рассмотрим заявленные фишки, а заодно поговорим о результатах наших опытов с CMP на ‭«боевом» проекте.

Оглавление

Общее представление

В анонсе новой версии JetBrains утверждают, что функциональность CMP в основных юзкейсах теперь полностью соответствует Jetpack Compose, навигация между экранами стала безопасной и позволяет использовать deeplinks, управление ресурсами стало более гибким, а фишки доступности в iOS (VoiceOver, Assistive Touch, Full Keyboard Access) в новой версии поддерживаются.

Все основные API работают стабильно, а разработчики дают гарантии обратной совместимости и ручаются, что будущие изменения не будут ее ломать. 

Также появился официальный каталог библиотек и проектов KMP, в то время как ранее использовались списки типа kmp-awesome. 

Еще одно важное новшество, заявленное в анонсе — более нативные ощущения от приложений на CMP для пользователей iOS. По словам JetBrains, новая версия технологии обеспечивает:

  • привычную физику скролла;

  • редактирование текста с нативным выделением;

  • поддержку RTL;

  • нативный drag-and-drop;

  • адаптивность UI под системные настройки (размер шрифта, контрастность);

  • интуитивно понятную навигацию.

Производительность

Касаясь темы производительности, JetBrains утверждают, что время запуска приложений на CMP сопоставимо с временем запуска нативных приложений, а скорость скролла в UI на CMP такая же и даже чуть выше, чем в SwiftUI:

График из блога JetBrains: https://blog.jetbrains.com/kotlin/2025/05/compose-multiplatform-1-8-0-released-compose-multiplatform-for-ios-is-stable-and-production-ready/

Надо сказать, что отсутствие тестов со 120 FPS вызывает небольшие вопросы: по какой-то причине граница испытаний на графике проходит на 60 FPS. Тем не менее, для 60 FPS это действительно впечатляющий результат.

Мы внутри проверили производительность у себя в приложении CMP. Мы не ставили цель сделать максимальную производительность в приложении, в таком случае CMP стабильно выдает 80-90 FPS.

Ребята даже хвастаются результатами опроса, согласно которому всего 3,6 % команд разработки недовольны или сильно недовольны производительностью своих iOS-приложений на CMP:

Результаты опроса из блога JetBrains: https://blog.jetbrains.com/kotlin/2025/05/compose-multiplatform-1-8-0-released-compose-multiplatform-for-ios-is-stable-and-production-ready/

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

Если вы тоже планируете переводить вашу нативную разработку UI на кроссплатформенную, то учтите, что из-за CMP кроссплатформенные приложения будут весить немного больше, чем нативные. По словам разработчиков, с новой версией технологии эта разница составляет примерно 9 МБ, но я бы советовал перепроверять это утверждение для конкретных приложений.

Инструментарий и техника

Во-первых, JetBrains анонсировали скорый выход нового плагина KMP для IntelliJ IDEA и Android Studio, который обеспечит поддержку Compose Previews в общем коде. Тут стоит сказать, что в последних IDEA (начиная с IntelliJ IDEA 2025.1 EAP) в commonMain тоже завезли функцию Preview. В любом случае, прямо сейчас, пока плагин еще не вышел, Preview можно заводить в Android-таргете. Это не очень удобно, но такая опция у вас есть; хочется верить, что с новым плагином пользоваться Preview станет сильно проще.

Во-вторых, разработчики акцентируют внимание на том, что в CMP уже поддерживается Hot Reload. Правда, пока только для Desktop-таргета, поэтому имейте в виду, что для его использования придется немного повозиться с настройками проекта и подключить сборку десктопной версии приложения. Сделать это несложно, и разницы в интерфейсах десктопной и мобильной версий тоже не будет, так что пользоваться Hot Reload можно уже в текущем виде.

В-третьих, кодовая база CMP переведена на компилятор K2. О том, что это и как он ускоряет компиляцию Kotlin, можно почитать в моей прошлогодней статье.

И, наконец, Compose Multiplatform расширяется и для веба: с новой версией фреймворка библиотека Navigation получила поддержку браузерной истории, а также появилась возможность кастомизации курсора и поддержка предзагрузки ресурсов.

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

Наш опыт

Как я уже отметил в начале, KMP мы используем с 2021 года, а CMP решили попробовать в 2024. Первый эксперимент мы провели, когда разрабатывали приложение на Android и KMP, и из любопытства захотели перенести UI на iOS. Результаты уже тогда нас порадовали:

Слайд из нашей презентации для Podlodka Andoid Crew с результатами эксперимента
Слайд из нашей презентации для Podlodka Andoid Crew с результатами эксперимента

Потом мы пробовали встраивать CMP-компоненты в приложение, которое было разработано чисто под iOS, но с KMP-частью. Мы переиспользовали компоненты на CMP из других проектов и подготовили интерфейс в несколько раз быстрее, чем на SwiftUI, не потеряв при этом на производительности и анимациях. Тогда мы смогли глубже разобраться в разработке на CMP для iOS и убедились, что использование фреймворка не влечет за собой критических проблем.

И недавно мы испытали фреймворк на полноценном «боевом» проекте: начали писать приложение сразу на CMP, и в итоге реализовали версии приложения для Android и iOS с 97,7 % общего кода. Правда, в нашем случае такая высокая доля общего кода объясняется тем, что в проекте практически не было платформенно-зависимой функциональности: на Swift нам пришлось дописать только кастомную камеру, и мы потратили на это всего 2 дня работы.

Подробнее о нашем пути с CMP мы рассказали на Podlodka Android Crew: там мы делимся не только приятными впечатлениями от фреймворка, но и рассказываем о подводных камнях. В частности, в докладе мы касаемся проблем с навигацией, с анимациями и с bottomsheet, которые возникли у нас при работе с более ранними версиями Compose Multiplatform.

Выводы

Пока сложно утверждать, что все шероховатости предыдущих версий CMP были исправлены в обновлении — это покажет только практика. Но судя по заявлениям JetBrains, они явно двигают свой фреймворк в правильном направлении.

Сами мы однозначно испытаем CMP 1.8.0 в ближайшее время и оценим, насколько нововведения реально решили проблему с анимациями и навигацией, которые не ощущались нативными в iOS-версии. Ну и, разумеется, испытать производительность приложений на CMP при 120 FPS тоже будет очень любопытно.

Тем не менее, на наш взгляд, стабильная поддержка iOS — это важный рубеж. Мы видим Compose Multiplatform как реальную альтернативу Flutter или React Native, и это особенно круто для команд, которые уже используют KMP.

И наш опыт показывает нам, что уже сейчас можно писать почти весь UI в общем коде, даже под iOS. И это работает.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
А чем пользуетесь вы в мобильной разработке?
31.91% Только натив15
25.53% Натив и KMP12
17.02% CMP8
25.53% Flutter12
Проголосовали 47 пользователей. Воздержались 9 пользователей.
Теги:
Хабы:
+10
Комментарии27

Публикации

Информация

Сайт
kts.tech
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия