Kotlin Multiplatform Broadcast
9.47K subscribers
821 photos
48 videos
1.09K links
Новости и фичи Kotlin, а также Kotlin Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Compose Multiplatform @compose_broadcast
iOS разработка @ios_broadcast
Новости Android @android_broadcast
Реклама и прочее @android_broadcast_bot
Download Telegram
Media is too big
VIEW IN TELEGRAM
ExoQuery - Kotlin DSL для работы с базой данных. Есть поддержка разных БД. Больше про возможности смотрит в видео

// Пример запроса
capture.select {
val p: Person = from(people)
val a: Address = join(addresses) { a -> a.personId == p.id }
Data(p.name, a.city)
}


#kotlin #sql #dsl
🏝 Вышел Kotlin 2.1.21

Что нового:
🐘 Поддержка Gradle 8.12
👉 Исправление работы с XCode 16.3
🛠 Исправление багов

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🏝 Вышел KSP 2.1.21-2.0.1 с поддержкой Kotlin 2.1.21

#kotlin #ksp
Please open Telegram to view this post
VIEW IN TELEGRAM
🏝 Kotlin 2.2.0 уже совсем скоро - вышла Release Candidate версия

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
🏝 Вышел SqlDelight 2.1.0

👉 Очень много улучшений для PostgreSql
👉 Поддержка WASM/JS
🏝 Поддержка K2
🛠 Множество исправлений и улучшений

#kotlin #kmp #sqlite #k2
Please open Telegram to view this post
VIEW IN TELEGRAM
🏝 KStorage — единый подход к key-value хранилищам на Kotlin Multiplatform. Работает как обертка над другими хранилищами. Из коробки готовых оберток не предоставляется, что является минусом

Подробнее можно почитать в статье (РУ, 5м)

// пример использования библиотеки
class SuspendSettingsApi(private val intSettingsMap: MutableMap<String, Int>) {
val suspendMutableKrate: SuspendMutableKrate<Int> = DefaultSuspendMutableKrate(
factory = { 0 },
loader = { intSettingsMap["INT_KEY"] },
saver = { value -> intSettingsMap["INT_KEY"] = value }
)

val stateFlowSuspendMutableKrate: StateFlowSuspendMutableKrate<Int> = DefaultStateFlowSuspendMutableKrate(
factory = { 0 },
loader = { intSettingsMap["INT_KEY"] },
saver = { value -> intSettingsMap["INT_KEY"] = value }
)
}


#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🏝 Обновление KMP плагина в IDEA и Android Studio (EN)

JetBrains ранее отказалась от разработки отдельной IDE для Kotlin Multiplatform и активного расширения возможностей KMP во Fleet в пользу улучшения поддержки в уже привычных для разработчиков продуктах

Вышла версия KMP плагина 0.9.0 в которой появилась новые возможности

🪄 Новый визард для создания нового проекта: поддержка всех таргетов, настройки использования Compose или нативного UI

💊 Проверка настройка окружения на компьютере: фактически интегрировали KDoctor.

🦢 Поддержка платформенных языков: для Kotlin и Swift будет поддерживаться навигация, подсветка синтаксиса, быстрая документация и дебаг из IDEA и Android Studio

⚙️ Поддержка Compose Multiplatform: будет поддержка ресурсов, превью из common кода, конечно же автокомплит, навигация, рефакторинг и всё всё всё

⚙️ Compose Hot Reload для JVM Desktop - обновление Compose UI без перезапуска приложения и с сохранением состояния. Отлаживать на Desktop удобно, даже если вы разрабатываете только под мобилку, то добавьте таргет чтобы писать удобнее.

Для использование фичей нужны самые свежие версии IDE, а то и вовсе Canary версия Android Studio. Уже сейчас доступна версия плагина 0.9 и ждем Stable

#kotlin #kmp #androidstudio #idea #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Команда плагина будет работать над улучшениями инструментов для KMP разработки

💻 Поддержка Windows и Linux: появится возможность использования KMP плаигна на Windows и Linux, но запуск iOS приложений останется пререгативой macOS

🦢 Расширенная поддержка Swift: текущий плагин имеет базовую поддержку Swift, но будет добавляться поддержка фичей сложнее: поиск использований, навигации по иерархии типов и др.

🏝 Создание KMP модулей в проекте: создание KMP модулей с использованием стандартного KMP визарда

🛠 Лучшая поддержка инструментов для Web и Desktop: после стабилизации поддержки мобильных платформ, будет фокус на улучшение поддержки таргетов Web и Desktop.

#kotlin #kmp #idea #androidstudio
Please open Telegram to view this post
VIEW IN TELEGRAM
🏝 Вышел KtLint 1.6.0 - линтер для проверки соблюдения стиля Kotlin кода

Что нового:
👉 Добавлена возможность настройки некоторых аннотаций с параметрами таким же образом как и без параметров
👉 Добавили свойство для предотвращения ошибки при использовании ktlint-intellij-plugin
🛠 Исправление ошибок
⬆️ Обновлений версий зависимостей

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Показали новую версию Amper с поддержкой iOS в KMP в standalone версии (без Gradle под капотом). Ранее в KMP были Android и Desktop.

#kotlin #amper #ios
🏝 JetBrains представила Koog - Kotlin Framework для разработки AI агентов

val agent = simpleSingleRunAgent(
executor = simpleOpenAIExecutor(apiKey),
systemPrompt = "Answer user questions concisely.",
llmModel = OpenAIModels.Chat.GPT4o
)

val result = agent.runAndGetResult("Hello! How can you help me?")
println(result)


Подробнее читайте в документации

#kotlin #ai
Please open Telegram to view this post
VIEW IN TELEGRAM
KSensor - KMP библиотека для работы с сенсорами на Android и iOS. Поддерживает акселерометр, гироскоп. магнитометр, барометр, счетчик шагов, местоположение

val sensors = listof(
SensorType.ACCELEROMETER,
SensorType.GYROSCOPE,
SensorType.MAGNETOMETER,
SensorType.BAROMETER,
SensorType.STEP_COUNTER,
SensorType.LOCATION,
)

// Register sensors
KSensor.registerSensors(
types = sensors,
locationIntervalMillis = {optional. default is 1000L},
onSensorData = { type, data ->
println("Sensor: $type - Data: $data")
},
onSensorError = { error ->
println("Sensor error: ${error.message}")
}
)

// Unregister sensors when no longer needed
KSensor.unregisterSensors(sensors)


#kotlin #kmp #android #ios
🏝 Stacktrace-decoroutinator поможет вам сделать стектрейс в вызовах корутин подробнее и понятным. Работает с JVM 1.8 и выше, а также на Android 14+

Самый простой способ подключения - через Gradle плагин

#kotlin #coroutines
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Функции check() и require() в Kotlin — когда и зачем использовать?

В Kotlin Standard Library есть две полезные функции, которые помогают явно выражать условия выполнения кода:
require() — используется для проверки аргументов функции.
check() — используется для проверки внутреннего состояния объекта или логики приложения.

Эти функции выбрасывают исключения, если указанное условие не выполняется:
👉 require() выбрасывает IllegalArgumentException
👉 check() выбрасывает IllegalStateException

📌 Примеры применения:
// require() для проверки входных аргументов:
fun calculateArea(width: Int, height: Int): Int {
require(width > 0 && height > 0) {
"Width and height must be positive!"
}
return width * height
}


// check() для контроля состояния внутри объекта:
class Connection {
var isConnected: Boolean = false

fun send(data: String) {
check(isConnected) {
"Cannot send data: not connected!"
}
// отправка данных
}
}


Важный плюс использования check() и require() — это контракты Kotlin, благодаря которым компилятор лучше понимает состояние переменных после проверки и помогает избежать лишних проверок и ошибок.

Например:
val data: String? = getData()
checkNotNull(data) {
"Data must not be null!"
}
// Теперь компилятору гарантировано data != null
println(data.length)


⚠️ Хорошо ли специально выбрасывать исключения?

Выбрасывать исключения — это нормально и полезно, когда приложение попадает в ситуацию, которая явно нарушает его логику. Это помогает выявлять ошибки на ранних стадиях и делать код чище и надежнее. Однако не стоит использовать исключения для управления нормальным потоком программы. Исключения предназначены именно для «исключительных» ситуаций, а не для стандартного поведения.

Считаете ли вы нормальным выбросить исключение или лучше другим путем обработать ошибку? Делитесь в комментариях

#kotlin #stdlib
Media is too big
VIEW IN TELEGRAM
⏸️🤯 Активное использование Main Dispatcher делает ваше приложение медленным

📹 Очень классный доклад с Mobius Весна 2025 с погружением в работу кода на корутинах на Android, анализ долгих ожиданий Main Thread из-за его загруженности и почему стоит максимально всегда запускать операции в ViewModel (и не только там) на Dispatchers.Default или Dispatchers.IO

Александр Таганов проделал крутую работу и его кейс позволит ускорить ваши приложения!

Также можно посмотреть на 📹 VK Video

00:00 - Про доклад
02:44 - Долгое ожидание простых операций
12:59 - Разбор причины долгих загрузок
21:30 - Выводы после анализа
24:35 - На что стоит заменить Dispatchers.Main
27:50 - Тестирование разных Dispatcher

#kotlin #coroutines #android
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
📹 Отрывок Kotlin Conf Keynote с рассказом про будущие фичи в Kotlin. Что-то увидем осенью 2025, а что-то ждать больше года 🤯

0:00 Вступление
0:30 Positional Destructing (есть)
1:09 Named-based destructing (новая)
1:51 Nullability: Safety and ergonomics
3:00 Error class/object (новая)
4:07 Must-use Return Values (новая)

#kotlin
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышел второй Release Candidate следующей версии Kotlin - 2.2

#kotlin
💉 Вышел Koin 4.1

Что нового:
👉 Упростили конфигурацию
👉 Улучшили работу со Scope. Дообавили архитипы для Scope
👉 ViewModel Scope интегрировали с механизмом ViewModel auto closable
👉 Появилась возможность проверки конфигурации через через тесты
👉 Поддержка Compose 1.8 и Lifecycle 2.9
👉 Поддеркжа Ktor 3.2

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

#kotlin #di
Please open Telegram to view this post
VIEW IN TELEGRAM