Kotlin Multiplatform Broadcast
9.71K subscribers
880 photos
55 videos
1.2K links
Новости и фичи Kotlin, а также Kotlin Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Compose Multiplatform @compose_broadcast
iOS разработка @ios_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download Telegram
🏝 Kotlin 2.3.0 Stable! Вышла новая версия языка

Команда Kotlin выпустила финальную версию Kotlin 2.3.0. Обновление приносит новые стабильные возможности языка, улучшения производительности и поддержку новейших инструментов.

📢 Основные нововведения:
Язык: Больше стабильных функций, проверка неиспользуемых возвращаемых значений, явные backing field.
Kotlin/JVM: Поддержка Java 25.
Kotlin/Native: Улучшенный Swift export, ускорение сборки, импорт C/Objective-C библиотек (бета).
Kotlin/Wasm: Полные имена и новая модель исключений включены по умолчанию.
Kotlin/JS: Экспериментальный export suspend-функций, новое представление LongArray.
Gradle: Совместимость с Gradle 9.0, новый API для регистрации сгенерированных исходников.
Compose compiler: Стектрейсы для минифицированных Android-приложений.
Стандартная библиотека: Стабильные API для работы со временем и улучшенная работа с UUID.

📖 Подробнее на сайте

Каждую ключевую фичу подробно разберу в отдельном посте в канале @kotlin_broadcast. Следите за новостями!

#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍83
🏝 Explicit Backing Fields в Kotlin 2.3 — наконец-то избавимся от _property!

👋 Android-разработчики, а вас тоже раздражает этот вечный boilerplate со свойствами? Приватное _city, публичное city, постоянная путаница где что менять…

Kotlin 2.3.0 приносит экспериментальную, но долгожданную фичу — Explicit Backing Fields (явные поля свойств). Теперь можно забыть про лишние переменные!

Было (старый знакомый паттерн):
// Приватное, мутабельное
private val _city = MutableStateFlow<String>("")

// Публичное, read-only
val city: StateFlow<String> get() = _city

fun updateCity(newCity: String) {
_city.value = newCity
}


Стало (новый синтаксис):
val city: StateFlow<String>
// Явно указываем поле типа MutableStateFlow
field = MutableStateFlow("")

fun updateCity(newCity: String) {
city.value = newCity // Работаем напрямую с city!
}


🔥 Что изменилось?
- Исчезла дублирующая _city переменная
- Вся логика свойства теперь в одном месте
- Внутри класса компилятор автоматически делает smart-cast к типу поля
- Снаружи свойство остаётся StateFlow, внутри — MutableStateFlow

⚠️ Важно: фича экспериментальная! Добавьте в gradle.kts:
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xexplicit-backing-fields")
}
}


📄 Подробности читайте в KEEP документе фичи

💬 Будете использовать сразу или подождёте стабильного релиза? А может, останетесь верны старому паттерну с _? 🤔

#Kotlin #AndroidDev #Kotlin23 #Android #KotlinDevelopment
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥99👍176👎2
🏝 Unused return value checker в Kotlin 2.3 — ловим скрытые баги в коде

Фича экспериментальная и требует включения через флаг комплиятора


Новая фича в Kotlin 2.3 помогает отлавливать баги, когда результат функции игнорируется, а должен быть обработан. А такое часто случается при рефакторинге или когда не читаешь документацию!

Пример проблемы:
fun formatGreeting(name: String): String {
if (name.isBlank()) return "Hello, anonymous user!"
if (!name.contains(' ')) {
// Ошибка: забыли return, просто создали строку
"Hello, " + name.replaceFirstChar(Char::titlecase) + "!"
}
val (first, last) = name.split(' ')
return "Hello, $first! Or should I call you Dr. $last?"
}


Такой код скомпилируется, но будет работать неправильно. С Kotlin 2.3 можно включить анализатор, который покажет предупреждение на строке с неиспользованным результатом и предотвратить баг на этапе написания кода

На текущем этапе жизни есть 2 варианта работы фичи:
1️⃣ Проверка работает только для функций, помеченных аннотацией @MustUseReturnValues:
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xreturn-value-checker=check")
}
}

// Указываем что результат API требует обработки
@MustUseReturnValues
class DataValidator {
fun validate(input: String): ValidationResult
}


2️⃣Строгий режим - везде нужна обработка, даже если API не указало этого явно
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xreturn-value-checker=full")
}
}


Как разрешить игнорирование:
- Аннотировать функцию @IgnorableReturnValue что не будет требовать проверки её значения:
// Функция, где результат часто не нужен
@IgnorableReturnValue
fun logEvent(event: String): Boolean {
return analytics.track(event) // результат обычно игнорируем
}

// Теперь можно вызывать без предупреждения
fun main() {
logEvent("screen_opened") // Нет ворнинга
}


- Использовать переменную _ для случаев, когда вы обрабатываете значения, но переменная вам не нужна:
computeValue() // ⚠️ предупреждение
val _ = computeValue() // явно игнорируем


📹 Подробный разбор от разработчика

💬 Будете использовать такой анализатор? Или считаете лишним контролировать каждый неиспользованный результат?

#Kotlin #Kotlin23
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥22👎64👍1
🏝 Cборка iOS исходников в KMP проектах ускорилась

Kotlin 2.3 приносит значительные улучшения производительности для Kotlin/Native. Релизные сборки (например, linkReleaseFrameworkIosArm64) теперь компилируются быстрее — в некоторых случаях до 40%.

Эти изменения особенно заметны в Kotlin Multiplatform проектах для iOS. Если вы собираете фреймворки под iOS или мак-бинарники, теперь это займёт меньше времени.

Что ускорилось:
- Задачи linkRelease* (сборка release-версий)
- Создание фреймворков для iOS
- Генерация нативных бинарников

Улучшения работают из коробки — не нужно менять код или настройки. Просто обновите Kotlin до версии 2.3.0.

Больше советов по ускорению Kotlin/Native в документации

💬 Делитесь в комментариях своими цифрами, если уже обновились до Kotlin 2.3

#Kotlin #Kotlin23 #KMP #KotlinNative #iOS
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥20👍52👎2
🎄 Итоги года @kotlin_broadcast

Подходит в концу 2025 год и уже совсем скоро 2026, где наш любимый Kotlin и KMP станут ещё лучше.

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

Канал уходит на каникулы до начала 2026 года. Желаю вам классно провести каникулы, зарядится и продуктивно ворваться в 2026 год

💬 В комментариях делитесь чем для вас запомнился как касательно Kotlin, так и лично для каждого из вас
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥18👎84🎉2
🏝 Вышла первая Beta Kotlin 2.3.20 с исправлением багов и обновлением инструментов.

Версию 2.3.10 пока пропустили, потому в нее не попадает существенных изменений, касающихся будущих версий.

Источник - KotlinLang.org

#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥3👎2
🏝 Как сделать дизайн документ на примере Metro DI

Zac Sweers, автор и разработчик DI фреймворка Metro, который является наследником Anvil/Dagger но для KMP, описал дизайн документ по новой библиотеке. Что включает документ:
👉 Зачем Metro нужен
👉 Как работает — Основные концепции и API
👉 Поддержка KMP
👉 План работ и миграция
👉 Сравнение и ответы на вопросы — Чем Metro отличается от Dagger и Koin, разбор частых вопросов (FAQ).

Документ найдете по ссылке

#kotlin #di #архитектура
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍5🤔32
🐱 Resilient позволяет вам использовать различные стратегии повтора вызова suspend функций

// Создаем политику для выполнения
val policy = resilient {
// Таймаут
timeout { timeout = 2.seconds }

// Стратегия повтора выполнения
retry {
maxAttempts = 3
backoffStrategy = ExponentialBackoff(initialDelay = 100.milliseconds)
}

// Настройка политики Circuit Breaker
circuitBreaker {
failureThreshold = 5
successThreshold = 2
timeout = 30.seconds
}
}

suspend fun call(): String = policy.execute { fetchData() }


#Kotlin #Coroutines
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥42🤯8👍61
🐘 Вышел Android Gradle Plugin 9.0 и это заставит разработчиков проектов на KMP потрудится

Android Gradle Plugin 9.0 - самое большое изменение плагина с целью лучшей работы вместе с Gradle. Подробнее изменения я уже описывал в отдельном посте, но хочу сделать фокус на том, как много придется менять в KMP проектах при миграции на AGP 9.0:

🏝 Kotlin теперь не надо подключать отдельным плагином, AGP его добавляет сам. Это можно выключить через gradle.properties и вернуть старый прежний контроль

🤖 Android Application и Android Library Gradle плагины больше несовместимы с KMP. Их цель создания артефактов чисто под Anroid. Такое изменение придет к тому что в проектах надо будет выделять новые модули, как минимум Android App модуль теперь не сможет жить в одном модуле с Desktop таргетом, а было так удобно порой.

🤖 com.android.kotlin.multiplatform.library - плагин для добавления поддержки Android таргета в KMP модули. Возможность была еще до AGP 9.0. Он имеет меньше возможностей чем Android Library плагин, но именно те что нужны для KMP. Результат - проще конфигурация и быстрее скорость сборки. Подробнее рассказывал тут

🔗 Вопрос миграции также осветили в статье в блоге JetBrains
🔗 Документация по AGP 9.0 и рекомендации по миграции

#KMP #Gradle #Android
Please open Telegram to view this post
VIEW IN TELEGRAM
👍24👎6🔥3🤯1
☄️ В поисках Android‑разработчика или небольшой команды для разработки узкоспециализированного AI‑ассистента.

Проект вырос с Telegram‑бота до 130k MAU и переезжает в отдельное приложение на Kotlin Multiplatform (старт с Android, далее iOS).

Задачи:
⏺️ чат с ассистентом
⏺️ работа с тысячами сообщений (плавный интерфейс, экономия памяти)
⏺️ стриминг и интерактивные виджеты
⏺️ AR‑камера

Условия:
активная разработка 1+ год, старт с нуля, без легаси
фуллтайм или почасовой формат
оплата по рынку и выше в любую страну
минимум бюрократии, команда — разработчики
важен интерес к задаче, а не возраст и регалии

❗️В отклике: кратко описать, как бы вы реализовали большой чат с AI‑ассистентом на несколько тысяч сообщений.

👉 Контакт для связи: @aprll

#вакансия
Please open Telegram to view this post
VIEW IN TELEGRAM
👍91
KToon - это KMP библиотека для сериализации данных в TOON формате

TOON (Token-Oriented Object Notation) - это более компактный формат по сравнению с JSON, который хорошо подходит для мобильных приложений, IoT, AI (для использоваия меньшего кол-ва токенов) и везде где надо сократить объем передаваемой информации и/или повысить скорость передачи данных.


Пример одинаковых данных в разных нотациях:
[
{"id": 1, "name": "Alice", "email": "alice@example.com", "age": 30},
{"id": 2, "name": "Bob", "email": "bob@example.com", "age": 25},
{"id": 3, "name": "Charlie", "email": "charlie@example.com", "age": 35}
]


users[3]{id,name,email,age}:
1,Alice,alice@example.com,30
2,Bob,bob@example.com,25
3,Charlie,charlie@example.com,35


Подробнее про TOON формат можно почитать из официального источника

#KMP
👍41👎3🔥2
🏝 Опыт миграции KMP проекта для работы с AGP 9.0 от @nek12

AGP 9.0 большой стресс для KMP проекта, особенно если использовали фичи Android билд системы по полной. Придется менять Gradle скрипты, добавлять новые модули и организовать их связи. Из плюсов - лучшее кэширование проектов и скорость сборки.

Чем вам придется заниматься
👉 Заменой library плагинов
👉 Поиск альтернативы buildVariant
👉 Поиск замены Build Config
👉 Вынос NDK/RS кода из KMP модулей в нативные Android модули
👉 Отделение Android App модуля от KMP
👉 Прочие правки в скриптах

Самое интересное что на англоязычный вариант этой статьи дал комментарий инженер AGP. Самое важное - это неприятные, но необходимые изменения для эволюции систеы сборки. Причем текущий шаг - первый этап из двух. Работа над переменами стартанула в 2019 году.

#KMP #Gradle
Please open Telegram to view this post
VIEW IN TELEGRAM
18🥰4👎3👍1
🏝 Вышел релиз kotlinx.serialization 1.10.0 на базе Kotlin 2.3.0

Главное:
👉 Стабилизированы JSON-фичи (больше не experimental): allowComments, allowTrailingComma, prettyPrintIndent, decodeEnumsCaseInsensitive, @EncodeDefault, JsonUnquotedLiteral.
👉 Поддержка Unused Return Value Checker из Kotlin 2.3 — теперь можно ловить кейсы, где вы забыли использовать результат encodeToString() и подобных API.
👉 Улучшения полиморфизма: утилита subclassesOfSealed для автоматической регистрации sealed-подклассов в SerializersModule.
🤖 Обновили правила для Proguard, а также тесты для проверок минификации через R8
⚒️ Багфиксы: CBOR, ProtoBuf для unsigned типов, мелкие несовместимости.

🐱 Подробности в Release Notes

#Kotlin #KotlinX
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥18👍11
🚀 Вышел Ktor 3.4.0: Стабильность, OpenAPI и дуплексный стриминг

Вышла новая версия Ktor с фокусом на стабильность и долгожданные фичи!

Что нового:

👉 Автоматическая генерация OpenAPI документации из кода — теперь ваш Swagger UI строится динамически на основе роутинга, а не статических файлов. Новый API describe позволяет описывать эндпоинты прямо в коде.

👉 Дуплексный стриминг для OkHttp — отправляйте и получайте данные одновременно через HTTP/2. Включается через duplexStreamingEnabled в конфигурации движка.

👉 Поддержка Zstd компрессии — быстрый алгоритм с высокой степенью сжатия теперь доступен через модуль ktor-server-compression-zstd.

👉 HttpRequestLifecycle плагин — автоматическая отмена HTTP запросов при отключении клиента. Structured concurrency сам почистит все ресурсы. Работает с Netty и CIO движками.

👉 Множество исправлений и улучшений производительности, чтобы Ktor был готов к новому году разработки.

🔗 Подробности в анонсе

#Ktor #Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥31👍8
🏝 Вышел Exposed 1.0 - ORM на Kotlin от JetBrains

Вышла первая мажорная версия Exposed — библиотеки для работы с базами данных в Kotlin от JetBrains!

Exposed — это легковесная ORM библиотека, которая предоставляет два подхода к работе с БД: type-safe SQL DSL и DAO API. Написана на Kotlin с поддержкой корутин и всех фишек языка.

Библиотека будет полезна Backend разработчикам на Kotlin, которые хотят type-safe работу с БД без магии рефлексии. Тем, кто ценит контроль над SQL запросами, но не хочет писать сырой SQL. Проектам на Ktor и Spring, где нужна легковесная ORM с поддержкой корутин.

// Пример SQL запроса на Kotlin + Exposed
fun buildQuery(): Query {
val query = TaxiRide.selectAll()
query.addRideFilters("completed", "John Doe")
return query
}

fun Query.addRideFilters(status: String?, passengerName: String?) {
status?.let {
this.andWhere { TaxiRide.status eq status }
}

passengerName?.let {
this.adjustColumnSet { // add a JOIN to Passenger
innerJoin(Passenger, { Passenger.id }, { TaxiRide.passengerId })
}.andWhere { Passenger.name eq passengerName }
}
}


🔗 Подробности в анонсе
🔗 Официальный сайт Exposed

#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
33👍16🤯8🤔5
🤔 Как дать AI актуальную информацию про Open Source библиотеки

Используя любой кодинг агент, точно столкнёшься с тем, что он не может использовать свежие API. Он начнет импровизировать, придумывая API из головы или писать поверх либы фичу, которая уже в ней есть. Спросили про новую функцию в Ktor 3.4? "Извините, я обучен на данных до января 2025".

Я подключаю MCP и скиллы для лучшей интеграций новых знаний:
⭐️DeepWiki — быстро разобраться в архитектуре проекта. Есть MCP
⭐️Context7 — актуальная документация JS/TS/Python через MCP. Платный, но с бесплатным лимитом на 500 запросов в месяц
🏝ksrc — исходники Kotlin зависимостей @nek_12

💬 В комментариях делитесь как вы решаете подобную задачу

#kotlin #ai #tools #mcp
Please open Telegram to view this post
VIEW IN TELEGRAM
17👍4👎2🔥1
🤖 AndroidX Paging 3.4.0 обзавелся поддержкой все популярных тартегов JVM(Android and Desktop), Native (Linux, iOS, watchOS, tvOS, macOS, MinGW) и Web (JavaScript, WasmJS), но при это удалили deprecated таргеты X64

#Android #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥7👏6🤔1
💉 Koin получил получит Compile Time Safety через плагин Kotlin компилятора, а пока пора на него переходить, чтобы отказаться от KSP

Готовится к релизу Koin 4.2 где уже в RC версии появился Gradle плагин, которые будет использоваться для включения Compile Time Safety в будущем. Плагин способен работать с Koin Annotations и традиционным DSL подходом.

Что нужно сделать
1️⃣ Обновить Koin до версии 4.2 или выше
2️⃣ Подключить Gradle плагин io.insert-koin.compiler.plugin

Сложность может быть одна - нужен Gradle 8.X и Kotlin 2.3.20, а по результатам опроса не всего на него перешли

🔗 Источник - официальный блог Koin на Medium

#Kotlin #Koin #KMP
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥34👍7👎2🤔2
🏝 Вышел Kotlin 2.3.10 - багфикс версии 2.3.0

Что важного в исправлениях
⚙️ Поправили работу с Compose Multiplatform
👉 Исправлены баги в рефлексии
‼️ Исправлены критичные баги компилятора
🛠 Исправление проблемы с null типами

Кажется пора переехать на новую версию и посмотреть, подойдет ли она вам

🐱 Список изменений на GitHub

💬 Делитесь вашим опытом миграции и починило ли проблемы

#Kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍51👏1