Kotlin Multiplatform Broadcast
9.52K subscribers
850 photos
53 videos
1.15K links
Новости и фичи Kotlin, а также Kotlin Multiplatform

YouTubе канал: https://youtube.com/androidBroadcast
Compose Multiplatform @compose_broadcast
iOS разработка @ios_broadcast
Новости Android @android_broadcast
Реклама и прочее @ab_manager
Download 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
👍22🔥9
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
👍823
Media is too big
VIEW IN TELEGRAM
📹 История, принципы и концепции библиотеки навигации Decompose

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

Также из доклада вы узнаете об основных API библиотеки, и поймете, как и почему так просто создавать свои собственные модели навигации. Вы узнаете не только «как», но и «почему».

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

#kmp #архитектура #kotlin #mobius
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3910🎉5
This media is not supported in your browser
VIEW IN TELEGRAM
🐱 LensLogger - KMP опенсорс библиотека для Android, iOS и Desktop чтобы отслеживать сетевые запросы через Ktor клиент и изучать их прямо из вашего приложения.

Подключаете зависимости и делается инициализацию
val client = HttpClient(engine) {
// body
install(LensHttpLogger){
level = LogLevel.ALL
}
}


#kotlin #kmp #ktor
Please open Telegram to view this post
VIEW IN TELEGRAM
44👍16🔥7
🚀 В Jetpack Paging 3.4.0-alpha01 добавили поддержку новых таргетов: watchos, tvos, mingwX64, watchosDeviceArm64 и linuxArm64

Библиотека для пагинации от Google уже давно обзавелась поддержкой iOS и Desktop, а вот в будущей версии и закроются остальный части, кроме JS и WASM.

#android #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍244
Forwarded from Android Broadcast
🤖 Jetpack Lifecycle теперь поддерживает все KMP тартеты

В версии Jetpack Lifecycle 2.9.2 добавили поддержку WasmJS тартега, а это значит что библиотека теперь может работать на всех KMP таргетах: JVM (Android, Desktop), Native (Linux, iOS, watchOS, macOS, MinGW) и Web (JavaScript, WasmJS)

#android #kmp @wasmjs #jetpackupdate
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥39👍19
🏝 Kombinator - open source библиотека для генерации экземпляров Kotlin объектов со всеми возможными комбинациями значений из заданных.

Библиотека работает на основе генерации кода через KSP. Может быть полезна для тестов, чтобы проверять разные входные данные.

// Уровень класса @Kombine: Задает значения по умолчанию для свойств
// без аннотаций и без дефолтных значений property
@Kombine(
allPossibleIntParams = [100],
allPossibleStringParams = ["system"],
)
data class ScreenConfig(
// Аннотация на уровне свойства переопределяет уровень класса для 'theme'
@Kombine(allPossibleStringParams = ["light", "dark", "auto"])
val theme: String,

// Есть значение по умолчанию, Kombinator будет использовать ТОЛЬКО "portrait"
val orientation: String = "portrait",

// Нет аннотации @Kombine и значения по умолчанию.
// Будет использовать значение уровня класса: [100]
val padding: Int,

// Аннотация на уровне свойства переопределяет уровень класса для 'fontSize'
@Kombine(allPossibleIntParams = [12, 16, 20])
val fontSize: Int,

// Нет аннотации @Kombine и значения по умолчанию.
// Будет использовать значение уровня класса: ["system"]
val fontFamily: String,
)

#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31🏆2
🏝 Вышел Coil 3.3.0 - загрузчик картинок с поддержкой KMP

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

#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍8
🏝🦢 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
👍30🔥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 проекте теперь можно шарить код между JS и wasmJs таргетами через общий source set - WEB.

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

#kotlin #kmp
🔥167👍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
🤯 Как 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👍761🙏1
🏝 Полное текстовое руководство (EN,16м) про OrbitMVI - просто MVI фреймворк для Kotlin Multiplatform с поддержкой Android, iOS и JVM Desktop.

// Пример OrbitMVI
class CalculatorViewModel: ContainerHost<CalculatorState, CalculatorSideEffect>, ViewModel() {

// Include `orbit-viewmodel` for the factory function
override val container = container<CalculatorState, CalculatorSideEffect>(CalculatorState())

fun add(number: Int) = intent {
postSideEffect(CalculatorSideEffect.Toast("Adding $number to ${state.total}!"))

reduce {
state.copy(total = state.total + number)
}
}
}



#kmp #mvi #android #ios #desktop
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17🤔9👍62
🏝 Обновление Kotlin Roadmap - Август 2025

Команда Kotlin обновляет дорожную карту каждые полгода, подводя итоги и планируя следующие шаги:

Compose Multiplatform
👉 Перевести Compose Multiplatform for Web в Beta
👉 Выпустить больше Jetpack библиотек для KMP. В первую очередь Navigation 3 и Paging 3
👉 Новый компонент для ввода текста на iOS с целью чтобы сделать его максимально нативным по виду и поведению
👉 Унификация Compose Preview аннотации (сейчас их 3 с разными пакетами)

Kotlin Multiplatform IDE плагин
👉 Поддержка работы плагина на Windows и Linux, но там не будет поддержки работы со Swift и сборки под Apple платформы
👉 Возможность просмотра документации подключенных Swift/Obj-C библиотек
👉 Поддержка Swift 6.2 и Xсode 2026
👉 Улучшение навигации и рефакторинга кросс языков
👉 Улучшение работы Compose Preview в common

Kotlin/Native и Kotlin/iOS
👉 Развитие Swift Export и стабильный релиз в 2026 году
👉 Поддержать Kotlin Coroutines и Flow в Swift Export
👉 Сокращение времени сборки

Kotlin/JS
👉 Автоматическое переключение на Kotlin/JS для Compose for Web, когда WASM таргет не работает
👉 Расширение возможностей JavaScript Export: suspend функции, value классы, typealias и другие

Kotlin/WASM
👉 Релиз Kotlin/WASM Beta
👉 Поддержка многомодульной компиляции для динамической загрузки

Инструменты для сборки
👉 Сделать конфигурацию Gradle сборки удобнее
👉 Упростить публикацию KMP библиотек
👉 Предоставление Build tools API для удобства интеграции с разными билд системами
👉 Ускорение сборки и процесса импорта проекта в Gradle

#kotlin #compose #wasm #ios #native #gradle #idea #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥40👍64
‼️ Упрощённый и быстрый: Google выпустила специальный плагин для Android-таргетов в KMP

Google анонсировала официальный Gradle-плагин com.android.kotlin.multiplatform.library для настройки Android-таргета в Kotlin Multiplatform (KMP). Это станет стандартом для будущей разработки KMP-библиотек.

➡️ Зачем нужен отдельный плагин?

🚀Скорость и стабильность: Повышение скорости сборки и улучшение работы кэша.
🔨 Улучшенная IDE-интеграция: Более гладкая работа с Android Studio.
🛠 Простота конфигурации: Упрощение настройки KMP-проектов под Android в Gradle.

⚖️ Чем отличается от обычного com.android.library?

Новый плагин заточен именно под библиотеки и лишён избыточных функций:
Нет поддержки множественных вариантов сборки (productFlavors)
Нет поддержки C/C++, AIDL, RenderScript
Нет встроенных возможностей View Binding, Data Binding
Тесты и Android-ресурсы отключены по умолчанию
Компиляция Java отключена по умолчанию (но есть опция включения)

// Пример конфигурации в Gradle Kotlin DSL
plugins {
alias(libs.plugins.kotlin.multiplatform) // Kotlin 2.0+
alias(libs.plugins.android.kotlin.multiplatform.library) // AGP 8.10+
}

// Такого DSL больше не будет для Android KMP библиотеки
android {}

kotlin {
androidLibrary {
namespace = "dev.androidbroadcast.kmplib"
compileSdk = 36
minSdk = 24

enableAndroidResources = true // Включение ресурсов
withJava() // Включение Java

// Настройка тестов для хоста (JVM)
withHostTestBuilder { }

// Настройка инструментальных тестов на устройстве
withDeviceTestBuilder {
sourceSetTreeName = "test"
}

compilations.configureEach {
compilerOptions.configure {
jvmTarget.set(JvmTarget.JVM_21)
}
}
}

sourceSets {
androidMain { ... }
androidHostTest { ... }
androidDeviceTest { ... }
}
}


💬 Что думаете о новом плагине? Уже успели попробовать? Делитесь мнением в комментариях!

#android #kmp #kotlin #gradle #news
Please open Telegram to view this post
VIEW IN TELEGRAM
🏆29🎉10👍8🤔3
🏝🦢 Чтобы попробовать Kotlin-to-Swift экспорт надо изменить Gradle таск, вызываемый при сборки XCFramework в iOS.

embedAndSignAppleFrameworkForXcode -> embedSwiftExportForXcode

./gradlew :<Shared module>:embedSwiftExportForXcode


Флаг kotlin.experimental.swift-export.enabled можно удалить из gradle.properties, потому что c версии Kotlin 2.2.20 фича включена по умолчанию

‼️ ВАЖНО. Пока не поддерживаются все фичи Kotlin (например, трансляция suspend функций во что-то удобное на Swift). Будут доработки в будущих версия Kotlin (минорных и мажорных)

#kotlin #xcode #swift #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥25👍61
Forwarded from Compose Broadcast
‼️ Опубликовали первую сборку Navigation3 для Compose Multiplatfom

Подкючайте артефакт org.jetbrains.androidx.navigation3:navigation3-ui:1.0.0-alpha01 в common код и можете пробовать

Ждем актуализации до свежей альфа версии, а также адаптивные layout и интеграцию с ViewModel

#compose #kmp #naviation #jetpack
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥36👍7🤔4
SqlDelight AndroidX Driver - реаилзация драйвера для SqlDelight, который построен на основе библиотеки androidx.sqlite из Jetpack

Database(
AndroidxSqliteDriver(
driver = BundledSQLiteDriver(),
type = AndroidxSqliteDatabaseType.File("<path to db file>"),
schema = Database.Schema,
)
)


#android #kmp #sqlite
12👍6