Делимся новостями, библиотеками, интересными кейсами по мобильной разработке с использованием kotlin multiplatform
Kotlin Multiplatform pinned «Делимся новостями, библиотеками, интересными кейсами по мобильной разработке с использованием kotlin multiplatform»
Первой новостью у нас будет очередной релиз кандидат библиотеки https://github.com/badoo/Reaktive
Интересно это в первую очередь тем, что это первая реализация Rx доступная в kotlin common коде, а ещё более интересно - в версии для kotlin/native поддерживается смена потоков. Один из разработчиков библиотеки рассказал детали в своем выступлении в Минске - https://youtu.be/2sxTUzG6HEA
#libs
Интересно это в первую очередь тем, что это первая реализация Rx доступная в kotlin common коде, а ещё более интересно - в версии для kotlin/native поддерживается смена потоков. Один из разработчиков библиотеки рассказал детали в своем выступлении в Минске - https://youtu.be/2sxTUzG6HEA
#libs
GitHub
GitHub - badoo/Reaktive: Kotlin multi-platform implementation of Reactive Extensions
Kotlin multi-platform implementation of Reactive Extensions - badoo/Reaktive
❤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
Напомню что решение согласно документации котлина - активировать только одну из архитектур (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
https://speakerdeck.com/rharter/effective-multiplatform-architecture
#slides
Speaker Deck
Effective Multiplatform Architecture
Building multiplatform apps requires thinking about architecture a little differently than their single platform counterparts. Individually, each platfo…
Второй пост из серии "kotlin multiplatform in five minutes" рассказывает о концепции expect/actual. Для тех кто хоть раз уже использовал этот механизм ничего нового в статье нет, остальным же может быть полезен (в целом как и документация на kotlinlang)
https://touchlab.co/expect-actuals-statements-kotlin-multiplatform/
#posts
https://touchlab.co/expect-actuals-statements-kotlin-multiplatform/
#posts
touchlab.co
Kotlin Multiplatform in Five Minutes or Less: Expect / Actuals Statements
Unlike other “cross platform” ecosystems, Kotlin is designed to embrace the native platform it is integrating with. expect/actual statements.
Продолжим "больную" тему многопоточности в kotlin/native. В прошлом посте я рассказал о библиотеке Reaktive от badoo, которая приносит Rx в общий код и переключение потоков в том числе.
Сегодня же хочется поделиться "народным" решением проблемы многопоточных корутин - https://github.com/Autodesk/coroutineworker
Данная библиотека позволяет выносить выполнение suspend функций на фоновый поток (либо запустить внутри suspend функции выполнение другого блока на фоновом потоке). Построена библиотека примерно так же как и Reaktive - лямбда, которая должна выполниться на фоновом потоке, автоматически замораживается, а с ней и все зависимости которые она имеет (поэтому очень важно не захватить случайно this или какой нибудь из объектов, иначе рассинхрон ThreadLocal копий объектов сломает логику приложения). Результат который выдается из лямбды тоже автоматически замораживается, поэтому модифицировать полученный объект сразу не получится - для модификации придется создавать копию.
#libs
Сегодня же хочется поделиться "народным" решением проблемы многопоточных корутин - https://github.com/Autodesk/coroutineworker
Данная библиотека позволяет выносить выполнение suspend функций на фоновый поток (либо запустить внутри suspend функции выполнение другого блока на фоновом потоке). Построена библиотека примерно так же как и Reaktive - лямбда, которая должна выполниться на фоновом потоке, автоматически замораживается, а с ней и все зависимости которые она имеет (поэтому очень важно не захватить случайно this или какой нибудь из объектов, иначе рассинхрон ThreadLocal копий объектов сломает логику приложения). Результат который выдается из лямбды тоже автоматически замораживается, поэтому модифицировать полученный объект сразу не получится - для модификации придется создавать копию.
#libs
GitHub
GitHub - Autodesk/coroutineworker: Kotlin Coroutine-based workers for native
Kotlin Coroutine-based workers for native. Contribute to Autodesk/coroutineworker development by creating an account on GitHub.