Наконец-то опубликованы видео с прошедшего DroidCon New York, на котором было очень много внимания уделено именно Kotlin Multiplatform в мобильной разработке. Что есть:
* Native Concurrency and Coroutines - от автора библиотеки CoroutineWorker , которая позволяет выполнять suspend функции на отдельных потоках - как появилась библиотека и как используется в Autodesk;
* Multiplatform Library Development - от автора библиотеки multiplatform-settings - про разработку mpp библиотеки, про проектирование апи под обе платформы, про состояние kotlin mpp на данный момент;
* Lessons Learned from Using Kotlin Multiplatform internally - опыт погружения андроид и айос специалистов в мультиплатформу, какие шишки набивали, какие выводы сделали, фидбек айосников;
* Effective Multiplatform Architecture - очень классная презентация с полезными аргументами как продать мпп бизнесу, так и для технарей с полезными идеями как вводить мультиплатформу в существующий проект;
* Multiplatform Functional Architecture - про архитектуру MVU (Model-View-Update) на мультиплатформе. Библиотека oolong поможет строить такую архитектуру. Для любителей Redux;
* SwiftUI meets Kotlin Multiplatform! - небольшой доклад про то как дружили общую библиотеку и SwiftUI. Для этого предложено и ViewModel'и унести на сторону нативного android, ios кода;
* Using Kotlin/JS and Kotlin/Native on Android - доклад от Jake Wharton о том как на андроиде он дружил обычный котлин, нативный котлин и kotlin js в одном приложении;
* Building apps using Kotlin Native - расказ про разработку общей библиотеки, для новичков в теме. Даже задета тема про Worker'ы для многопоточности на Native.
#videos
* Native Concurrency and Coroutines - от автора библиотеки CoroutineWorker , которая позволяет выполнять suspend функции на отдельных потоках - как появилась библиотека и как используется в Autodesk;
* Multiplatform Library Development - от автора библиотеки multiplatform-settings - про разработку mpp библиотеки, про проектирование апи под обе платформы, про состояние kotlin mpp на данный момент;
* Lessons Learned from Using Kotlin Multiplatform internally - опыт погружения андроид и айос специалистов в мультиплатформу, какие шишки набивали, какие выводы сделали, фидбек айосников;
* Effective Multiplatform Architecture - очень классная презентация с полезными аргументами как продать мпп бизнесу, так и для технарей с полезными идеями как вводить мультиплатформу в существующий проект;
* Multiplatform Functional Architecture - про архитектуру MVU (Model-View-Update) на мультиплатформе. Библиотека oolong поможет строить такую архитектуру. Для любителей Redux;
* SwiftUI meets Kotlin Multiplatform! - небольшой доклад про то как дружили общую библиотеку и SwiftUI. Для этого предложено и ViewModel'и унести на сторону нативного android, ios кода;
* Using Kotlin/JS and Kotlin/Native on Android - доклад от Jake Wharton о том как на андроиде он дружил обычный котлин, нативный котлин и kotlin js в одном приложении;
* Building apps using Kotlin Native - расказ про разработку общей библиотеки, для новичков в теме. Даже задета тема про Worker'ы для многопоточности на Native.
#videos
Сегодня поделюсь статьей, которую возможно уже видели в сети, но она имеет очень интересную информацию. Статья про разработку библиотеки kissme - не про поцелуи, а про хранение данных в keychain. Помимо просто истории о разработке multiplatform библиотеки и столкновением с некоторыми ограничениями, тут есть то что не часто встретишь - линковка objective-c библиотеки в kotlin код. У ребят как раз был кейс, что не смогли через kotlin ios-specific код сделать нужную функциональность и поэтому решили сделать дополнительно objective-c библиотеку, которую прилинковали к котлину через cinterop и в итоге вызывали из котлина функции своей библиотеки.
Kissme: Kotlin Secure Storage Multiplatform library. The Code Story.
#posts #libs
Kissme: Kotlin Secure Storage Multiplatform library. The Code Story.
#posts #libs
GitHub
GitHub - netguru/Kissme: Kissme: Kotlin Secure Storage Multiplatform
Kissme: Kotlin Secure Storage Multiplatform. Contribute to netguru/Kissme development by creating an account on GitHub.
Сегодня у нас пост новостей от JetBrains.
Kotlin/Native в следующем релизе получит:
* поддержка Xcode 11
* новый LLVM
* новые API iOS, macOS
* поддержка watchOS и tvOS.
Подробнее тут - https://github.com/JetBrains/kotlin-native/pull/3391
Попробовать можно будет уже скоро - EAP планируется в ближайшие недели.
Так же вы можете задать вопросы про новый релиз напрямую авторам в нашем чатике - нажимайте Discuss и обращайтесь - Николай Иготти уже там (новость как раз от него).
#news
Kotlin/Native в следующем релизе получит:
* поддержка Xcode 11
* новый LLVM
* новые API iOS, macOS
* поддержка watchOS и tvOS.
Подробнее тут - https://github.com/JetBrains/kotlin-native/pull/3391
Попробовать можно будет уже скоро - EAP планируется в ближайшие недели.
Так же вы можете задать вопросы про новый релиз напрямую авторам в нашем чатике - нажимайте Discuss и обращайтесь - Николай Иготти уже там (новость как раз от него).
#news
Ioannis Diamantidis продолжает свою серию статей о Kotlin/Native. Новая статья From Kotlin to Native: Or how Kotlin concepts are mapped to the Apple framework разбирает некоторые особенности получаемого из Kotlin кода iOS фреймворка - как Kotlin код выглядит из ObjectiveC и Swift.
Это не полный список особенностей на стыке Kotlin и ObjC, но знать их очень полезно. Так же еще особенности можно подсмотреть в нашей летней статье - Опыт работы с Kotlin Multiplatform за 10 месяцев. Краткий список особенностей kotlin на стыке с ios доступен в презентации.
Так же в октябре на AppsConf мы отметим еще несколько новых особенностей по актуальной версии Kotlin.
#posts #slides
Это не полный список особенностей на стыке Kotlin и ObjC, но знать их очень полезно. Так же еще особенности можно подсмотреть в нашей летней статье - Опыт работы с Kotlin Multiplatform за 10 месяцев. Краткий список особенностей kotlin на стыке с ios доступен в презентации.
Так же в октябре на AppsConf мы отметим еще несколько новых особенностей по актуальной версии Kotlin.
#posts #slides
Ioannis Diamantidis
From Kotlin to Native: Or how Kotlin concepts are mapped to the Apple framework
TL;DR This post is about how some specific Kotlin features are compiled to Objective-C and how they can be used in a Swift project when using Kotlin Native to build an Apple framework.
Можно ли работать с базой данных из common кода под ios и android? Ответ - конечно можно :) И есть несколько путей:
1. Метод "в лоб" - делаем interface реализация которого будет проброшена с нативной стороны и на android и ios делаем отдельные реализации БД так, как привыкли разработчики;
2. Делаем expect/actual классы, чтобы уже внутри котлина реализовать всю работу с БД, используя нативные средства Android и iOS в actual реализациях;
3. Используем библиотеку SQLiter которая позволяет в common коде работать с sqlite БД напрямую, без каких либо оберток;
4. Используем библиотеку SQLDelight от известных square (которые успели переименоваться в cashapp). Данная библиотека идет в паре с gradle plugin'ом который из специального файла, в котором описана схема базы данных и запросы, которые планируется выполнять, генерирует сущности и методы для выполнения запросов. И все это доступно из common кода для обеих мобильных платформ, а так же уже проверено на Android годами ранее.
Рекомендуемый на данный момент способ это конечно SQLDelight. Для знакомства с ним можно воспользоваться:
* Презентацией SELECT * SQLDelight JOIN Multiplatform в которой разобраны преимущества библиотеки;
* Статьей SQLDelight 1.x Quick Start Guide for Android с пошаговой инструкцией и даже примером юниттестирования;
* Статьей Kotlin Multiplatform. Very beginner’s guide (part 3) Database с пошаговым примером реализации БД, но статья со времен kotlin 1.3.31, так что возможны некоторые нестыковки, особенно по версиям библиотек используемых - с 1.3.50 на айос не сойдутся они, нужно более новые;
* Проектом Droidcon Lisbon - здесь в app есть common source set и используется SQLDelight с версией kotlin 1.3.41;
* Проектом Newsout тоже на версии kotlin 1.3.41.
А еще SQLDelight поддерживает Flow для оповещения о изменениях, но на iOS там есть проблемы, требующие обхода.
#libs #slides #projects
1. Метод "в лоб" - делаем interface реализация которого будет проброшена с нативной стороны и на android и ios делаем отдельные реализации БД так, как привыкли разработчики;
2. Делаем expect/actual классы, чтобы уже внутри котлина реализовать всю работу с БД, используя нативные средства Android и iOS в actual реализациях;
3. Используем библиотеку SQLiter которая позволяет в common коде работать с sqlite БД напрямую, без каких либо оберток;
4. Используем библиотеку SQLDelight от известных square (которые успели переименоваться в cashapp). Данная библиотека идет в паре с gradle plugin'ом который из специального файла, в котором описана схема базы данных и запросы, которые планируется выполнять, генерирует сущности и методы для выполнения запросов. И все это доступно из common кода для обеих мобильных платформ, а так же уже проверено на Android годами ранее.
Рекомендуемый на данный момент способ это конечно SQLDelight. Для знакомства с ним можно воспользоваться:
* Презентацией SELECT * SQLDelight JOIN Multiplatform в которой разобраны преимущества библиотеки;
* Статьей SQLDelight 1.x Quick Start Guide for Android с пошаговой инструкцией и даже примером юниттестирования;
* Статьей Kotlin Multiplatform. Very beginner’s guide (part 3) Database с пошаговым примером реализации БД, но статья со времен kotlin 1.3.31, так что возможны некоторые нестыковки, особенно по версиям библиотек используемых - с 1.3.50 на айос не сойдутся они, нужно более новые;
* Проектом Droidcon Lisbon - здесь в app есть common source set и используется SQLDelight с версией kotlin 1.3.41;
* Проектом Newsout тоже на версии kotlin 1.3.41.
А еще SQLDelight поддерживает Flow для оповещения о изменениях, но на iOS там есть проблемы, требующие обхода.
#libs #slides #projects
Тем кто интересуется темой тестирования кода будет полезна статья Shared Library in Kotlin Multiplatform в которой разобрано по шагам создание общей библиотеки и добавление к ней простых тестов.
В паре с статьей идет и проект-пример, в котором можно наглядно посмотреть и тесты и демо приложение, работающее с сетью (ktor-client, kotlinx.serialization, coroutines - стандартный mpp набор).
Еще примеры тестов можно посмотреть в проекте-примере от russwolf (автор multiplatform-settings) и в еще одном проекте примере.
#posts #samples #tests
В паре с статьей идет и проект-пример, в котором можно наглядно посмотреть и тесты и демо приложение, работающее с сетью (ktor-client, kotlinx.serialization, coroutines - стандартный mpp набор).
Еще примеры тестов можно посмотреть в проекте-примере от russwolf (автор multiplatform-settings) и в еще одном проекте примере.
#posts #samples #tests
Karumi Blog
Shared Library in Kotlin Multiplatform
Explaining our experience with the shared library in Kotlin Multiplatform.
Badoo продолжает радовать контентом по Kotlin Multiplatform. В этот раз подготовили хоршую подробную статью по настройке автосборки для мультиплатформенной библиотеки - Continuous delivery для вашей Kotlin Multiplatform библиотеки. Стоит ознакомиться со статьей даже тем, кто не собирается настраивать CI/CD, так как помимо конфигурации для автоматической сборки и выгрузки в maven репозиторий через Travis CI всех таргетов библиотеки, там описано и строение публикуемых данных - особенно интересно про Gradle Metadata, что так активно используется Kotlin Multiplatform проектами. Всем бы авторам MPP библиотек настроить автоматизацию на github по примеру ребят, чтобы апдейты к библиотекам выходили как можно быстрее, после релиза новой версии котлина.
#posts #libs
#posts #libs
Хабр
Continuous delivery для вашей Kotlin Multiplatform библиотеки
Привет! Меня зовут Юрий Влад, я Android-разработчик в компании Badoo и принимаю участие в создании библиотеки Reaktive — Reactive Extensions на чистом Kotlin. В...
А для тех кто уже успел ознакомиться со статьей от Badoo, есть интересная библиотека - реактивщину в kotlin multiplatform оказывается несут не только Badoo, но и Mirego. И их реализация зовется Trikot.streams. Эта библиотека так же позволяет делать реактивные цепочки с переключением потоков на обеих мобильных платформах (на native так же как Reaktive данные замораживаются для передачи между потоками), но от привычного Rx API библиотеки отличается.
Примеры использования trikot.streams выглядят очень похожими на LiveData, как в moko-mvvm, при чем так же есть конвертация stream в LiveData для android, а для iOS сделан дополнительный cocoapod с вспомогательными swift методами привязки stream к элементам на экране (как и в moko-mvvm).
#libs
Примеры использования trikot.streams выглядят очень похожими на LiveData, как в moko-mvvm, при чем так же есть конвертация stream в LiveData для android, а для iOS сделан дополнительный cocoapod с вспомогательными swift методами привязки stream к элементам на экране (как и в moko-mvvm).
#libs
GitHub
GitHub - mirego/trikot.streams: Reactive Streams for Kotlin Multiplatform with mutability checks
Reactive Streams for Kotlin Multiplatform with mutability checks - GitHub - mirego/trikot.streams: Reactive Streams for Kotlin Multiplatform with mutability checks
Те кто ознакомился с проектом-примером от Karumi, который был в посте со статьей о тестировании, могли заметить что в gradle конфигурации общей библиотеки есть специальная gradle таска, которая генерирует на основе содержимого gradle.properties класс KotlinConfig, по аналогии BuildConfig в android. Эта функциональность далее была выделена в отдельный gradle-plugin который назвали Hagu. Благодаря ему можно вынести различную конфигурацию из кода в gradle.properties файл и иметь единое место для конфигурации. Но в отличие от android в mpp пока нет поддержки buildFlavor, поэтому для конфигурирования разных окружений (dev,prod,stage) это не особо подходит. Зато подходит для подключения разных buildSecret из переменных окружения CI в сборку (чтобы не хранить секреты в самом гите, особенно важно для опенсорс проектов).
#plugins
#plugins
GitHub
GitHub - Karumi/KotlinMultiplatformApp: Application example using Kotlin multiplatform
Application example using Kotlin multiplatform. Contribute to Karumi/KotlinMultiplatformApp development by creating an account on GitHub.
В одном из прошлых постов были разобраны возможные варианты по работе с датой и временем в common коде. Среди всех библиотек особо выделялась библиотека klock, так как имела практически весь нужный в мобильной разработке функционал. Сегодня хочется упомянуть другую библиотеку работы с датой/временем - fluid-time. Она так же поддерживает kotlin 1.3.50 и android (jvm), ios платформы. В ней есть работа с датами, временем, таймзонами, интеграция с kotlinx.serialization из коробки, timestamp. Но чего в ней нет, так это хорошей документации. Поэтому знакомиться с библиотекой и ее API надо через код.
Тем же кто решит заглянуть в gradle конфигурацию библиотеки для упрощения разбора следует сразу ознакомиться с gradle-plugin'ом, который был сделан автором библиотеки специально для поддержки всех своих библиотек.
Так же у автора есть fluid-stdlib - дополнения к kotlin-stdlib в котором есть вынесение в общий код Currency, Country (с использованием на платформах системных инструментов) и множество разных дополнений к типам данных. Опять же документация скудная, смотрите код.
#libs
Тем же кто решит заглянуть в gradle конфигурацию библиотеки для упрощения разбора следует сразу ознакомиться с gradle-plugin'ом, который был сделан автором библиотеки специально для поддержки всех своих библиотек.
Так же у автора есть fluid-stdlib - дополнения к kotlin-stdlib в котором есть вынесение в общий код Currency, Country (с использованием на платформах системных инструментов) и множество разных дополнений к типам данных. Опять же документация скудная, смотрите код.
#libs
Для тех кто пользуется REST API и имеет в проектах OpenAPI (Swagger) спецификацию (надеюсь проектов без серверной спецификации уже все таки нет) в проекте OpenAPIGenerator появилась поддержка генерации kotlin-multiplatform API. На днях вышел релиз, в котором данное изменение уже присутствует.
Генерируется api завязанное на ktor-client, coroutines, KotlinxSerializer (фича ktor-client). Наружу результат запроса выдается в виде HttpResponse из ktor, то есть снаружи можно без проблем обрабатывать любой статус-код.
Мы в IceRock пока не проверяли этот генератор, так как уже полгода пользуемся своим, который наконец-то выгрузили в опенсорс - moko-network. Он основан на более старой версии OpenAPIGenerator'а, но проверен уже несколькими боевыми проектами. Поддерживаются и сериализация enum'ов с разными имя-значение (что из коробки kotlinx.serialization не умеет, но в OpenAPIGenerator'е это реализовано аналогично как у нас), а так же сериализация делается не через фичу KotlinxSerializer чтобы напрямую каждому запросу указывать конкретный сериализатор, это избавляет от проблемы "только один list сериализатор на всю api". В ридми пока не заполнен блок использования, но можно посмотреть по проекту-примеру.
Те кто попробует официальную версию из OpenAPIGenerator'а - прошу напишите свой фидбек использования нам в чат (кнопка discuss). А если и с нашим плагином сравнить удастся - такой фидбек будет еще полезнее.
#plugins
Генерируется api завязанное на ktor-client, coroutines, KotlinxSerializer (фича ktor-client). Наружу результат запроса выдается в виде HttpResponse из ktor, то есть снаружи можно без проблем обрабатывать любой статус-код.
Мы в IceRock пока не проверяли этот генератор, так как уже полгода пользуемся своим, который наконец-то выгрузили в опенсорс - moko-network. Он основан на более старой версии OpenAPIGenerator'а, но проверен уже несколькими боевыми проектами. Поддерживаются и сериализация enum'ов с разными имя-значение (что из коробки kotlinx.serialization не умеет, но в OpenAPIGenerator'е это реализовано аналогично как у нас), а так же сериализация делается не через фичу KotlinxSerializer чтобы напрямую каждому запросу указывать конкретный сериализатор, это избавляет от проблемы "только один list сериализатор на всю api". В ридми пока не заполнен блок использования, но можно посмотреть по проекту-примеру.
Те кто попробует официальную версию из OpenAPIGenerator'а - прошу напишите свой фидбек использования нам в чат (кнопка discuss). А если и с нашим плагином сравнить удастся - такой фидбек будет еще полезнее.
#plugins
GitHub
Kotlin multiplatform client by andrewemery · Pull Request #3900 · OpenAPITools/openapi-generator
Support for the generation of Kotlin Multiplatform clients.
Background
The kotlin language defined in the Swagger Codegen project currently generates a Kotlin client that can run on the JVM. Somewh...
Background
The kotlin language defined in the Swagger Codegen project currently generates a Kotlin client that can run on the JVM. Somewh...
Разработка приложений с общим кодом на обе платформы не нова, и среди популярных решений есть сейчас 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
Ответ: да, можно. И это даже делали...На эту тему есть пара статей - 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
Medium
Sunsetting React Native
Due to a variety of technical and organizational issues, we will be sunsetting React Native and putting all of our efforts into making…
В очередной раз пост о Reaktive. Сегодня он особенный, так как библиотека получила первый релиз, а значит Rx в общем коде доступен и стабилен.
А в добавку к релизу у библиотеки появились новые дополнения:
1. интероп с rxjava2/3 - для тех кто постепенно переносит android приложение в общий код и имеет в самом приложении rxjava - будет проще цепляться к общему коду, который на Reaktive;
2. интероп с coroutines - тут уже не только с android миром, но и с другими multiplatform библиотеками можно взаимодействовать. Например сделать запросы через ktor-client с Reaktive, скрывая стандартные coroutines внутри.
Badoo одни из немногих в русском сегменте, кто развивает поддержку kotlin multiplatform в мобильной разработке. Спасибо ребятам :)
#libs
А в добавку к релизу у библиотеки появились новые дополнения:
1. интероп с rxjava2/3 - для тех кто постепенно переносит android приложение в общий код и имеет в самом приложении rxjava - будет проще цепляться к общему коду, который на Reaktive;
2. интероп с coroutines - тут уже не только с android миром, но и с другими multiplatform библиотеками можно взаимодействовать. Например сделать запросы через ktor-client с Reaktive, скрывая стандартные coroutines внутри.
Badoo одни из немногих в русском сегменте, кто развивает поддержку kotlin multiplatform в мобильной разработке. Спасибо ребятам :)
#libs
GitHub
GitHub - badoo/Reaktive: Kotlin multi-platform implementation of Reactive Extensions
Kotlin multi-platform implementation of Reactive Extensions - badoo/Reaktive
Уже пошла подготовка новой версии котлина к релизу - kotlin 1.3.60 EAP 1 уже доступен.
Общий список изменений большей частью содержит множество багфиксов, заметна большая работа над стабилизацией. В IDE улучшена поддержка gradle-kts (более быстрые подсказки, ура). Но самое интересное для мобильной мультиплатформенной разработки вынесено в отдельный список изменений (kotlin/native changelist) и тут видно сильно больше работы над развитием, чем стабилизацией:
* Добавлена поддержка Xcode 11 (это не означает что в kotlin 1.3.50 нельзя с xcode 11 работать, а значит что что все новые API выпущенные apple в Xcode 11 теперь доступны из kotlin);
* Добавлены новые таргеты - watchos, tvos, native android. Уже можно брать и пробовать шарить kotlin код по часам и андроида и айоса, по тв приставкам обеих платформ, и даже делать native библиотеки для андроида тоже на котлине, чтобы например достучаться напрямую до какой нибудь C библиотеки которую хочется подцепить в приложение;
* Улучшена производительность в некоторых кейсах (от 5 до 50 раз ускорения);
* Улучшена скорость сборки больших многомодульных проектов;
* Исправлена ошибка подсчета ссылок на стыке kotlin и swift при многопоточном выполнении;
* Исправлена ошибка приводящая к крешам на ios arm64.
Те кто пробуют поддержку новых таргетов - отпишите свое мнение в чат. А мы в скором времени поделимся своим фидбеком от работы с watchos из kotlin/native, там же в чате.
#news
Общий список изменений большей частью содержит множество багфиксов, заметна большая работа над стабилизацией. В IDE улучшена поддержка gradle-kts (более быстрые подсказки, ура). Но самое интересное для мобильной мультиплатформенной разработки вынесено в отдельный список изменений (kotlin/native changelist) и тут видно сильно больше работы над развитием, чем стабилизацией:
* Добавлена поддержка Xcode 11 (это не означает что в kotlin 1.3.50 нельзя с xcode 11 работать, а значит что что все новые API выпущенные apple в Xcode 11 теперь доступны из kotlin);
* Добавлены новые таргеты - watchos, tvos, native android. Уже можно брать и пробовать шарить kotlin код по часам и андроида и айоса, по тв приставкам обеих платформ, и даже делать native библиотеки для андроида тоже на котлине, чтобы например достучаться напрямую до какой нибудь C библиотеки которую хочется подцепить в приложение;
* Улучшена производительность в некоторых кейсах (от 5 до 50 раз ускорения);
* Улучшена скорость сборки больших многомодульных проектов;
* Исправлена ошибка подсчета ссылок на стыке kotlin и swift при многопоточном выполнении;
* Исправлена ошибка приводящая к крешам на ios arm64.
Те кто пробуют поддержку новых таргетов - отпишите свое мнение в чат. А мы в скором времени поделимся своим фидбеком от работы с watchos из kotlin/native, там же в чате.
#news
GitHub
Release Kotlin 1.3.60 EAP 1 · JetBrains/kotlin
CHANGELOG
1.3.60
Android
KT-27170 Android lint tasks fails in Gradle with MPP dependency
Compiler
New Features
KT-31230 Refine rules for allowed Array-based class literals on different platforms...
1.3.60
Android
KT-27170 Android lint tasks fails in Gradle with MPP dependency
Compiler
New Features
KT-31230 Refine rules for allowed Array-based class literals on different platforms...
На одном из наших проектов, который мы делали с использованием kotlin multiplatform, нам нужно было сделать вывод чисел с множеством знаков после запятой. Баланс кошелька криптовалюты и суммы перевода могут быть очень маленьким числом, но требовалась точность, так как каждый 0.000000001 это реальные деньги, при чем совсем не копейки. Как оказалось в kotlin common-stdlib нет bigdecimal, но обе мобильные платформы такой тип имеют, поэтому мы довольно быстро и просто сделали expect/actual класс BigDecimal, передав эту специфику на платформы...сейчас же никому не потребуется делать кастомный expect/actual, так как уже доступна библиотека kotlin-multiplatform-bignum (с поддержкой kotlin 1.3.50), которая содержит и bigdecimal и biginteger, и математические операторы.
#libs #cases
#libs #cases
App Store
Apatris Mobile Wallet
Apatris is a convenient and safe Multi-Currency Wallet. Store, Invest and Exchange in one App!
Performance Capacity:
- Store 8 popular crypto assets (BTC, ETH, LTC, BCH, ETC, XRP, DAI, EURS)
- Use two stable coins in the Wallet (MakerDAO, Stasis)
- Perform…
Performance Capacity:
- Store 8 popular crypto assets (BTC, ETH, LTC, BCH, ETC, XRP, DAI, EURS)
- Use two stable coins in the Wallet (MakerDAO, Stasis)
- Perform…
Со стороны общего кода становится доступно все больше возможностей по работе с специфичными мобильными функциями. Например, уже доступна библиотека blue-falcon, позволяющая работать с Bluetooth из общего кода - проводить сканирование устройств, подключаться к определенному и читать/записывать характеристики.
А в связке с moko-permissions, которая позволяет получать рантайм разрешения из общего кода, получается что даже при реализации, например, приложения-сканера устройств в общем коде будет совсем все, кроме UI.
#libs
А в связке с moko-permissions, которая позволяет получать рантайм разрешения из общего кода, получается что даже при реализации, например, приложения-сканера устройств в общем коде будет совсем все, кроме UI.
#libs
GitHub
GitHub - Reedyuk/blue-falcon: A Bluetooth kotlin multiplatform "Cross-Platform" library for iOS and Android
A Bluetooth kotlin multiplatform "Cross-Platform" library for iOS and Android - Reedyuk/blue-falcon
В мобильной разработке на обеих платформах уже есть множество разных библиотек, предоставляющих основные компоненты для построения архитектуры приложения. Так как мобильные приложения в большинстве своем это просто клиентское приложение большей частью из UI, то речь идет про MV*. Сами подходы MVC, MVP, MVVM, MVI, VIPER, MVU и прочие не требуют использовать готовую реализацию, так как это просто подходы, но с готовой реализацей все же проще.
Несколько следующих постов будут посвящены обзору архитектурных библиотек в kotlin multiplatform.
Первая библиотека - moko-mvvm. Это порт классов LiveData и ViewModel из Android Architecture Components в мир kotlin multiplatform, поэтому для android разработчиков будет очень знакома. Причем для android ViewModel и LiveData остаются "настоящими" - из AAC, что позволяет использовать все нативные интеграции с тулингом и самими AAC. Для iOS был сделан свой вариант LiveData и ViewModel, но так как жизненный цикл экрана на iOS сильно проще чем на android - реализация тоже сильно проще.
Помимо простого портирования LiveData обзавелась множеством операторов, по примеру Rx, что позволяет построить любую логику реактивного преобразования данных.
Для iOS поставляется дополнительный cocoapod с методами привязки livedata к набору стандартных view, что упрощает интеграцию в iOS (а на android можно либо интегрироваться через DataBinding, либо например KotlinDataBind).
Так же предоставляется способ сообщения о одиночных событиях с ViewModel на UI - EventsDispatcher. Это не SingleLiveData, а система с конкретным интерфейсом слушателя, позволяющая компилятору проверить все ли из необходимых к реализации методов имплементировано на обеих платформах.
Проект пример доступен там же в репозитории.
#libs
Несколько следующих постов будут посвящены обзору архитектурных библиотек в kotlin multiplatform.
Первая библиотека - moko-mvvm. Это порт классов LiveData и ViewModel из Android Architecture Components в мир kotlin multiplatform, поэтому для android разработчиков будет очень знакома. Причем для android ViewModel и LiveData остаются "настоящими" - из AAC, что позволяет использовать все нативные интеграции с тулингом и самими AAC. Для iOS был сделан свой вариант LiveData и ViewModel, но так как жизненный цикл экрана на iOS сильно проще чем на android - реализация тоже сильно проще.
Помимо простого портирования LiveData обзавелась множеством операторов, по примеру Rx, что позволяет построить любую логику реактивного преобразования данных.
Для iOS поставляется дополнительный cocoapod с методами привязки livedata к набору стандартных view, что упрощает интеграцию в iOS (а на android можно либо интегрироваться через DataBinding, либо например KotlinDataBind).
Так же предоставляется способ сообщения о одиночных событиях с ViewModel на UI - EventsDispatcher. Это не SingleLiveData, а система с конкретным интерфейсом слушателя, позволяющая компилятору проверить все ли из необходимых к реализации методов имплементировано на обеих платформах.
Проект пример доступен там же в репозитории.
#libs
GitHub
GitHub - icerockdev/moko-mvvm: Model-View-ViewModel architecture components for mobile (android & ios) Kotlin Multiplatform development
Model-View-ViewModel architecture components for mobile (android & ios) Kotlin Multiplatform development - icerockdev/moko-mvvm
Продолжим обзор архитектурных библиотек. Сегодня обратим внимание на библиотеку redux-kotlin. Это порт многим знакомого reduxjs в мир kotlin-multiplatform. Поддерживаются все платформы, доступные kotlin.
В архитектуре придерживаются 3х принципов:
* Единый источник правды (единый State);
* Состояние не изменяемое;
* Изменения в состояние могут быть сделаны только через чистые функции, создающие новое состояние.
Взаимодействие со стороны UI простое:
* подписываемся на изменение состояния (при каждом изменении применяем новый State к нашему UI так, как нам удобно);
* для выполнения действий пользователя, сообщаем хранилищу о действии через dispatch, который получает на вход одно из действий (заранее прописываемые классы).
При желании можно совместить redux с MVP/MVVM, используя ViewModel или Presenter для наблюдения за состоянием и передачи View нужных данных (все же изменения состояний берет на себя сам redux).
Наглядный пример можно посмотреть в презентации ReduxKotlin.org с DroidCon NYC 2019.
#libs
В архитектуре придерживаются 3х принципов:
* Единый источник правды (единый State);
* Состояние не изменяемое;
* Изменения в состояние могут быть сделаны только через чистые функции, создающие новое состояние.
Взаимодействие со стороны UI простое:
* подписываемся на изменение состояния (при каждом изменении применяем новый State к нашему UI так, как нам удобно);
* для выполнения действий пользователя, сообщаем хранилищу о действии через dispatch, который получает на вход одно из действий (заранее прописываемые классы).
При желании можно совместить redux с MVP/MVVM, используя ViewModel или Presenter для наблюдения за состоянием и передачи View нужных данных (все же изменения состояний берет на себя сам redux).
Наглядный пример можно посмотреть в презентации ReduxKotlin.org с DroidCon NYC 2019.
#libs
GitHub
GitHub - reduxkotlin/redux-kotlin: Redux implementation for Kotlin (supports multiplatform JVM, native, JS, WASM)
Redux implementation for Kotlin (supports multiplatform JVM, native, JS, WASM) - reduxkotlin/redux-kotlin
Следующая архитектурная библиотека - oolong. Она предоставляет компоненты для построения TEA (The Elm Architecture). Идея близкая к MVI и к redux. Есть Model, которая не изменяется ничем кроме функций в Update и есть View, в которую попадает итоговый результат изменения модели (новое состояние для рендера) - получаем MVU (такую аббривеатуру указывают авторы библиотеки).
В дополнение присутствуют SideEffect'ы, которые изменяют состояние асинхронно (запросы к серверу, чтение бд и прочее). В те же сайд эффекты оригинальная архитектура предполагает располагать все функции с неизвестным значением (рандом, получение текущего времени и подобное, что при каждом вызове функции будет выдавать другой результат).
Сама архитектура пришла из функционального языка Elm и про нее можно послушать неплохой доклад - The Elm Architecture (Алексей Пирогов).
Пример TODO приложения выглядит довольно внушительно, но по сути в этих 300 строках описана работа приложения заметок с фильтрацией, действиями над заметками и прочим (но без сохранения на сервер и сайдэффектов - все строго функционально).
Если кто-то уже использует или использовал такую архитектуру в приложениях для мобилок - расскажите про свой опыт в чат, пожалуйста.
#libs #videos
В дополнение присутствуют SideEffect'ы, которые изменяют состояние асинхронно (запросы к серверу, чтение бд и прочее). В те же сайд эффекты оригинальная архитектура предполагает располагать все функции с неизвестным значением (рандом, получение текущего времени и подобное, что при каждом вызове функции будет выдавать другой результат).
Сама архитектура пришла из функционального языка Elm и про нее можно послушать неплохой доклад - The Elm Architecture (Алексей Пирогов).
Пример TODO приложения выглядит довольно внушительно, но по сути в этих 300 строках описана работа приложения заметок с фильтрацией, действиями над заметками и прочим (но без сохранения на сервер и сайдэффектов - все строго функционально).
Если кто-то уже использует или использовал такую архитектуру в приложениях для мобилок - расскажите про свой опыт в чат, пожалуйста.
#libs #videos
GitHub
GitHub - oolong-kt/oolong: MVU for Kotlin Multiplatform
MVU for Kotlin Multiplatform. Contribute to oolong-kt/oolong development by creating an account on GitHub.
Еще одна архитектурная библиотека – kotlin-mobius. Это перенос mobius от spotify в мир kotlin multiplatform.
Сама архитектура mobius очень похожа на TEA, redux, MVI – есть модель, которая обновляется чистыми функциями, а функции эти запускаются вызовом событий. События вызываются от действий пользователя или же сайд-эффектами. Подход предполагает, что бизнес-логика будет как раз в чистых функциях и будет очень легко покрываться тестами. Подробнее про архитектуру можно послушать в выступлении Mobius: A Loopy UI Architecture - Ahmed Nawara, Spotify.
"Старший брат" в лице оригинального mobius от spotify получил довольно много внимания от community, что добавляет доверия.
Тем, кто захочет попробовать данную библиотеку потребуется сначала выпустить к ней апдейт на версии kotlin 1.3.50 (последняя версия библиотеки была собрана с 1.3.40). Хотя, если желающих будет достаточно, автор может отреагировать и на issue с просьбой обновления.
#libs #videos
Сама архитектура mobius очень похожа на TEA, redux, MVI – есть модель, которая обновляется чистыми функциями, а функции эти запускаются вызовом событий. События вызываются от действий пользователя или же сайд-эффектами. Подход предполагает, что бизнес-логика будет как раз в чистых функциях и будет очень легко покрываться тестами. Подробнее про архитектуру можно послушать в выступлении Mobius: A Loopy UI Architecture - Ahmed Nawara, Spotify.
"Старший брат" в лице оригинального mobius от spotify получил довольно много внимания от community, что добавляет доверия.
Тем, кто захочет попробовать данную библиотеку потребуется сначала выпустить к ней апдейт на версии kotlin 1.3.50 (последняя версия библиотеки была собрана с 1.3.40). Хотя, если желающих будет достаточно, автор может отреагировать и на issue с просьбой обновления.
#libs #videos
GitHub
GitHub - DrewCarlson/mobius.kt: Kotlin Multiplatform framework for managing state evolution and side-effects
Kotlin Multiplatform framework for managing state evolution and side-effects - GitHub - DrewCarlson/mobius.kt: Kotlin Multiplatform framework for managing state evolution and side-effects
Завершим серию постов об архитектурных библиотеках не библиотеками, а проектами. Компоненты под эти архитектуры не выделены в библиотеки, но в проектах-примерах можно посмотреть подход к реализации и сделать по примеру.
* MVP - jarroyoesp/KotlinMultiPlatform в общей логике находятся несколько Presenter'ов и их интерфейсы для View;
* MVP - sergiocasero/votlin-app;
* MVP - cmota/droidconLX;
* MVI - petrumo/KotlinMultiplatformMVI в общей логике и reducer'ы и state'ы и прочее, только применение стейта к UI в нативке. Плюс есть статья с разбором - Kotlin Multiplatform MVI.
#libs #posts
* MVP - jarroyoesp/KotlinMultiPlatform в общей логике находятся несколько Presenter'ов и их интерфейсы для View;
* MVP - sergiocasero/votlin-app;
* MVP - cmota/droidconLX;
* MVI - petrumo/KotlinMultiplatformMVI в общей логике и reducer'ы и state'ы и прочее, только применение стейта к UI в нативке. Плюс есть статья с разбором - Kotlin Multiplatform MVI.
#libs #posts
GitHub
GitHub - jarroyoesp/KotlinMultiPlatform: Kotlin MultiPlatform App (Android, iOS, JVM & JS). MVVM/MVP - Kotlin MultiPlatform
Kotlin MultiPlatform App (Android, iOS, JVM & JS). MVVM/MVP - Kotlin MultiPlatform - jarroyoesp/KotlinMultiPlatform