Kotlin Multiplatform Broadcast
9.47K subscribers
838 photos
53 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
🏝 Вышел RC Kotlin 2.1.21 с важными фиксами для KMP

👉 Работа с XCode 16.3
👉 Поддержка K2 в KAPT и Lombok плагинах
👉 Улучшения в stdlib
👉 Новый DSL на замену Gradle Application плагина
🚀 Улучшения производительности

#kotlin #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32
🏝 App Platform от Amazon - легковесный KMP фреймворк для разработки клиенстких приложений. Позволяет управлять состоянием и управлять памятью. Поддерживает Android, iOS, JVM, Native и Web!

Концепция строится вокруг модульной структуры для разделения API и реализации. Для DI по умолчанию используется kotlin-inject-anvil, для Presenter - Molecule, но можно заменить. UI слой может быть написан на удобном для вас UI фреймворке.

Для настройки требуется подключение Gradle плагина

На момент написания поста доступна версия 0.0.1

#kotlin #kmp #android #ios #web #desktop #jvm #native
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25
🚀 Библиотека Jetpack Saved State стала KMP с поддержкой Android, iOS, Linux, Mac и JVM. Решение поможет вас сохранять состояние при смерте процесса приложения для восстановления состояния

#jetpack #kotlin #kmp #android #ios #desktop
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37
🏝 Вышел SqlDelight 2.1.0

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

#kotlin #kmp #sqlite #k2
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥37👍52🤯1
🏝 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
3👍21🤔9
🏝 Обновление 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
🎉48🔥15👍5
Команда плагина будет работать над улучшениями инструментов для 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
43👍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
👍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 проекте теперь можно шарить код между 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
🤯 Как 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👍71