Forwarded from Aurora Developers
Представлена альфа-версия 0.0.4 проекта адаптации Compose Multiplatform для ОС Аврора
Проведена глубокая работа над инструментарием, экосистемой и стабильностью фреймворка, чтобы разработчики могли комфортно создавать мобильные приложения для доверенной операционной системы используя привычный инструментарий — язык программирования Kotlin.
Альфа-версия фреймворка Compose Multiplatform опубликована в репозитории mos.hub под открытой лицензией. Каждый желающий имеет возможность внести свой вклад и, тем самым, повлиять на развитие проекта.
Главные изменения в альфа-версии 0.0.4 проекта адаптации Compose Multiplatform для ОС Аврора:
Инструментарий разработчика
• Aurora Build — Gradle-плагин для сборки проектов под ОС Аврора
• Aurora Devices — Gradle-плагин для запуска приложений на устройстве и в эмуляторе
Расширение возможностей фреймворка
• Поддержка системного буфера обмена
• Поддержка ресурсов
• Поддержка локализации приложений
Поддержка новых платформ для разработки
• Добавлена поддержка Windows
• Добавлена поддержка macOS (частичная)
Экосистема и библиотеки
• Новая библиотека для работы с D-bus из Kotlin и поддержка популярных библиотек build-konfig, datetime, kamel, kermit, koin, ktor и sqldelight
Качество и стабильность
• Исправлены проблемы с многопоточностью
• Добавлена поддержка Unit и интеграционного тестирования. Все компоненты экосистемы Kotlin для ОС Аврора получают поддержку многоуровневого тестирования в рамках стабилизации
Референсные приложения
• Опубликовано референсное приложение StudentBox CMP
Новая версия уже доступна для разработчиков.Пробуйте прямо сейчас — все примеры и API в документации.
#АврораОС
@AuroraDevelopers
Проведена глубокая работа над инструментарием, экосистемой и стабильностью фреймворка, чтобы разработчики могли комфортно создавать мобильные приложения для доверенной операционной системы используя привычный инструментарий — язык программирования Kotlin.
Альфа-версия фреймворка Compose Multiplatform опубликована в репозитории mos.hub под открытой лицензией. Каждый желающий имеет возможность внести свой вклад и, тем самым, повлиять на развитие проекта.
Главные изменения в альфа-версии 0.0.4 проекта адаптации Compose Multiplatform для ОС Аврора:
Инструментарий разработчика
• Aurora Build — Gradle-плагин для сборки проектов под ОС Аврора
• Aurora Devices — Gradle-плагин для запуска приложений на устройстве и в эмуляторе
Расширение возможностей фреймворка
• Поддержка системного буфера обмена
• Поддержка ресурсов
• Поддержка локализации приложений
Поддержка новых платформ для разработки
• Добавлена поддержка Windows
• Добавлена поддержка macOS (частичная)
Экосистема и библиотеки
• Новая библиотека для работы с D-bus из Kotlin и поддержка популярных библиотек build-konfig, datetime, kamel, kermit, koin, ktor и sqldelight
Качество и стабильность
• Исправлены проблемы с многопоточностью
• Добавлена поддержка Unit и интеграционного тестирования. Все компоненты экосистемы Kotlin для ОС Аврора получают поддержку многоуровневого тестирования в рамках стабилизации
Референсные приложения
• Опубликовано референсное приложение StudentBox CMP
Новая версия уже доступна для разработчиков.Пробуйте прямо сейчас — все примеры и API в документации.
Хотите помочь проекту стать лучше? Присоединяйтесь к разработке на mos.hub. Мы открыты к вашему коду и экспертизе. Вместе мы сможем сделать инструмент максимально полезным для всего сообщества.
Ссылка на репозиторий
#АврораОС
@AuroraDevelopers
👎77👍37
Всё сводится к более точечному встраиванию Compose экранов в iOS Controller и перекладывание навигации на нативные элементы.
#Compose #iOS #iOS26 #LiquidGlass
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👎8
Вам нужен Liquid Glass эффект в Compose Multiplatform?
Final Results
37%
Да
35%
Нет
4%
Что это?
17%
Не пишу на Compose под iOS
8%
Не участвую в опросе
👍4
This media is not supported in your browser
VIEW IN TELEGRAM
@NavDestination, @NavEdge, @NavGraphRoot, KSP статически собирает граф, а IDE-плагин рисует карту: каждый экран отрендеренной @Preview-миниатюрой через Layoutlib, без эмулятора. Переходы стрелками, двойной клик прыгает в исходник, граф мёржится по всем модулям. Канвас редактируемый — тянешь связь от экрана к экрану, и плагин сам вписывает @NavEdge в код.Работает с Navigation 3, Navigation 2 и даже голыми Activity. KMP из коробки: аннотации в commonMain, есть сэмпл на KotlinConf-приложении (26 экранов, 36 переходов).
Бонусом
.nav baseline по аналогии с apiDump/apiCheck: navCheck валит сборку, когда граф разъезжается с закоммиченным базелайном.#Compose #AndroidStudio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍70👎3
skydoves выпустил 0.10.0 с двумя фичами, которые доделывают логику инструмента.
ESTIMATED (только статика), с live heatmap — MEASURED (ложные тревоги уходят вниз в рейтинге). Фиксы применяются двойным кликом с предпросмотром.@TraceRecomposition функциям, то есть видел не весь модуль. Trace-all инструментирует всё:composeStabilityAnalyzer {
traceAll {
enabled.set(true)
threshold.set(2)
variants.set(listOf("debug"))
}
}Release-сборки не трогает. Теперь рейтинг Doctor строится по реальным замерам на всём модуле, а не только там, где успел поставить аннотацию.
Раньше надо было самому решать что смотреть и куда ставить аннотации. Теперь включаешь trace-all, запускаешь Doctor, получаешь список с конкретными fix'ами.
🔗 doveletter.dev
#Compose #Performance
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25👎4
Камера в CMP это всегда возня с
expect/actual и тремя платформенными бэкендами. Kamera (бывшая CameraK) закрывает это одним Compose-first слоем: один @Composable-вход, под капотом CameraX на Android, AVFoundation на iOS и JavaCV на Desktop.API реактивный, через состояние. Заводишь
rememberCameraKState(), получаешь StateFlow<CameraKState> c ветками Initializing, Ready(controller, uiState) и Error, и рисуешь превью, когда камера готова:val cameraState by rememberCameraKState(
config = CameraConfiguration(
cameraLens = CameraLens.BACK,
aspectRatio = AspectRatio.RATIO_16_9,
),
)
when (val state = cameraState) {
is CameraKState.Ready -> CameraPreviewView(state.controller)
is CameraKState.Initializing -> CircularProgressIndicator()
is CameraKState.Error -> Text(state.message)
}
Из коробки: зум, вспышка, фонарь, переключение линз (ultra-wide/telephoto на iOS),
takePictureToFile() для прямого сохранения в файл. Сверху плагины, которые сами активируются на Ready: сохранение фото, QR/штрихкоды, OCR, запись видео с pause/resume и лимитом длительности, анализ кадров через analyzer.Главное в 1.0: починили то, что мешало брать в прод. На iOS фронталка отдавала тёмные кадры из-за бага в
MemoryManager, хотя превью выглядело нормально. На Android фото оказывалось кропом вместо настроенного аспекта, теперь что видишь, то и снимаешь. Плюс вычистили утечки корутин в плагинах при ре-ините камеры.‼️ Это молодая 1.0 и по сути проект одного мейнтейнера под Apache-2.0. Блокеры выше жили буквально до вчера, так что 1.0 это точка, где их закрыли, а не годы шлифовки. Desktop тянет JavaCV с нативными либами, это тяжело. Но если нужна камера в CMP без трёх реализаций руками, смотреть стоит.
#Compose #ComposeMultiplatform #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54👎1
This media is not supported in your browser
VIEW IN TELEGRAM
v1 умел одно — применять изменения значений без rebuild: цвет, padding, текст, размеры — результат за секунду, приложение живёт. Добавить composable, переставить layout, поменять control flow — всё это шло в полный rebuild.
v2 убирает эту границу. Без рестарта приложения: добавляем и удаляем composable-функции, меняем структуру layout, переписываем conditional UI. И главное — заменяем целый экран на совершенно другой код. Навигационный стек и
remember-состояние сохраняются.Технически v2 запускает изменения через собственный интерпретатор, обходя ограничения ART на переопределение классов — тот же подход, что у Flutter. При слишком глубоких изменениях деградирует плавно: сбрасывает composition с сохранением
rememberSaveable и ViewModel, в крайнем случае рестартит Activity. Полный rebuild нужен только при изменении сигнатур функций, иерархии классов и inline-функций.В v2 также MCP-сервер: AI-агент триггерит reload, снимает скриншот с устройства, итерирует по вариантам. Claude Code и Cursor работают из коробки через file watcher.
Поставить: IDE-плагин вручную с бета-канала Marketplace + Gradle-плагин
2.0.0-beta01:[plugins]
hotswan-compiler = { id = "com.github.skydoves.compose.hotswan.compiler", version = "2.0.0-beta01" }
Инструмент платный инструмент, лицензия и цены на hotswan.dev/pricing.
Такого охвата hot reload в нативном Compose ещё не было. Аргумент Flutter про быстрый feedback loop заметно слабеет.
#Compose #JetpackCompose #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM
👎23👍14
DrawBox работала как Android-only с 2021 года. В конце мая вышел
2.0.0-alpha02 с таргетами Android, iOS, JVM/Desktop и WASM. Живая демка работает прямо в браузере без установки.В 2.0 добавили: SVG и JSON экспорт, бесконечный канвас с зумом и паном, выделение и перетаскивание фигур, коннекторы, object eraser и Roborazzi тесты.
Автор написал пост про перенос, и самый ценный кусок там не про KMP. Самая интересная часть - использование MVI. Один
State, Intent на каждое действие, Reducer с (State, Intent) → State. После этого undo/redo - это стек из State, JSON-сериализация практически бесплатна, и логика платформ физически не может разъехаться.#Compose #KMP #ComposeMultiplatform
Please open Telegram to view this post
VIEW IN TELEGRAM
👍34👎3
Media is too big
VIEW IN TELEGRAM
37 минут от Sebastian Aigner и Marton Braun (JetBrains) про всё, что вышло за последний год. Хорошо структурированный доклад: общие изменения, потом iOS, потом Web.
Ключевое:
👉 Navigation 3 — стабильный в CMP. Бэкстек это просто
SnapshotStateList<NavKey>, которым управляешь сам. Адаптивные Scene-API, нативные iOS-жесты, browser history на Web из коробки.👉 Compose Hot Reload — стабильный, встроен в новые проекты без настройки. Работает и с AI-агентами: IDE подхватывает правки в файлах и перезагружает UI сама.
👉 @Preview унифицировали:
androidx.compose.ui.tooling.preview.Preview теперь работает в commonMain. Прошлые аннотации deprecated.👉 iOS: параллельный render pipeline по умолчанию в 1.11 (+20% на сложных лейаутах),
placedAsOverlay для нативных Liquid Glass-компонентов, полноценный нативный ввод с magnifier / translate / autofill / кастомными IME.👉 Web (beta):
HTMLElementView для HTML прямо в Composition, VoiceOver через семантику, Coil на web workers.👉 Из цифр в докладе: Kuaishou (250M DAU) и Tencent Video (340M MAU) уже работают на CMP-экранах. По iOS-блоку видно, что команда за год реально закрыла большинство «но» для старта
0:00 Вступление: что такое Compose Multiplatform
2:04 Масштаб: Perk, Alipay, Kuaishou, Tencent
4:06 Демо: структура нового проекта
5:40 Compose Hot Reload
8:49 Паритет с Jetpack Compose
10:24 Navigation 3
16:05 Единая аннотация @Preview
17:39 iOS: новый pipeline рендеринга
19:43 iOS: Liquid Glass и overlay interop
27:00 iOS: нативный ввод текста
31:11 Web: HTML interop
33:46 Web: доступность и производительность
35:50 Итоги
#ComposeMultiplatform #KMP #Navigation3 #KotlinConf
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26👎3
Честный кейс от разработчицы: она в одиночку перевела приложение на 170+ экранов с Nav2 на Nav3 🤯. Не пересказ доков, а грабли из прода. Объем работы: 302 файла (по сути весь app), 2 недели разработки с овертаймами, ~1.5 недели стабилизации, 1 хотфикс.
Что стоит забрать себе ещё до старта:
Поэтапно не выйдет. Обратной совместимости между Nav2 и Nav3 нет, мигрируешь либо всё сразу, либо никак. Отсюда огромный affected area и главная организационная боль: команда не фризила разработку, коллеги параллельно пилили новые экраны на старой навигации. Чем дольше тянешь, тем дороже разгребать merge-конфликты.
Bottom Sheets из коробки в навигации нет. Пришлось городить обёртку вокруг
entry<> с флагом в metadata и вручную разруливать, что рисовать через ModalBottomSheetLayout, а что через NavDisplay:val NavEntry<out NavKey>.isBottomSheet: Boolean
get() = metadata["isBottomSheet"] as? Boolean == true
NavDisplay(
entries = navigationState.toEntries(mainEntryProvider)
.filter { it.isBottomSheet.not() },
onBack = { navigator.goBack() },
)
Сейчас это решается официально через BottomSheetSceneStrategy, свой костыль автор потом выкинула. Мигрируешь сегодня — сразу проверь, что шторки ложатся на
SceneStrategy, а не переоткрывай этот велосипед. ⚠️ И отдельный подвох: шторка часть стека, и если перед переходом на следующий экран не закрыть её руками, back вернёт её обратно. Легко забыть.Сериализация уронит тебя уже в проде. 💥 Всё, что прокидываешь через навигацию, должно быть
@Serializable. Автор прокинула entryPoint: NavKey (чтобы при блокировке юзера возвращать на нужный экран через несколько назад), а сам NavKey сериализуемым не был:Fatal Exception: kotlinx.serialization.SerializationException
Ловушка в том, что краш не в обычном флоу, а в отдельных сценариях восстановления, поэтому проходит ревью и ручные тесты, а ловится только у юзеров.
🔗 Полный разбор с кодом и схемами на Medium
#Compose #Navigation3 #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👎32👍22
Forwarded from Kotlin Multiplatform Broadcast
Из того, что реально касается продакшн-кода - исправлена регрессия в Compose Compiler: классы, которые раньше считались
stable, в 2.4.0 иногда определялись как runtime/Uncertain. Если недавно обновились на 2.4.0 и столкнулись со странными лишними рекомпозициями — обновляйтесь на новую версию.
#Kotlin #Compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👎4
Please open Telegram to view this post
VIEW IN TELEGRAM
👍132👎6
Для обновления просто обновите BOM
implementation(platform("androidx.compose:compose-bom:2026.08.00"))⚠️ Важно: требуется
compileSdk = 37 и AGP 9.2.0+.В этом релизе:
🎨 Mesh‑градиенты и HDR
📐 Именованные области в Grid
✍️ Редактируемое форматирование текста
🎬 Двухстадийные анимации
⚡️ Ускоренный старт и Keyed SideEffect
🔧 Не обошлось без breaking changes
В ближайших постах разберу каждую фичу подробно с примерами. Подпишись на @ComposeBroadcast, чтобы ничего не пропустить!
Compose Multiplatform 1.12.0 уже на стадии RC
#Compose #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25👎4
Теперь области можно задавать через имя в Grid в дополнение к индексу. Дайте областям имена и размещайте элементы с помощью
gridItem(areaId = "header"):Grid(
config = {
area("header", row = 0, column = 0, rowSpan = 1, columnSpan = 2)
area("sidebar", row = 1, column = 0)
area("content", row = 1, column = 1)
}
) {
HeaderSection(modifier = Modifier.gridItem(areaId = "header"))
Sidebar(modifier = Modifier.gridItem(areaId = "sidebar"))
Content(modifier = Modifier.gridItem(areaId = "content"))
}
#Compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29👎2
Очень хочется верить в то, что это реально, а также что это можно сделать просто без отладки и замера характеристик рендеринга.
#Compose #Performance
Please open Telegram to view this post
VIEW IN TELEGRAM
👍46👎3
👉 В
BasicTextField можно теперь программно применять SpanStyle и ParagraphStyle через edit { addStyle(...) }:state.edit {
addStyle(SpanStyle(fontWeight = FontWeight.Bold), start = 0, end = 9)
}Стили сохраняются при смене конфигурации.
👉 Программное управление выделением. Новый
SelectionState с методами selectAll(), clear(), select(range) и extendSelectionByWord()val selectionState = rememberSelectionState()
val characterCount = selectionState.selectedTexts.sumOf { it.text.length }
Column {
SelectionContainer(state = selectionState) {
Column { BasicText(text = "Text to be selected...") }
}
if (characterCount > 0) {
BasicText(text = "Characters selected: $characterCount")
}
}
👉 Текстовые поля теперь нативно поддерживают Android Credential Manager (API 34+) через семантическое свойство
credentialRequest. Passkeys, сохранённые учётные данные — прямо из поля ввода.👉 Новые
KeyboardType: Date, Time, DateTime, SignedDecimal.👉
BasicSecureTextField теперь по умолчанию использует TextObfuscationMode.System#Compose
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37👎2