Kotlin Multiplatform Broadcast
9.47K subscribers
836 photos
54 videos
1.13K links
Новости и фичи Kotlin, а также Kotlin Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Compose Multiplatform @compose_broadcast
iOS разработка @ios_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
🏝 Вышел Coil 3.3.0 - загрузчик картинок с поддержкой KMP

Что нового:
👉 Добавили новые API для задания ограничения потребления памяти, когда приложение в фоне
👉 SvgDecoder может работать со сторонними парсерами SVG
👉 Много минорных улучшений API
👉 Обновлени зависимостей

#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍8
🏝 kotlinx.fuzz - библиотека для Fuzz тестирования Kotlin кода

Fuzz testing - это подход для автоматичекской генерации тестов со случайными или невалидными входными данными, чтобы проверить неожиданные ошибки и сценарии. Теперь есть официальное решение от JetBrains kotlinx.fuzz

@KFuzzTest
fun testDuration(f: KFuzzer) {
val isoString = f.asciiString(10)
val duration = Duration.parseIsoStringOrNull(isoString)
println("$isoString -> $duration")
}


#kotlin #тестирование
Please open Telegram to view this post
VIEW IN TELEGRAM
27👍11
Media is too big
VIEW IN TELEGRAM
📹 Coroutine Debugging in IntelliJ IDEA | Alexey Merkulov (EN,15м)

Подробный рассказ как в IDEA улучшали интеграцию между IDE и библиотекой Kotlin Coroutines для реализации дебага корутин как синхронного кода

#kotlin #coroutines #idea #kotlinconf25
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔105👍3
🏝 Использование inline, crossinline и reified в Kotlin может иметь ряд сложностей: сломанные стектрейсы, встраивание кода может повлиять негативно на код и другие. Подробнее читайте в статье

🔗 Альтернативная ссылка

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🤯102🙏1
🏝 Вышла вторая Beta Kotlin 2.2.20

В свежей версии исправили баги и сделали улучшения в работе

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23
🏝🦢 Kotlin-to-Swift экспорт теперь работает по умолчанию [EXPERIMENTAL]

Kotlin-to-Swift экспорт позволяет удобно использовать скомпилированный для Apple таргетов код из Swift удобным образом. Изменение добавили в Kotlin 2.2.20-Beta2

Ключевые фичи:
👉 Поддержка многомодульности: каждый Kotlin модуль - отдельный Swift модуль
👉 Поддержка пакетов в коде
👉 type alias теперь доступны из Swift
👉 Улучшения в nullability с примитивными типами
👉 Вызов перегруженных функций в Kotlin из Swift кода
👉 Можно изменить имя модуля

Фича всё ещё в экспериментальном режиме и для её включения надо выполнить ряд действий (подобно как раньше в XCode проект подключался KMP модуль)

#kotlin #swift #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍29🔥11🤔1
🏝 В Kotlin 2.2.20 упростили объявление common зависимостей KMP проекта

Теперь общие зависимости (common) можно объявить в dependencies блоке в kotlin {}
kotlin {
@OptIn(ExperimentalKotlinGradlePluginApi::class)
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
}
}

#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
17🔥7🎉3👍1
Kotlin Multiplatform Broadcast
🏝 В Kotlin 2.2.20 упростили объявление common зависимостей KMP проекта Теперь общие зависимости (common) можно объявить в dependencies блоке в kotlin {} kotlin { @OptIn(ExperimentalKotlinGradlePluginApi::class) dependencies { implementati…
Вот тут много вопросов... Хочется чтобы объявление зависимостей было в корне проекта, как это делается со всеми другими:
// build.gradle.kts
dependencies {
commonImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2")
androidMainImplementation(...)
jvmImplementation(...)
}

но кажется, что из блока Kotlin им не уйти из-за конфликтов с другими объявлениями (не факт что причина такова)
👍14
В Kotlin Multiplatform проекте теперь можно шарить код между JS и wasmJs таргетами через общий source set - WEB.

Изменение доступно в Kotlin 2.2.20-Beta2

#kotlin #kmp
🔥157👍2
🏝 Kotlin 2.2.20-Beta2: кроссплатформенная компиляция без Mac* 🤯 [STABLE]

В новой бете Kotlin 2.2.20 стабилизирована кроссплатформенная компиляция .klib-артефактов. Теперь публиковать Kotlin-библиотеки можно с любой хост-машины, что значительно упрощает процесс, особенно для Apple-таргетов.

Mac всё ещё потребуется, если проект использует cinterop, CocoaPods или нужно собрать финальные бинарники для Apple. Подробности — в документации.

Если в gradle.properties добавляли kotlin.native.enableKlibsCrossCompilation=true, то теперь можно убрать

#kotlin #kmp #klib #native
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆23👍63🤔1
🏝 В Kotlin 2.3.0 запретят использовать return без явного объявления возвращаемого типа в функции

В Kotlin 2.2.20-Beta2 можно попробовать новое поведение при использовании return - обязательное объявление возвращаемого типа функции. Новое поведение будет по умолчанию работать в Kotlin 2.3.0
//  Возвращаемый типы функции указан. Можно использовать return
fun getDisplayNameOrDefault(userId: String?): String =
getDisplayName(userId ?: return "default")

// Не компилируется. Используется return без явного указания возвращаемого типа функции
fun getDisplayNameOrDefault(userId: String?) =
getDisplayName(userId ?: return "default")


Готовимся к миграции после обновления языка. Всё во славу большей стабильности нашего кода

#kotlin #kotlin_2_3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍74🤔28🤯9🏆4
🏝 Kotlin 2.2.10 на шаг ближе - вышла RC2

Стандартное обновление версии языка с исправлением багов релиза X.X.0. Поправили ещё багов.

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥2
Forwarded from Android Broadcast
🎉 Новый инструмент управления состоянием для Flutter - yx_state

Команда Городских сервисов Яндекса разработала и выложила в опенсорс новый state management для Flutter. Около года назад они выпустили yx_scope — фреймворк для Dependency Injection.

yx_state — это набор библиотек для управления состоянием в Dart‑ и Flutter‑приложениях, созданный с фокусом на простоту использования и гибкость настройки. В наборе три библиотеки:
👉 yx_state — библиотека для управления состоянием
👉 yx_state_flutter — набор виджетов для интеграции с Flutter
👉 yx_state_transformers — набор трансформеров для управления стратегиями выполнения операций.

Ключевые особенности:
👉 Простота. Методы вместо событий — никаких дополнительных классов и маппингов.
👉 Последовательность выполнения. Если вы несколько раз подряд вызовете методы, использующие handle, то каждая новая операция будет ждать завершения предыдущей, образуя очередь.
👉 Удобство. Можно дождаться выполнения операции привычным способом через await.
👉 Гибкие стратегии. По умолчанию все операции выполняются последовательно, но можно изменить поведение на другое, например, параллельное выполнение.
👉 Глобальные переопределения. Можно настроить поведение всех StateManager в приложении в одном месте, не изменяя код каждого отдельного StateManager.
👉 Обработка ошибок. У StateManager есть встроенный механизм для обработки исключений. Если вы не перехватываете исключения, они будут автоматически перехвачены и обработаны.
👉 Интеграция с Flutter. StateBuilder для перестройки UI при изменении состояния, StateListener — виджет для выполнения сайд‑эффектов без перестройки UI и другие.

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

❗️Примеры и подробный обзор в статье на Хабре.

#flutter #opensource
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔16👍51
❗️Как проверять структуру Kotlin-кода на соответствие архитектуре и неймингу

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

Для Kotlin такую задачу отлично решает библиотека Konsist. Проверки в ней выглядят как обычные Unit-тесты (поддерживается несколько тестовых JVM движков).

Например, в одном из проектов я добавил правила:
👉 Все классы, чьи имена заканчиваются на ViewModel, должны наследоваться от ViewModel (к сожалению, заставить использовать именно Jetpack ViewModel не получилось).
👉 Все свойства с типом MutableStateFlow<*> должны быть недоступны за пределами класса.
private var viewModels: List<KoClassDeclaration> = emptyList()

@BeforeTest
fun setup() {
// Собираем все классы, чьи имена оканчиваются на ViewModel
viewModels = Konsist
.scopeFromProject()
.classes()
.withName { name -> name.endsWith("ViewModel") }
}

@Test
fun `Every ViewModel class extends from 'ViewModel'`() {
viewModels.assertTrue { viewModel ->
viewModel.hasParentWithName("ViewModel", indirectParents = true)
}
}

@Test
fun `MutableStateFlow properties in ViewModel are not visible outside`() {
viewModels
.properties()
.filter { property ->
property.hasType { type ->
type.hasNameMatching(Regex("MutableStateFlow<\\w+>"))
}
}
.assertTrue { property ->
property.hasPrivateModifier || property.hasProtectedModifier
}
}


Правила можно делать любой сложности — от проверки нейминга до соответствия архитектуре.
Всё это запускается как обычные JVM-тесты и выполняется достаточно быстро ⚡️

❗️ konsist пока не достиг версии 1.0 но активно идёт к ней! Работает исправно и позволяет масштабировать правила структуры кода на всё команду!

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍45🔥142
🤯 Как Google делает Android-библиотеки мультиплатформенными 🚀

Разбирая исходники Navigation 3 я наткнулся на необычную папку в KMP-проекте — jvmStubsMain.

src
├── commonMain
├── androidMain
└── jvmStubsMain


Внутри — только методы, которые либо возвращают значения по умолчанию, либо сразу выбрасывают исключения. Сборка под desktop из этого не получится, да и авторы такую цель не ставили. Возникает логичный вопрос: зачем тогда эта папка нужна? 🤔


🏝 Особенность KMP

В Kotlin Multiplatform папка commonMain содержит код, доступный всем таргетам.

Например:
👉 Если у проекта есть Android и iOS таргеты, в commonMain можно писать только чистый Kotlin + мультиплатформенные API.
👉 Но если оставить только Android-таргет, в commonMain внезапно станет доступен весь Android SDK 🤯 — что для меня было сюрпризом.


❗️ Зачем нужен jvmStub

Добавление таких stub-таргетов в Android-библиотеках помогает искусственно ограничить доступ к платформенным API в commonMain.

Почему это работает:
👉 У JVM и Android в KMP нет общего родителя в стандартной иерархии source sets (хотя платформы имеют много общего).
👉 Stub-реализации позволяют “отсечь” случайное попадание Android API в общий код.
👉 Это помогает держать код в commonMain чистым и переиспользуемым — вдруг завтра вы захотите добавить desktop или другую платформу.

💡 jvmStubsMain — это инструмент архитектурной дисциплины. Он не предназначен для полноценной JVM-сборки, но отлично помогает не тянуть Android-зависимости в общий код и сделать чистую арзитектуру


#kotlin #kmp #android #google
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍69
🏝 Вышел Kotlin 2.2.10 с исправлением багов в версии 2.2.0. Самое время обновиться и проверить всё ли работает у вас

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥27👍4🎉2
Пока вы спали Google выпустила версию KSP, совместимую с Kotlin 2.2.10. Обновляйтесь до версии 2.2.10-2.0.2 и свежий Kotlin

#kotlin #ksp
🎉31👍2
This media is not supported in your browser
VIEW IN TELEGRAM
🚀 На E-CODE соберутся ведущие эксперты в мобильной разработке.
Уже анонсированы доклады про Swift Testing и работу с JSON через Codable.

👉 Заглядывайте в программу за апдейтом, а лучше сразу регистрируйтесь — места разлетаются только так

🔥 Cобытие Ozon Tech притягивает middle+ инженеров из топовых компаний страны. В числе спикеров эксперты из Авито, Т-Банка, Яндекса, МИРа. А в лайнапе вечеринок — НТР, Нейромонах Феофан, ILWT и Заточка.

Исключительно полезный день х Чрезвычайно весёлый вечер.
Это E-CODE. Москва. 14 сентября.

#реклама
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31
🏝 KMP на Aurora ОС уже тут

Если вам интересно попробовать KMP под Аврора ОС, то вы можете сделать это. Наработки открыты в официальном репе: примеры, библиотеки, документация и QT биндинги.

Работа Kotlin кода на Аврора ОС происходит через нативный код под Linux таргет.

Адаптация Compose для Аврора идёт полным ходом и будет доступно в 2026 году. Я видел запущенный пример простого Compose приложения, и текущий статус работ вселяют большую уверенность в хорошем результате!

То что разработчики ОС стали делать фокус на популярных в мобильном сообществе инструментах - большой плюс. Уже есть Flutter для Аврора ОС, скоро будет еще возможность работать с KMP + Compose. Это явно даст буст для ускорения переноса существующих приложений и кодовой базы.

#kotlin #compose #auroraos
Please open Telegram to view this post
VIEW IN TELEGRAM
23🤔14🔥11