В этом году я плотно занималась не только SwiftUI, но и #kotlinmultiplatform. Наконец, у меня дошли руки доработать статью по созданию многопоточного приложения KMM, включив материал митапа MobiFest от 7.10
Если вам интересно не только, как реализовать многопоточное приложение для обеих платформ, но и почему общая работа с потоками организуется именно так, то welcome:
https://habr.com/ru/post/533864/
https://habr.com/ru/post/533952/
Если вам интересно не только, как реализовать многопоточное приложение для обеих платформ, но и почему общая работа с потоками организуется именно так, то welcome:
https://habr.com/ru/post/533864/
https://habr.com/ru/post/533952/
Хабр
Kotlin Multiplatform. Работаем с многопоточностью на практике. Ч.1
Доброго всем времени суток! С вами я, Анна Жаркова, ведущий мобильный разработчик компании «Usetech» Я давно занимаюсь не только нативной разработкой (как iOS,...
#kotlinmultiplatform Обнаружила утром, что забыла вставить целый кусок во 2ю частью статьи:
https://habr.com/ru/post/533952/
https://habr.com/ru/post/533952/
Хабр
Kotlin Multiplatform. Работаем с многопоточностью на практике. Ч.2
Доброго всем времени суток! С вами я, Анна Жаркова, ведущий мобильный разработчик компании «Usetech». В предыдущей статье я рассказывала про один из способов ре...
Если вкратце, то я показываю 2 способа, как можно организовать работу с потоками с учетом особенностей KMM и платформ:
1. Мы используем в общей логике библиотеки, которые внутри реализуют свою многопоточность. Вызываем их напрямую с наших платформенных проектов. Тут все ок. На iOS suspended красиво раскладываются на функции типа с completion handled: (Результат, Error) -> Void
На Android вызываем внутри mainScope
2. Делаем общую и архитектуру. Вызов библиотек перекладываем на посредника. Делаем ему его собственный scope на основе контекста корутины.
А для этого нам нужно задать свои диспетчеры корутин. И если под Android они уже есть (ибо Kotlin/JVM), то под Kotlin/Native их надо делать свои. + мы не можем использовать на iOS очередь из global queue, т.к они под Kotlin/Native ни к чему не привязаны.
В итоге мы делаем диспетчер на main queue. И если мы хотим использовать маршрутизацию в фон, то делаем свой фоновый scope. Не факт, что мы будем использовать только либы со своей многопоточностью же.
Также нам надо предусмотреть корректность передачи нашего диспетчера между потоками
1. Мы используем в общей логике библиотеки, которые внутри реализуют свою многопоточность. Вызываем их напрямую с наших платформенных проектов. Тут все ок. На iOS suspended красиво раскладываются на функции типа с completion handled: (Результат, Error) -> Void
На Android вызываем внутри mainScope
2. Делаем общую и архитектуру. Вызов библиотек перекладываем на посредника. Делаем ему его собственный scope на основе контекста корутины.
А для этого нам нужно задать свои диспетчеры корутин. И если под Android они уже есть (ибо Kotlin/JVM), то под Kotlin/Native их надо делать свои. + мы не можем использовать на iOS очередь из global queue, т.к они под Kotlin/Native ни к чему не привязаны.
В итоге мы делаем диспетчер на main queue. И если мы хотим использовать маршрутизацию в фон, то делаем свой фоновый scope. Не факт, что мы будем использовать только либы со своей многопоточностью же.
Также нам надо предусмотреть корректность передачи нашего диспетчера между потоками
Вообще в дайджест на этой неделе попало много интересных статей:
1. Apple дополнили свой сайт интересными туториалами и кодлабами по SwiftUI. То, что нужно, чтобы больше узнать про декларативную верстку
1. Apple дополнили свой сайт интересными туториалами и кодлабами по SwiftUI. То, что нужно, чтобы больше узнать про декларативную верстку
2. Статья Rambler Group по работе с AppClips:
https://habr.com/ru/company/rambler_group/blog/533840/
Маловато кода, конечно, но все равно полезно
https://habr.com/ru/company/rambler_group/blog/533840/
Маловато кода, конечно, но все равно полезно
Хабр
Как мы делаем App Clips?
App Clips — это облегченные версии приложения для iOS 14, которые позволяют людям быстро выполнять определенную задачу, не скачивая и не устанавливая его полную...
3. Статья, как сочетать работу с Coroutines и запросом пермишенов в Android приложении:
https://medium.com/better-programming/when-coroutines-meet-android-permissions-a1f048e70f74
4. Для любителей чего-нибудь эдакого статья по работе с GraphQL в Kotlin приложении . Для тех, кто делает все сам:
https://medium.com/swlh/graphql-kotlin-tutorial-344f5fe0c71a
https://medium.com/better-programming/when-coroutines-meet-android-permissions-a1f048e70f74
4. Для любителей чего-нибудь эдакого статья по работе с GraphQL в Kotlin приложении . Для тех, кто делает все сам:
https://medium.com/swlh/graphql-kotlin-tutorial-344f5fe0c71a
Medium
When Coroutines Meet Android Permissions
Handling single-line runtime permissions with coroutines
5. Переход с LiveData на StateFlow. Где может быть полезно: например, при реализации работы с коллекциями в KMM
https://medium.com/swlh/migrating-from-livedata-to-stateflow-4f28d6889a04
https://medium.com/swlh/migrating-from-livedata-to-stateflow-4f28d6889a04
Medium
Migrating From LiveData to StateFlow
I’ve worked a lot with LiveData and I think it is a great solution to save the UI state and observe it from the view layer without…
Forwarded from Android Live 🤖
Jetpack Compose — Live coding сессия
#compose #youtube
Друзья, уже сегодня, 21 декабря в 18:30 мы с вами погрузимся в мир Jetpack Compose и создадим рабочее приложение.
По ходу сессии вы сможете задать вопросы нашему гостю Григорьеву Дмитрию, автору канала Jetpack Compose.
Напоминаю, что мы с вами рассмотрим:🔹
🔹как лучше строить архитектуру;
🔹как делать списки из разных типов view;
🔹что делать с навигацией между разными экранами;
🔹как сделать анимации;
🔹что делать с текущими приложениями;
🔹и много другое.
Ссылка на трансляцию тут.
#compose #youtube
Друзья, уже сегодня, 21 декабря в 18:30 мы с вами погрузимся в мир Jetpack Compose и создадим рабочее приложение.
По ходу сессии вы сможете задать вопросы нашему гостю Григорьеву Дмитрию, автору канала Jetpack Compose.
Напоминаю, что мы с вами рассмотрим:🔹
🔹как лучше строить архитектуру;
🔹как делать списки из разных типов view;
🔹что делать с навигацией между разными экранами;
🔹как сделать анимации;
🔹что делать с текущими приложениями;
🔹и много другое.
Ссылка на трансляцию тут.
Forwarded from Kotlin Multiplatform Broadcast
#KMP #Multithreading
Kotlin Multiplatform. Работаем с многопоточностью на практике
Разбор применения Coroutine в мультиплатформенном проекте, причем чтобы все это работало во множестве потоков. Для iOS используется специальная версия библиотеки
Kotlin Multiplatform. Работаем с многопоточностью на практике
Разбор применения Coroutine в мультиплатформенном проекте, причем чтобы все это работало во множестве потоков. Для iOS используется специальная версия библиотеки
kotlinx-coroutines
с постфиксом native-mt
в версии, которая позволяет обойти текущие ограничения основной.Forwarded from Mobius — канал конференции
24 декабря в 11:00 будем провожать 2020 год в эфире "Hello, world!" с Mobius.
Программный комитет Mobius подведет итоги года, ребята поделятся личными топами докладов и спикеров, побрейнштормят на тему того, что ждёт конференцию в будущем, и расскажут почти волшебные истории о том, как IT-конференции повлияли на их жизнь и карьеру.
Особый сюрприз мы приготовили тем, кто всегда мечтал выступить на Mobius с докладом, но боялся попробовать. На нашем предновогоднем чаепитии вы узнаете, почему на весеннем Mobius нам нужны именно вы.
Будет душевно, уютно и тепло. Дело за вами - подключайтесь.
https://youtu.be/Lv4JWyMKZTk
Программный комитет Mobius подведет итоги года, ребята поделятся личными топами докладов и спикеров, побрейнштормят на тему того, что ждёт конференцию в будущем, и расскажут почти волшебные истории о том, как IT-конференции повлияли на их жизнь и карьеру.
Особый сюрприз мы приготовили тем, кто всегда мечтал выступить на Mobius с докладом, но боялся попробовать. На нашем предновогоднем чаепитии вы узнаете, почему на весеннем Mobius нам нужны именно вы.
Будет душевно, уютно и тепло. Дело за вами - подключайтесь.
https://youtu.be/Lv4JWyMKZTk
YouTube
Hello, world! с Mobius №6 / Дед Mobius // 24.12.2020
Ближайшая конференция: Mobius 2023 Autumn — 1–2 ноября (Online), 9–10 ноября (Offline, Санкт-Петербург)
Подробности и билеты: https://cutt.ly/XwrLVnLV
— . .
Вы все прекрасно знаете принцип "Как Новый год встретишь, так его и проведёшь", но ведь про проводы…
Подробности и билеты: https://cutt.ly/XwrLVnLV
— . .
Вы все прекрасно знаете принцип "Как Новый год встретишь, так его и проведёшь", но ведь про проводы…
Forwarded from Kotlin Multiplatform (Алексей Михайлов)
Kotlin 1.4.30 Milestone 1 доступен для использования. Новая версия также совместима с библиотеками, скомпилированными на предыдущих версиях Kotlin 1.4.
Для KMM в новой версии грядет важное улучшение - значительное ускорение времени компиляции Kotlin/Native.
Мы провели у себя замеры на самом страдающем от времени сборки проекте:
- Kotlin 1.4.21 - 3m 55s total build time
- Kotlin 1.4.30-M1 - 2m 41s total build time
Условия теста:
- MacBook Pro 16 2019 (i9 2.4, 32Gb RAM)
- org.gradle.parallel=true
- org.gradle.jvmargs=-Xms512m -Xmx16g
- multimodule project (36 KMM gradle modules)
- чистая сборка (после clean)
- компиляция Debug iOS X64 framework
Но при тесте мы обнаружили 1 проблему с kotlinx.serialization.
#news
Для KMM в новой версии грядет важное улучшение - значительное ускорение времени компиляции Kotlin/Native.
Мы провели у себя замеры на самом страдающем от времени сборки проекте:
- Kotlin 1.4.21 - 3m 55s total build time
- Kotlin 1.4.30-M1 - 2m 41s total build time
Условия теста:
- MacBook Pro 16 2019 (i9 2.4, 32Gb RAM)
- org.gradle.parallel=true
- org.gradle.jvmargs=-Xms512m -Xmx16g
- multimodule project (36 KMM gradle modules)
- чистая сборка (после clean)
- компиляция Debug iOS X64 framework
Но при тесте мы обнаружили 1 проблему с kotlinx.serialization.
#news
GitHub
Release Kotlin 1.4.30-M1 · JetBrains/kotlin
You could find information about EAP program and setup instructions here
CHANGELOG
1.4.30-M1
Android
KT-42383 HMPP: Bad IDEA dependencies: Missing dependency from p1:jvmAndAndroid to p2:jvmAndAndr...
CHANGELOG
1.4.30-M1
Android
KT-42383 HMPP: Bad IDEA dependencies: Missing dependency from p1:jvmAndAndroid to p2:jvmAndAndr...
На MobiFest я мимоходом упомянула про кейс, когда мы реализуем бизнес-логику по-разному на разных платформах. Да, мы можем настроить использование разных сервисов с разными библиотеками под платформы, но тут теряется вся соль common code. В таком кейсе уже проще перейти на натив