Kotlin Multiplatform
2.62K subscribers
84 photos
3 videos
407 links
Русскоязычный канал новостей о Kotlin Multiplatform
Download Telegram
А из интересных кейсов вчера поднялась в 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
Разработка приложений с общим кодом на обе платформы не нова, и среди популярных решений есть сейчас React Native (от которого некоторые большие компании начинают уходить), Flutter (к которому многие идут) и Kotlin Multiplatform (про который наш канал). И периодически слышен вопрос от некоторых разработчиков: вот на kotlin можно написать общую логику, но нельзя писать UI (точнее неудобно), а можно ли совместить общую логику на kotlin и общий UI на Flutter?
Ответ: да, можно. И это даже делали...На эту тему есть пара статей - Fast Prototypes with Flutter + Kotlin/Native (русский перевод) и Приложение для iOS и Android на Kotlin + Flutter UI. При чем у второй статьи есть и открытый код, а сама статья это пошаговая инструкция как сделать так же самому (первая же статья больше про сам принцип и немного про ограничения этого симбиоза).

Если задуматься над вопросом "а зачем?" то мысли есть такие:
1. Для разработки прототипа одним человеком (особенно если сделать автоматическую генерацию каналов для связи kotlin и flutter между собой) - нам нужен человек который и общую логику на kotlin напишет и ui сразу на обе платформы сделает, при чем с hot reload и действительно быстрой разработкой визуала;
2. Для дальнейшего развития этого прототипа в большое замудреное приложение, напичканное разными нативными штуками типа фоновых сервисов, интеграций разных экстеншенов и прочих платформенных штук. С заменой UI на нативный, привычный всем пользователям. То есть достигаем как можно быстрее состояния MVP для проверки гипотезы, а если ее ждет успех - тогда уже вкладываем ресурсы в нативную разработку (не выкидывая общую бизнеслогику написанную на kotlin).

Возможно и у вас есть свое мнение по поводу вопроса "зачем соединять flutter и kotlin mpp?" - заходите в чат и поделитесь.

#posts #cases
На одном из наших проектов, который мы делали с использованием kotlin multiplatform, нам нужно было сделать вывод чисел с множеством знаков после запятой. Баланс кошелька криптовалюты и суммы перевода могут быть очень маленьким числом, но требовалась точность, так как каждый 0.000000001 это реальные деньги, при чем совсем не копейки. Как оказалось в kotlin common-stdlib нет bigdecimal, но обе мобильные платформы такой тип имеют, поэтому мы довольно быстро и просто сделали expect/actual класс BigDecimal, передав эту специфику на платформы...сейчас же никому не потребуется делать кастомный expect/actual, так как уже доступна библиотека kotlin-multiplatform-bignum (с поддержкой kotlin 1.3.50), которая содержит и bigdecimal и biginteger, и математические операторы.

#libs #cases
Команда SuperAwesome разработала мобильное приложение Rukkaz для видео стримингового сервиса с использованием kotlin multiplatform. Про это они рассказали в своей статье – How we developed our new video platform Rukkaz as a cross-platform mobile app.

Само приложение можно скачать и посмотреть:
iOS
Android

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

#cases #posts