Kotlin Multiplatform
2.63K subscribers
84 photos
3 videos
407 links
Русскоязычный канал новостей о Kotlin Multiplatform
Download Telegram
Channel created
Делимся новостями, библиотеками, интересными кейсами по мобильной разработке с использованием kotlin multiplatform
Kotlin Multiplatform pinned «Делимся новостями, библиотеками, интересными кейсами по мобильной разработке с использованием kotlin multiplatform»
Первой новостью у нас будет очередной релиз кандидат библиотеки https://github.com/badoo/Reaktive
Интересно это в первую очередь тем, что это первая реализация Rx доступная в kotlin common коде, а ещё более интересно - в версии для kotlin/native поддерживается смена потоков. Один из разработчиков библиотеки рассказал детали в своем выступлении в Минске - https://youtu.be/2sxTUzG6HEA

#libs
1
А из интересных кейсов вчера поднялась в kotlinlang.slack.com интересная тема - как включить в градле обе айос архитектуры так, чтобы IDE не ломалась.
Напомню что решение согласно документации котлина - активировать только одну из архитектур (x64 по умолчанию, а если передана переменная окружения SDK_NAME с значением iphoneos - то arm64) из-за чего компиляция под устройство доступна только из xcode и нет управления полноценного зависимостями (ведь зависимости то под конкретную архитектуру скомпилированы).
Были озвучены пара интересных хаков:
1. Создать iosX64 таргет с именем ios (таким образом получаем сорссет iosMain), а так же обычные iosX64 и iosArm64 с указанием dependsOn iosMain. Говорят так получаем единый код и корректную работу IDE
2. Хранить код в iosMain директории, а для Gradle и IDE создать две симлинки iosX64Main и iosArm64Main после чего IDE корректно видит actual классы и Gradle предоставляет отдельные таски сборки айос версии, без лишних тасок как в первом случае.

Подробнее можно ознакомиться тут https://kotlinlang.slack.com/archives/C3SGXARS6/p1568297037167500

#cases
С прошедшего в прошлом месяце droidcon NYC рекомендую ознакомиться в первую очередь с докладом о эффективной мультиплатформенной архитектуре. Это не очередной доклад про MV* а хороший разбор как привести две платформы к общему коду - подготовиться сначала разбив на модули, после чего выбрать в каком порядке делать подключение второй платформе к общим модулям (разобрано сразу несколько вариантов). Все наглядно с картинками и кодом
https://speakerdeck.com/rharter/effective-multiplatform-architecture

#slides
Второй пост из серии "kotlin multiplatform in five minutes" рассказывает о концепции expect/actual. Для тех кто хоть раз уже использовал этот механизм ничего нового в статье нет, остальным же может быть полезен (в целом как и документация на kotlinlang)
https://touchlab.co/expect-actuals-statements-kotlin-multiplatform/

#posts
Продолжим "больную" тему многопоточности в kotlin/native. В прошлом посте я рассказал о библиотеке Reaktive от badoo, которая приносит Rx в общий код и переключение потоков в том числе.
Сегодня же хочется поделиться "народным" решением проблемы многопоточных корутин - https://github.com/Autodesk/coroutineworker
Данная библиотека позволяет выносить выполнение suspend функций на фоновый поток (либо запустить внутри suspend функции выполнение другого блока на фоновом потоке). Построена библиотека примерно так же как и Reaktive - лямбда, которая должна выполниться на фоновом потоке, автоматически замораживается, а с ней и все зависимости которые она имеет (поэтому очень важно не захватить случайно this или какой нибудь из объектов, иначе рассинхрон ThreadLocal копий объектов сломает логику приложения). Результат который выдается из лямбды тоже автоматически замораживается, поэтому модифицировать полученный объект сразу не получится - для модификации придется создавать копию.

#libs
Пока нет горячих новостей продолжим обзор доступных библиотек. Не так давно появился плагин, который автоматически генерирует для корутин методы которые будут доступны на стороне iOS. Проблема с корутинами на айос не только в отсутствии многопоточности, но и в том что все suspend функции недоступны для вызова из swift (такой вид функций в swift не существует). А плагин при выставлении специальной аннотации автоматически сгенерирует код функции с калбеком, которая внутри уже вызывает suspend функцию. Тем кто хочет иметь доступ с натива до suspend функций - must have.
https://github.com/feilfeilundfeil/kotlin-native-suspend-function-callback

#libs
Сегодня поделюсь недавно опубликованной презентацией доклада о kotlin multiplatform задевающей и сравнение с кроссплатформенными решениями, и создание приложения с стандартной функциональностью мобилок - работа с сетью, хранение данных локально, вывод данных пользователю. Основная ценность именно в наглядном и доступном примере - не "hello world", а с обычным функционалом мобильных приложений. В комплекте и сравнение техстека нативок и мультиплатформенной разработки, и сравнение языков, и отзывы айос разработчиков, и немного рекомендаций. Для тех кто с темой знакомится - рекомендую. Для тех кто уже разрабатывает на мультиплатформе - скорей всего нового ничего не будет (если только работа с sqldelight в новинку, ну и отзывы айосников).
https://speakerdeck.com/cmota/the-hitchhikers-guide-through-kotlin-multiplatform-extended
демо проект тут - https://github.com/cmota/droidconLX

#slides