Продолжим обзор архитектурных библиотек. Сегодня обратим внимание на библиотеку 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
Тем, кто хотел увидеть Rx в общем коде в каком либо проекте, сегодня есть что почитать - статья Kotlin Multiplatform + Reactive подробно рассказывает о процессе создания небольшого приложения с использованием Reaktive, ktor, sqldelight на современной версии kotlin - 1.3.50. Приложение – простой просмотрщик списка фильмов с OMDb, с пагинацией и кешированием.
Что можно наглядно увидеть:
* Взаимодействие coroutines и Reaktive;
* Использование ViewModel'ей (подход, не библиотека);
* Использование UseCase;
* Применение подходов Clean Architecture в kotlin mpp;
* Не самый удобный подход интеграции kotlin-фреймворка в ios приложение (лучше все таки через cocoapods);
* Настройка и использование sqldelight базы данных в mpp.
Итоговый проект доступен на github.
#posts
Что можно наглядно увидеть:
* Взаимодействие coroutines и Reaktive;
* Использование ViewModel'ей (подход, не библиотека);
* Использование UseCase;
* Применение подходов Clean Architecture в kotlin mpp;
* Не самый удобный подход интеграции kotlin-фреймворка в ios приложение (лучше все таки через cocoapods);
* Настройка и использование sqldelight базы данных в mpp.
Итоговый проект доступен на github.
#posts
Medium
Kotlin Multiplatform + Reactive
Kotlin multiplatform + Reactive + MVVM with inputs outputs approach
Russel Wolf (автор одной из первых multiplatform библиотек – multiplatform-settings) недавно выступил с докладом о разработке приложения с kotlin mpp. В приложении сделано несколько общих gradle-модулей, есть тесты (очень даже приличное количество), работа с сетью, базой данных, есть многопоточность, есть и использование плагина BuildKonfig.
Само выступление можно посмотреть на youtube – Bottom-Up Code-Sharing with Kotlin Multiplatform - Russell Wolf, а код посмотреть на github – soluna.
Кстати, в выступлении упомянут один интересный факт – в AppCode и в IDEA Ultimate EAP можно отлаживать kotlin/native-код (это помимо того, что можно использовать lldb для установки breakpoint и плагин xcode-kotlin от touchlab).
#videos
Само выступление можно посмотреть на youtube – Bottom-Up Code-Sharing with Kotlin Multiplatform - Russell Wolf, а код посмотреть на github – soluna.
Кстати, в выступлении упомянут один интересный факт – в AppCode и в IDEA Ultimate EAP можно отлаживать kotlin/native-код (это помимо того, что можно использовать lldb для установки breakpoint и плагин xcode-kotlin от touchlab).
#videos
Чтобы лучше понять, что такое Kotlin Multiplatform, чем эта технология отличается от того, что уже было до Kotlin и почему сейчас мы имеем то, что имеем, рекомендую посмотреть выступление Ильи Матвеева из JetBrains - Мультиплатформенные проекты в Kotlin 1.3 c Mobius 2019.
В выступлении рассказано почему решили делать новую технологию, чем она лучше #ifdef от C, какие проблемы получили пытаясь адаптировать gradle под mpp, как дальше их решали. Интересные вещи про поддержку mpp в IDE с пояснением проблем, о которых в работе особо не задумываешься.
#videos
В выступлении рассказано почему решили делать новую технологию, чем она лучше #ifdef от C, какие проблемы получили пытаясь адаптировать gradle под mpp, как дальше их решали. Интересные вещи про поддержку mpp в IDE с пояснением проблем, о которых в работе особо не задумываешься.
#videos
YouTube
Илья Матвеев — Мультиплатформенные проекты в Kotlin 1.3
Ближайшая конференция: Mobius 2023 Spring — 12–13 мая (Online), 19-20 мая (Offline)
Подробности и билеты: https://bit.ly/3FxJRd7
— —
. . .
. Доклад о том, что изменилось в Kotlin Multiplatform, непосредственно от разработчика продукта.
Котлин известен в…
Подробности и билеты: https://bit.ly/3FxJRd7
— —
. . .
. Доклад о том, что изменилось в Kotlin Multiplatform, непосредственно от разработчика продукта.
Котлин известен в…
Плагин для Xcode, позволяющий ставить breakpoint'ы в kotlin коде, получил обновление до Xcode 11.
Для установки нужно просто скачать актуальное состояние с master и запустить скрипт setup.
Помимо установки точек останова можно выводить использовать специальны скрипт для вывода данных из локальных переменных – konan_lldb.py для lldb (консоль отладчика в Xcode). Для его использования согласно документации по отладке Kotlin/Native нужно:
вызвать
#tips
Для установки нужно просто скачать актуальное состояние с master и запустить скрипт setup.
Помимо установки точек останова можно выводить использовать специальны скрипт для вывода данных из локальных переменных – konan_lldb.py для lldb (консоль отладчика в Xcode). Для его использования согласно документации по отладке Kotlin/Native нужно:
вызвать
command script import <путь до konan_lldb.py
, а после этого, используя p <имя переменной>
, можно получать информацию о kotlin объектах.#tips
GitHub
GitHub - touchlab/xcode-kotlin: Kotlin Native Xcode Plugin
Kotlin Native Xcode Plugin. Contribute to touchlab/xcode-kotlin development by creating an account on GitHub.
Команда 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
Само приложение можно скачать и посмотреть:
iOS
Android
Немного поглядев внутри apk, можно заметить, что используется как минимум ktor-client и coroutines, а это подсказывает что в общей библиотеке находится как минимум сетевой слой.
#cases #posts
Medium
How we developed our new video platform Rukkaz as a cross-platform mobile app
While developing natively for iOS and Android we realised we were writing the same functionalities twice. So we stopped.
Для упрощения поиска и подключения библиотек к kotlin проектам (и multiplatform в том числе) JetBrains выпустили плагин Package Search. Он позволяет прямо в конфигурации gradle запустить генерацию кода подключения зависимости с поиском нужной зависимости прямо в IDE. Цель – упростить поиск библиотек по примеру опыта NuGet.
На данный момент вышла EAP версия и нам доступно:
- Поддержка только groovy gradle (kotlin dsl в планах);
- Поиск по модулям, опубликованным на mavenCentral (в дальнейшем планируют расширить количество репозиториев);
- Индексация автоматическая – автору библиотеки не надо специально куда-то добавлять самому (но надо на поддерживаемый репозиторий залить – сейчас mavenCentral);
- В списке библиотек сразу выводится пометка о поддержке multiplatform;
- В multiplatform библиотеках перечисляются все поддерживаемые таргеты;
- Индексируется и информация с github - ссылка на репозиторий, звезды, форки, ридми, лицензия и прочее.
Пока не понятно как это будет работать с объявлением зависимостей в buildSrc, а так же для удобства работы с Kotlin/Native очень не хватает информации о версии kotlin, которую поддерживает выбранная версия библиотеки. А лучше и фильтры по версии, чтобы не искать среди кучи библиотек какая поддерживает используемую на проекте версию котлина.
#news
На данный момент вышла EAP версия и нам доступно:
- Поддержка только groovy gradle (kotlin dsl в планах);
- Поиск по модулям, опубликованным на mavenCentral (в дальнейшем планируют расширить количество репозиториев);
- Индексация автоматическая – автору библиотеки не надо специально куда-то добавлять самому (но надо на поддерживаемый репозиторий залить – сейчас mavenCentral);
- В списке библиотек сразу выводится пометка о поддержке multiplatform;
- В multiplatform библиотеках перечисляются все поддерживаемые таргеты;
- Индексируется и информация с github - ссылка на репозиторий, звезды, форки, ридми, лицензия и прочее.
Пока не понятно как это будет работать с объявлением зависимостей в buildSrc, а так же для удобства работы с Kotlin/Native очень не хватает информации о версии kotlin, которую поддерживает выбранная версия библиотеки. А лучше и фильтры по версии, чтобы не искать среди кучи библиотек какая поддерживает используемую на проекте версию котлина.
#news
Скорей всего уже всем известно, что для работы с сетью в kotlin multiplatform доступна библиотека ktor. С ее помощью мы можем выполнять любые http запросы.
Если рассмотреть более специализированные решения, типа библиотек для REST API, то можно вспомнить про генерацию кода для ktor-client в moko-network из OpenAPI (Swagger) спецификации.
Еще помимо REST API есть популярный подход - GraphQL. И для этого тоже есть готовое решение - kgql позволяет из gql спецификации сгенерировать код для kotlinx.serialization, а далее останется только написать код вызова запроса (endpoint'ов то у graphql обычно как раз не много).
#libs
Если рассмотреть более специализированные решения, типа библиотек для REST API, то можно вспомнить про генерацию кода для ktor-client в moko-network из OpenAPI (Swagger) спецификации.
Еще помимо REST API есть популярный подход - GraphQL. И для этого тоже есть готовое решение - kgql позволяет из gql спецификации сгенерировать код для kotlinx.serialization, а далее останется только написать код вызова запроса (endpoint'ов то у graphql обычно как раз не много).
#libs
GitHub
GitHub - ktorio/ktor: Framework for quickly creating connected applications in Kotlin with minimal effort
Framework for quickly creating connected applications in Kotlin with minimal effort - ktorio/ktor
На каком этапе знакомства с kotlin multiplatform (в контексте мобильной разработки) вы находитесь?
Anonymous Poll
17%
Не интересовался до этого, сейчас стало интересно
50%
Просто интересуюсь, бывает читаю статьи
6%
Пробую сам в своих домашних проектах, все ок
11%
Попробовал сам, столкнулся с проблемами
4%
Пробуем на работе и обсуждаем возможное внедрение в активный проект
2%
Попробовали на работе и отказались
5%
Интегрируем в существующий активный проект
6%
Разрабатываем новые проекты на этой технологии
Опрос показал, что половина участников пока только знакомится с информацией и статьями, но не пробовали kotlin multiplatform в разработке мобильных приложений.
На грядущие выходные есть полезные материалы для этой половины:
1. На github доступен шаблон проекта moko-template, который позволяет быстро начать разработку мобильного приложения с mpp внутри, имеет подключенные moko-библиотеки и пример из пары фич (архитектура проекта многомодульная, что положительно сказывается на времени пересборки ios-таргета);
2. В дополнение к moko-template доступны codelab'ы, в которых разобрано создание приложения просмотра списка GIF'ок на основе moko-template;
3. На kmp.icerock.dev можно найти множество ссылок на полезные статьи, важные блоки документации kotlin про mpp, полезные библиотеки как официальные так и от сообщества, проекты примеры.
Надеюсь эти материалы помогут вам попробовать технологию и упростят изучение.
Ошибки/предложения по можно писать в issues на github (moko-template, codelabs, kmp).
#tips
На грядущие выходные есть полезные материалы для этой половины:
1. На github доступен шаблон проекта moko-template, который позволяет быстро начать разработку мобильного приложения с mpp внутри, имеет подключенные moko-библиотеки и пример из пары фич (архитектура проекта многомодульная, что положительно сказывается на времени пересборки ios-таргета);
2. В дополнение к moko-template доступны codelab'ы, в которых разобрано создание приложения просмотра списка GIF'ок на основе moko-template;
3. На kmp.icerock.dev можно найти множество ссылок на полезные статьи, важные блоки документации kotlin про mpp, полезные библиотеки как официальные так и от сообщества, проекты примеры.
Надеюсь эти материалы помогут вам попробовать технологию и упростят изучение.
Ошибки/предложения по можно писать в issues на github (moko-template, codelabs, kmp).
#tips
GitHub
GitHub - icerockdev/moko-template: Template project of a Mobile (Android & iOS) Kotlin MultiPlatform project with the MOKO libraries…
Template project of a Mobile (Android & iOS) Kotlin MultiPlatform project with the MOKO libraries and modularized architecture - icerockdev/moko-template
Советы из опыта
suspend-функции в публичном интерфейсе библиотеки, которая компилируется в iOS framework, автоматически стираются. Это происходит потому что в objective-c (и swift) нет аналога suspend-функций. По этой причине рекомендуется держать всю работу с kotlin-coroutines внутри kotlin.
Если же требуется вызывать suspend-функцию из swift/objective-c, то можно в ios-specific коде сделать экстеншен-функцию принимающую callback, а внутри функции запускать корутину например на GlobalScope. При чем это можно делать не вручную, а использовать плагин, генерирующий такую функцию автоматически, например - Recast, kotlin-native-suspend-function-callback.
#tips
suspend-функции в публичном интерфейсе библиотеки, которая компилируется в iOS framework, автоматически стираются. Это происходит потому что в objective-c (и swift) нет аналога suspend-функций. По этой причине рекомендуется держать всю работу с kotlin-coroutines внутри kotlin.
Если же требуется вызывать suspend-функцию из swift/objective-c, то можно в ios-specific коде сделать экстеншен-функцию принимающую callback, а внутри функции запускать корутину например на GlobalScope. При чем это можно делать не вручную, а использовать плагин, генерирующий такую функцию автоматически, например - Recast, kotlin-native-suspend-function-callback.
#tips
Android Framework накладывает на android-разработчика множество ограничений из-за сложного жизненного цикла компонентов системы:
- Activity пересоздаются при поворотах экрана, при смене языка системы, что не происходит на iOS.
- Приложение может быть выключено системой почти в любой момент из-за нехватки памяти, но когда пользователь решит вернуться в приложение через "карусель" приложений - он должен попасть туда же, где и был (и фреймворк предлагает специальные механизмы под это).
Для передачи данных между пересозданиями Activity (или просто при переходе на новый экран) часто используется Parcelable - специальный механизм сериализации данных, разработанный для android. И android-разработчики часто его используют, а потому и в multiplatform библиотеке отказаться от него не хотелось бы. Об этом и пишет Ankush Gupta в своей статье - Using @Parcelize in Kotlin Multiplatform.
А для тех, кто хотел бы подключить себе готовую реализацию в проект - есть moko-parcelize.
#posts #libs
- Activity пересоздаются при поворотах экрана, при смене языка системы, что не происходит на iOS.
- Приложение может быть выключено системой почти в любой момент из-за нехватки памяти, но когда пользователь решит вернуться в приложение через "карусель" приложений - он должен попасть туда же, где и был (и фреймворк предлагает специальные механизмы под это).
Для передачи данных между пересозданиями Activity (или просто при переходе на новый экран) часто используется Parcelable - специальный механизм сериализации данных, разработанный для android. И android-разработчики часто его используют, а потому и в multiplatform библиотеке отказаться от него не хотелось бы. Об этом и пишет Ankush Gupta в своей статье - Using @Parcelize in Kotlin Multiplatform.
А для тех, кто хотел бы подключить себе готовую реализацию в проект - есть moko-parcelize.
#posts #libs
Вышла новая библиотека для работы со временем - island-time. Отличается она от существующих multiplatform библиотек тем, что планируется воспроизвести доступный в java.time функционал.
Что доступно:
* Работа с датами и временем, с учетом таймзон;
* Работа с таймзонами;
* Работа с периодами и отрезками времени;
* Парсинг строки в дату (включая и нестандартные форматы).
Пока нет:
* Стабильного релиза (сейчас активная фаза разработки с SNAPSHOT'ами);
* Форматирование даты в строку.
#libs
Что доступно:
* Работа с датами и временем, с учетом таймзон;
* Работа с таймзонами;
* Работа с периодами и отрезками времени;
* Парсинг строки в дату (включая и нестандартные форматы).
Пока нет:
* Стабильного релиза (сейчас активная фаза разработки с SNAPSHOT'ами);
* Форматирование даты в строку.
#libs
GitHub
GitHub - erikc5000/island-time: A Kotlin Multiplatform library for working with dates and times
A Kotlin Multiplatform library for working with dates and times - erikc5000/island-time
Kaskade - еще одна библиотека с архитектурными компонентами. Позволяет реализовывать unidirectional data flow.
Поддерживается последняя версия kotlin - 1.3.50, платформы JVM, iOS, JS. Имеет интеграции с coroutines, livedata, rxjava.
На примере android приложения разобрана работа с библиотекой в статье Managing states with Kaskade
#libs #posts
Поддерживается последняя версия kotlin - 1.3.50, платформы JVM, iOS, JS. Имеет интеграции с coroutines, livedata, rxjava.
На примере android приложения разобрана работа с библиотекой в статье Managing states with Kaskade
#libs #posts
GitHub
GitHub - gumil/Kaskade: [INACTIVE] Simplifying state management
[INACTIVE] Simplifying state management. Contribute to gumil/Kaskade development by creating an account on GitHub.
Советы из опыта
При компиляции Kotlin в iOS-framework нужно учитывать, что abstract class'ы станут в Objective-C (и Swift) обычными классами. Это происходит из-за того, что в Objective-C и Swift нет абстрактных классов. Поэтому Xcode при компиляции никак не проверит реализовал ли разработчик абстрактный метод или нет. Если абстрактный метод останется не реализованным то в рантайме будет выброшено исключение.
Рекомендуется просто не выносить абстрактные классы в публичный интерфейс. Их можно использовать внутри kotlin, а наружу можно выдать интерфейс, который требуется с нативной стороны реализовать.
#tips
При компиляции Kotlin в iOS-framework нужно учитывать, что abstract class'ы станут в Objective-C (и Swift) обычными классами. Это происходит из-за того, что в Objective-C и Swift нет абстрактных классов. Поэтому Xcode при компиляции никак не проверит реализовал ли разработчик абстрактный метод или нет. Если абстрактный метод останется не реализованным то в рантайме будет выброшено исключение.
Рекомендуется просто не выносить абстрактные классы в публичный интерфейс. Их можно использовать внутри kotlin, а наружу можно выдать интерфейс, который требуется с нативной стороны реализовать.
#tips
Для мобильных приложений бывает необходимо постоянно держать связь с сервером для обмена данными (трекинг геолокации, статусов заказов и прочее) и для этого используют socket'ы. Для Kotlin Multiplatform доступна библиотека kEasySocket, которая позволяет из общего кода работать с webscoket'ами.
Поддерживается Android и iOS, работает на актуальной версии Kotlin – 1.3.50, api на базе coroutines.
Помимо того, что библиотеку можно подключить себе в проект, в коде библиотеки можно посмотреть пример использования cinterop для подключения C-library OpenSSL в Kotlin/Native.
#libs
Поддерживается Android и iOS, работает на актуальной версии Kotlin – 1.3.50, api на базе coroutines.
Помимо того, что библиотеку можно подключить себе в проект, в коде библиотеки можно посмотреть пример использования cinterop для подключения C-library OpenSSL в Kotlin/Native.
#libs
GitHub
GitHub - luca992/kEasySocket
Contribute to luca992/kEasySocket development by creating an account on GitHub.
Kevin Galligan из Touchlab (автор экспериментальной поддержки generic'ов в kotlin/native) опубликовал несколько презентаций на тему Kotlin Multiplatform.
Kotlin Multiplatform Intro – обзорная презентация о том, что такое Kotlin Multiplatform, какой путь уже был пройден и что, по мнению автора, будет дальше.
Kotlin Multiplatform Libraries – про текущее состояние экосистемы kotlin mpp (что из библиотек есть, чего нет, в чем можно помочь), какие выводы сделаны были по опыту разработки FirestoreKMP (обертка над Firebase Storage для MPP), про ObjC interop (делали проброс Firebase iOS SDK в Kotlin), про крешрепорты в Crashlytics и bugsnap, про публикацию библиотек.
#slides
Kotlin Multiplatform Intro – обзорная презентация о том, что такое Kotlin Multiplatform, какой путь уже был пройден и что, по мнению автора, будет дальше.
Kotlin Multiplatform Libraries – про текущее состояние экосистемы kotlin mpp (что из библиотек есть, чего нет, в чем можно помочь), какие выводы сделаны были по опыту разработки FirestoreKMP (обертка над Firebase Storage для MPP), про ObjC interop (делали проброс Firebase iOS SDK в Kotlin), про крешрепорты в Crashlytics и bugsnap, про публикацию библиотек.
#slides
Speaker Deck
Kotlin Multiplatform Intro
Introduction to Kotlin Multiplatform, at Oredev.
На Kotlin/Everywhere Venezia тоже рассказывают про Kotlin Multiplatform (можно использовать субтитры с автопереводом с итальянского в English - получается адекватный перевод).
В видео есть:
• сравнение с RN, Flutter;
• кратко о устройстве MPP;
• лайвкодинг с примером приложения-расписания для конференции (исходный код доступен на GitHub);
• для приложения был сделан и backend на kotlin, но с ним никакой код не шарится.
Презентация доступна по ссылке.
#videos #samples
В видео есть:
• сравнение с RN, Flutter;
• кратко о устройстве MPP;
• лайвкодинг с примером приложения-расписания для конференции (исходный код доступен на GitHub);
• для приложения был сделан и backend на kotlin, но с ним никакой код не шарится.
Презентация доступна по ссылке.
#videos #samples
YouTube
Kotlin Multiplatform | Kotlin/Everywhere Venezia 2019
ITA: Amanti di Kotlin (ma non solo) a rapporto! L'argomento di questo talk e' Kotlin Multiplatform ed in particolare vedremo come e' possibile creare un'applicazione Android ed iOs che condivide una parte del codice (es. business logic, network, etc.). Ma…