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…
HMRC делятся опытом использования Kotlin Multiplatform в продакшене. Как обычно, приведено сравнение с другими технологиями, что хотелось решить и что получилось.
Из интересного:
* Общая библиотека доступна на github;
* Подключение к iOS производится через Carthage, а на github лежит уже собранный framework для подключения к iOS;
* Логика покрыта юниттестами;
* Android приложение имеет 1,000,000+ установок;
* iOS приложение активно у 550,000 пользователей в месяц (из описания приложения).
Слайды доступны тут.
#videos #slides
Из интересного:
* Общая библиотека доступна на github;
* Подключение к iOS производится через Carthage, а на github лежит уже собранный framework для подключения к iOS;
* Логика покрыта юниттестами;
* Android приложение имеет 1,000,000+ установок;
* iOS приложение активно у 550,000 пользователей в месяц (из описания приложения).
Слайды доступны тут.
#videos #slides
YouTube
Kotlin Multiplatform at HMRC
We were extremely lucky to have a talk by George Herbert from Capgemini where he discussed how Kotlin Multiplatform (KMP) was implemented at HMRC.
During this talk, he talked about the reasons behind the use of KMP and how he made it work with iOS, Android…
During this talk, he talked about the reasons behind the use of KMP and how he made it work with iOS, Android…
На github есть пример фуллстек проекта на kotlin-multiplatform – chat-app. Примечателен пример по нескольким причинам:
1. Используется актуальная версия kotlin - 1.3.50
2. common библиотека используется на android, ios и frontend
3. есть общий код между клиентской common библиотекой и бекенд приложением (логгер и модель сетевой сущности)
4. common код покрыт тестами (немного)
5. в ios таргет через плагин gradle-cocoapods подключена нативная библиотека SocketRocket
6. frontend сделан на react, но написан на kotlin
Так же автор проекта выступал с докладом про kotlin multiplatform.
#slides #samples
1. Используется актуальная версия kotlin - 1.3.50
2. common библиотека используется на android, ios и frontend
3. есть общий код между клиентской common библиотекой и бекенд приложением (логгер и модель сетевой сущности)
4. common код покрыт тестами (немного)
5. в ios таргет через плагин gradle-cocoapods подключена нативная библиотека SocketRocket
6. frontend сделан на react, но написан на kotlin
Так же автор проекта выступал с докладом про kotlin multiplatform.
#slides #samples
GitHub
GitHub - felipehjcosta/chat-app: Chat Multiplatform for Web, Android, iOS and Apple Watch
Chat Multiplatform for Web, Android, iOS and Apple Watch - felipehjcosta/chat-app
Информация для тех кто в Новосибирске:
Мы (IceRock) приглашаем всех Вас на наш первый открытый митап Kotlin/Everywhere, который состоится 24 ноября в лекторий-баре "Поток" (улица Депутатская 46 "СИТИЦЕНТР").
Сбор гостей в 10.00
На митапе выступят:
Илья Матвеев (спикер из JetBrains)
расскажет, как организованы мультиплатформенные проекты с позиции билд-системы.
Дмитрий Доловов (спикер из JetBrains)
поделится опытом, с какими задачами его команда столкнулась и какие решения использовала, чтобы сделать интеграцию Kotlin/Native с платформой возможной.
Андрей Ковалёв
расскажет об использовании KotlinMultiplatform IOS-разработчиком, об особенностях процессах разработки мультиплатформенных проектов, какие преимущества и планы по развитию Kotlin Multiplatform в компании.
Алексей Михайлов
в live-режиме (то есть прямо вместе с аудиторией) реализует небольшое приложение с использованием kotlin multiplatform на обе платформы.
Регистрация обязательна.
Активные участники могут выиграть лицензию на продукцию JetBrains, так что задавайте вопросы и общайтесь со спикерами.
Будем благодарны за шаринг постов:
• vkontakte
• facebook
#events
Мы (IceRock) приглашаем всех Вас на наш первый открытый митап Kotlin/Everywhere, который состоится 24 ноября в лекторий-баре "Поток" (улица Депутатская 46 "СИТИЦЕНТР").
Сбор гостей в 10.00
На митапе выступят:
Илья Матвеев (спикер из JetBrains)
расскажет, как организованы мультиплатформенные проекты с позиции билд-системы.
Дмитрий Доловов (спикер из JetBrains)
поделится опытом, с какими задачами его команда столкнулась и какие решения использовала, чтобы сделать интеграцию Kotlin/Native с платформой возможной.
Андрей Ковалёв
расскажет об использовании KotlinMultiplatform IOS-разработчиком, об особенностях процессах разработки мультиплатформенных проектов, какие преимущества и планы по развитию Kotlin Multiplatform в компании.
Алексей Михайлов
в live-режиме (то есть прямо вместе с аудиторией) реализует небольшое приложение с использованием kotlin multiplatform на обе платформы.
Регистрация обязательна.
Активные участники могут выиграть лицензию на продукцию JetBrains, так что задавайте вопросы и общайтесь со спикерами.
Будем благодарны за шаринг постов:
• vkontakte
#events
icerock.timepad.ru
Kotlin/Everywhere / События на TimePad.ru
24 ноября проводим митап, посвященный разработке на Kotlin - разработка под Android, Kotlin Multiplatform, Kotlin/Native.
Kotlin Multiplatform
Kevin Galligan из Touchlab (автор экспериментальной поддержки generic'ов в kotlin/native) опубликовал несколько презентаций на тему Kotlin Multiplatform. Kotlin Multiplatform Intro – обзорная презентация о том, что такое Kotlin Multiplatform, какой путь уже…
Продолжение поста о презентациях Touchlab.
Для презентации Kotlin Multiplatform Intro опубликовали видео-запись - Kevin Galligan - Intro to Kotlin Multiplatform
#videos
Для презентации Kotlin Multiplatform Intro опубликовали видео-запись - Kevin Galligan - Intro to Kotlin Multiplatform
#videos
Telegram
Kotlin Mobile MultiPlatform Russia
Kevin Galligan из Touchlab (автор экспериментальной поддержки generic'ов в kotlin/native) опубликовал несколько презентаций на тему Kotlin Multiplatform.
Kotlin Multiplatform Intro – обзорная презентация о том, что такое Kotlin Multiplatform, какой путь…
Kotlin Multiplatform Intro – обзорная презентация о том, что такое Kotlin Multiplatform, какой путь…
Coroutines хоть и доступны в kotlin multiplatform на всех платформах, но имеют разные ограничения – например на native нет поддержки смены потоков. Эта проблема связана с жесткими ограничениями по работе с памятью со стороны Kotlin/Native.
Kotlin/Native позволяет работать с мутабельными данными только с 1 потока, а с немутабельными - с множества потоков. Это сделано чтобы программа гарантированно не попала в deadlock или race condition, ведь алгоритм параллельной работы будет написан так, что эти состояния будут невозможны.
Для реализации такого подхода в Kotlin/Native stdlib доступны:
* Worker'ы - аналог потоков, worker'у можно дать данные на вход, он их обработает и потом можно забрать данные у него.
* механизм freeze - возможность заморозить объект. Заморозка означает что объект больше нельзя будет модифицировать, а значит его можно читать с любого потока.
* механизм DetachedObjectGraph - он позволяет переносить граф объектов между потоками без заморозки. Право чтения и изменения объекта перейдет с одного потока на другой (можно переносить сколько угодно раз).
Подробно можно почитать в разделе concurrency.
Сама концепция многопоточности K/N расходится с тем, как многопоточность делается в JVM, из-за этого уже больше года ожидается решение issue#462 - Support multi-threaded coroutines on Kotlin/Native. И с выходом kotlin 1.3.60 новый релиз coroutines предоставит нам поддержку смены потоков в Native, а значит и в общем коде.
Уже сейчас можно попробовать черновой вариант многопоточных coroutines, что уже попробовал сделать Kevin Galligan и успешно встроил их в Droidcon App (но на github не залил).
Новость хорошая, но важно помнить что ограничения Kotlin/Native не отменяются. Coroutines работают все в той же среде с запретом на шаринг мутабельного состояния и для написания многопоточных coroutines нужно помнить эти ограничения. В репозитории уже есть документация поясняющая, что передаваемые между потоками объекты будут автоматически заморожены. И чтобы не заморозить случайно то, что не должно было быть заморожено, лучше это пометить ensureNeverFrozen. А так же можно заметить что взаимодействие с многопоточным выполнением coroutines будет аналогичное как с Worker'ами (даем данные на вход, лямбду которая эти данные обработает и передаст результат наружу – вход и результат будут заморожены, а лямбда не должна вызывать ничего внешнего). И тем кто уже использует coroutineworker будет легко мигрировать на официальное решение.
#news #libs
Kotlin/Native позволяет работать с мутабельными данными только с 1 потока, а с немутабельными - с множества потоков. Это сделано чтобы программа гарантированно не попала в deadlock или race condition, ведь алгоритм параллельной работы будет написан так, что эти состояния будут невозможны.
Для реализации такого подхода в Kotlin/Native stdlib доступны:
* Worker'ы - аналог потоков, worker'у можно дать данные на вход, он их обработает и потом можно забрать данные у него.
* механизм freeze - возможность заморозить объект. Заморозка означает что объект больше нельзя будет модифицировать, а значит его можно читать с любого потока.
* механизм DetachedObjectGraph - он позволяет переносить граф объектов между потоками без заморозки. Право чтения и изменения объекта перейдет с одного потока на другой (можно переносить сколько угодно раз).
Подробно можно почитать в разделе concurrency.
Сама концепция многопоточности K/N расходится с тем, как многопоточность делается в JVM, из-за этого уже больше года ожидается решение issue#462 - Support multi-threaded coroutines on Kotlin/Native. И с выходом kotlin 1.3.60 новый релиз coroutines предоставит нам поддержку смены потоков в Native, а значит и в общем коде.
Уже сейчас можно попробовать черновой вариант многопоточных coroutines, что уже попробовал сделать Kevin Galligan и успешно встроил их в Droidcon App (но на github не залил).
Новость хорошая, но важно помнить что ограничения Kotlin/Native не отменяются. Coroutines работают все в той же среде с запретом на шаринг мутабельного состояния и для написания многопоточных coroutines нужно помнить эти ограничения. В репозитории уже есть документация поясняющая, что передаваемые между потоками объекты будут автоматически заморожены. И чтобы не заморозить случайно то, что не должно было быть заморожено, лучше это пометить ensureNeverFrozen. А так же можно заметить что взаимодействие с многопоточным выполнением coroutines будет аналогичное как с Worker'ами (даем данные на вход, лямбду которая эти данные обработает и передаст результат наружу – вход и результат будут заморожены, а лямбда не должна вызывать ничего внешнего). И тем кто уже использует coroutineworker будет легко мигрировать на официальное решение.
#news #libs
Kotlin 1.3.60 Released!
Со стороны MPP новый релиз больше всего изменений приносит в Kotlin/Native:
• Обновление встроенных фреймворков до версии из Xcode 11 (iOS 13 sdk)
• Поддержка новых таргетов watchOS, tvOS, androidNative
• Улучшение производительности и исправления багов (например, утечки памяти на стыке kotlin и objc при многопоточной работе)
Так как Kotlin/Native не имеет обратной совместимости с библиотеками, собранными старой версией компилятора, нас ждет череда релизов обновлений библиотек до новой версии kotlin. Уже есть:
• kotlinx.serialization 0.14.0
• klock 1.8.0
• multiplatform-settings 0.4.1
Но kotlinx.coroutines, ktor-client пока не получили релизы на финальной версии kotlin 1.3.60 (только eap), поэтому часть библиотек пока не могут обновиться из-за зависимости на них, а так же свои проекты пока рано переводить на новый релиз.
Тем временем у kotlinx.coroutines вышла development preview версия 1.3.2-native-mt-1, на которой можно ознакомиться с многопоточностью coroutines в Native. Роман Елизаров просит перед ознакомлением прочитать документацию.
#news
Со стороны MPP новый релиз больше всего изменений приносит в Kotlin/Native:
• Обновление встроенных фреймворков до версии из Xcode 11 (iOS 13 sdk)
• Поддержка новых таргетов watchOS, tvOS, androidNative
• Улучшение производительности и исправления багов (например, утечки памяти на стыке kotlin и objc при многопоточной работе)
Так как Kotlin/Native не имеет обратной совместимости с библиотеками, собранными старой версией компилятора, нас ждет череда релизов обновлений библиотек до новой версии kotlin. Уже есть:
• kotlinx.serialization 0.14.0
• klock 1.8.0
• multiplatform-settings 0.4.1
Но kotlinx.coroutines, ktor-client пока не получили релизы на финальной версии kotlin 1.3.60 (только eap), поэтому часть библиотек пока не могут обновиться из-за зависимости на них, а так же свои проекты пока рано переводить на новый релиз.
Тем временем у kotlinx.coroutines вышла development preview версия 1.3.2-native-mt-1, на которой можно ознакомиться с многопоточностью coroutines в Native. Роман Елизаров просит перед ознакомлением прочитать документацию.
#news
The JetBrains Blog
Kotlin 1.3.60 Released | The Kotlin Blog
We’re happy to present the new release today, Kotlin 1.3.60. In addition to the quality improvements, this version focuses on:
Optimizing the comparison of inline classes.
Tooling improvements fo
Optimizing the comparison of inline classes.
Tooling improvements fo
Kotlin Multiplatform
Kevin Galligan из Touchlab (автор экспериментальной поддержки generic'ов в kotlin/native) опубликовал несколько презентаций на тему Kotlin Multiplatform. Kotlin Multiplatform Intro – обзорная презентация о том, что такое Kotlin Multiplatform, какой путь уже…
Продолжение поста о выступлениях Kevin Galligan из Touchlab.
Для презентации Kotlin Multiplatform Libraries опубликовано видео выступления.
#videos
Для презентации Kotlin Multiplatform Libraries опубликовано видео выступления.
#videos
Telegram
Kotlin Mobile MultiPlatform Russia
Kevin Galligan из Touchlab (автор экспериментальной поддержки generic'ов в kotlin/native) опубликовал несколько презентаций на тему Kotlin Multiplatform.
Kotlin Multiplatform Intro – обзорная презентация о том, что такое Kotlin Multiplatform, какой путь…
Kotlin Multiplatform Intro – обзорная презентация о том, что такое Kotlin Multiplatform, какой путь…
И из более нового - вчера на событии CocoaHeads Berlin был доклад Kotlin/Native at Careem: Experience Report.
Ребята перевели Android приложение на kotlin и выделили mpp-модуль, чтобы быстрее запустить iOS приложение. Описали, как выстроили у себя процесс работы с Kotlin MPP, в чем увидели плюсы, а что оказалось сложностью.
Приложение, о котором идет речь:
Careem Captain (Android) - 1,000,000+ установок
Careem Captain (iOS)
#slides
Ребята перевели Android приложение на kotlin и выделили mpp-модуль, чтобы быстрее запустить iOS приложение. Описали, как выстроили у себя процесс работы с Kotlin MPP, в чем увидели плюсы, а что оказалось сложностью.
Приложение, о котором идет речь:
Careem Captain (Android) - 1,000,000+ установок
Careem Captain (iOS)
#slides
Speaker Deck
Kotlin/Native at Careem: Experience Report
At Careem we've been using Kotlin/Native to share business logic between iOS and Android apps, it's time to share our experience.
Еще одно выступление (на этот раз в Мадриде) на тему Kotlin Multiplatform - Building a library for Android & iOS using Kotlin Multiplatform.
О чем говорилось:
• Основы kotlin multiplatform (expect/actual и управление зависимостями);
• Подключение библиотеки к iOS проекту - ручное и через CocoaPods (только плагин неофициальный почему-то упомянут);
• Базовые библиотеки (coroutines, serialization, ktor, sqdelight);
• Тестирование, включая и тестирование кода с coroutines.
#videos
О чем говорилось:
• Основы kotlin multiplatform (expect/actual и управление зависимостями);
• Подключение библиотеки к iOS проекту - ручное и через CocoaPods (только плагин неофициальный почему-то упомянут);
• Базовые библиотеки (coroutines, serialization, ktor, sqdelight);
• Тестирование, включая и тестирование кода с coroutines.
#videos
YouTube
Codemotion Madrid 2019 I Building a library for Android & iOS using Kotlin Multiplatform
Sharing code between platforms is a powerful technique, but it may be hard to accomplish without rich APIs that we have in Android, JVM, or iOS platforms. Kotlin Multiplatform libraries can be used to fix that, bringing rich APIs directly in the common Kotlin…
Shared Code at Quizlet: Deciding on Kotlin Multiplatform - большая и интересная статья про путь компании в теме переиспользования кода между платформами.
Разобрано как они поняли, что пора шарить код. Как проанализировали имеющиеся на тот момент решения, начали шарить код через JavaScript и чему там научились, а в завершение - как решили перейти на Kotlin Multiplatform и краткие итоги по результату перехода.
Это еще один большой продукт, применивший Kotlin Multiplatform.
Quizlet (Android) - 10 000 000+ установок
Quizlet (iOS)
#posts
Разобрано как они поняли, что пора шарить код. Как проанализировали имеющиеся на тот момент решения, начали шарить код через JavaScript и чему там научились, а в завершение - как решили перейти на Kotlin Multiplatform и краткие итоги по результату перехода.
Это еще один большой продукт, применивший Kotlin Multiplatform.
Quizlet (Android) - 10 000 000+ установок
Quizlet (iOS)
#posts
Medium
Shared Code at Quizlet
How We Decided on Kotlin Multiplatform
Для Kotlin Multiplatform вышел аналог moko библиотек - набор библиотек trikot от компании mirego.
В наборе включено:
* trikot.foundation - небольшие полезные компоненты - таймеры, работа с датами, mpp AtomicReference, freeze и очереди для многопоточности;
* trikot.http - http клиент, использующий kotlinx.serialization. Аналог ktor-client;
* trikot.kword - мультиплатформенная локализация с использованием Accent;
* trikot.metaviews - абстракции UI в общем коде, для привязки данных из common кода;
* trikot.streams - реактивные потоки (о этой библиотеке уже упоминал в этом посте).
Так-же есть вводная статья от авторов - Our Next Step in Multiplatform Application Development: Trikot с разбором почему они выбрали Kotlin Multiplatform и для чего используют.
#libs #posts
В наборе включено:
* trikot.foundation - небольшие полезные компоненты - таймеры, работа с датами, mpp AtomicReference, freeze и очереди для многопоточности;
* trikot.http - http клиент, использующий kotlinx.serialization. Аналог ktor-client;
* trikot.kword - мультиплатформенная локализация с использованием Accent;
* trikot.metaviews - абстракции UI в общем коде, для привязки данных из common кода;
* trikot.streams - реактивные потоки (о этой библиотеке уже упоминал в этом посте).
Так-же есть вводная статья от авторов - Our Next Step in Multiplatform Application Development: Trikot с разбором почему они выбрали Kotlin Multiplatform и для чего используют.
#libs #posts
moko.icerock.dev
MObile KOtlin
Kotlin Multiplatform libraries for mobile (android & iOS) development
VMWare тоже пробуют Kotlin Multiplatform и рассказывают о своем опыте в статье Adopting a Cross Platform Strategy for Mobile Apps.
Для их задач потребовался и cintrop-tool - они заинтегрировали нативную C++ библиотеку в ios kotlin код.
Используется Kotlin Multiplatform у них в приложениях Workspace ONE (по информации от участников нашего чата + в статье упоминается com.airwatch).
Touchlab так же написали свое мнение по части пунктов из статьи - Nice to See VMWare Adopting Kotlin Multiplatform.
#posts
Для их задач потребовался и cintrop-tool - они заинтегрировали нативную C++ библиотеку в ios kotlin код.
Используется Kotlin Multiplatform у них в приложениях Workspace ONE (по информации от участников нашего чата + в статье упоминается com.airwatch).
Touchlab так же написали свое мнение по части пунктов из статьи - Nice to See VMWare Adopting Kotlin Multiplatform.
#posts
Medium
Adopting a Cross Platform Strategy for Mobile Apps
Framework of choice: Kotlin Multiplatform
Touchlab выпустили библиотеку CrashKiOS, улучшающую информацию о крешах на iOS.
Судя по залогированных крешах в нашем crashlytics - и без библиотеки креши отображаются нормально. Но, видимо, есть набор крешей, которые не отображаются нормально и именно для этих случаев сделана библиотека.
Почитать детальнее можно в посте - Kotlin Native iOS Crash Reporting.
А еще в Kotlin 1.3.60 была улучшена поддержка отладочных символов и можно dSYM для релизных билдов получать, чтобы загрузить в fabric/appstore/еще куда-либо.
#libs #posts
Судя по залогированных крешах в нашем crashlytics - и без библиотеки креши отображаются нормально. Но, видимо, есть набор крешей, которые не отображаются нормально и именно для этих случаев сделана библиотека.
Почитать детальнее можно в посте - Kotlin Native iOS Crash Reporting.
А еще в Kotlin 1.3.60 была улучшена поддержка отладочных символов и можно dSYM для релизных билдов получать, чтобы загрузить в fabric/appstore/еще куда-либо.
#libs #posts
GitHub
GitHub - touchlab/CrashKiOS: Crash reporting for Kotlin/Native iOS applications
Crash reporting for Kotlin/Native iOS applications - touchlab/CrashKiOS
Пачка новостей с KotlinConf:
1. Объявлены большие продукты использующие Kotlin Multiplatform для мобильной разработки (половина из них уже были в нашем канале);
2. в 2020 году будет добавлена поддержка запуска и отладки kotlin приложений на iOS через Android Studio;
3. JetBrains показали лендинг по mobile multiplatform - здесь и набор библиотек для старта, и компании которые используют KMP в продакшене, и плюсы данного подхода;
4. Мы (IceRock) показали свою опенсорс версию moko widgets (github);
5. Kotlin Product Manager запустил тред в твиттере, где рассказал на сколько серьезно JetBrains относятся к kotlin multiplatform и mobile multiplatform в частности, а так же указал ссылки на статьи о опыте продакшен разработки;
6. Так же были выступления о планах по KMP, о опыте мобильной мультиплатформы, о многопоточности.
Разбор выступлений, касающихся мобильной мультиплатформы, и ссылки на материалы буду кидать постепенно в следующие дни.
Так же недавно нами был проведен Kotlin/Everywhere Novosibirsk, который был полностью уделен Kotlin Multiplatform. Видео доступны здесь. Два выступления про разработку от нас и два выступления про kotlin gradle и kotlin/native от JetBrains - рекомендую посмотреть, очень интересная и понятная информация про commonizer в K/N.
А еще у нас есть twitter - @KotlinMPP, где публикуется информация прямиком с KotlinKonf, а так же новости по мобильной мультиплатформе.
#news
1. Объявлены большие продукты использующие Kotlin Multiplatform для мобильной разработки (половина из них уже были в нашем канале);
2. в 2020 году будет добавлена поддержка запуска и отладки kotlin приложений на iOS через Android Studio;
3. JetBrains показали лендинг по mobile multiplatform - здесь и набор библиотек для старта, и компании которые используют KMP в продакшене, и плюсы данного подхода;
4. Мы (IceRock) показали свою опенсорс версию moko widgets (github);
5. Kotlin Product Manager запустил тред в твиттере, где рассказал на сколько серьезно JetBrains относятся к kotlin multiplatform и mobile multiplatform в частности, а так же указал ссылки на статьи о опыте продакшен разработки;
6. Так же были выступления о планах по KMP, о опыте мобильной мультиплатформы, о многопоточности.
Разбор выступлений, касающихся мобильной мультиплатформы, и ссылки на материалы буду кидать постепенно в следующие дни.
Так же недавно нами был проведен Kotlin/Everywhere Novosibirsk, который был полностью уделен Kotlin Multiplatform. Видео доступны здесь. Два выступления про разработку от нас и два выступления про kotlin gradle и kotlin/native от JetBrains - рекомендую посмотреть, очень интересная и понятная информация про commonizer в K/N.
А еще у нас есть twitter - @KotlinMPP, где публикуется информация прямиком с KotlinKonf, а так же новости по мобильной мультиплатформе.
#news
Twitter
Kotlin Mobile MultiPlatform with IceRock
It’s completely about Kotlin Multiplatform in use! #kotlinconf #kotlinmpp