Kotlin Adept Notes

@kotlin_adept


Канал о разработке на Kotlin и обо всем, что с ним связано
По всем вопросам и рекламе: @ajiekcx

Kotlin Adept Notes

21 Jan, 00:26


Обзор Mobius 2024 Autumn

Давайте уже по традиции сделаем обзор докладов с прошедшего Mobius, напишу свой личный топ докладов, которые удалось посмотреть:

Последнее слово в Android-навигации
🔵Отличная подача и повествование, очень красивая и проработанная презентация, интересный подход к навигации, чтобы свести ее к вызову двух методов open/close и уменьшить бойлерплейт.
🔸Однако не факт, что такой подход подойдет именно вам, у него есть свои ограничения и очень не хватило реального примера, где все это можно опробовать.

Совместная работа Kotlin/Native GC и ARC в iOS
🔵Хороший, а главное понятный доклад, чтобы узнать каким образом происходит интероп между двумя моделями памяти в Swift и Kotlin Native, в каких случаях в игру будет вступать ARC, а когда Kotlin Native GC
🔸Доклад безусловно хорош для общего развития, но вряд ли вам эти знания пригодятся на практике.

Танцы вокруг дерева семантики
🔵Интересный доклад про проблемы UI-тестирования в Compose и недостатки API в Kakao/Kaspresso, а также о том, как эти недостатки можно исправить.
🔸Для людей незнакомых с UI-тестированием в Compose может быть сложен для восприятия.

Опасности в Android: уязвимости и защитные меры
🔵Хороший обзор частых уязвимостей в Android и как от них защититься, что-то я уже знал, с чем-то сталкивался на практике, а что-то было в новинку.
🔸Но большинство уязвимостей неактуальны на новых API и если нельзя открыть произвольный URL в приложении.

Как проводить собеседования интересно и продуктивно
🔵Классный доклад о том, как превратить собеседование из экзамена в живое общение, а также возможность вспомнить о чем спрашивают на большинстве собеседований и сделать пометки, что еще стоит подучить.
🔸В целом уже не новый подход, мы у себя в компании уже давно стараемся проводить собеседования в формате диалога без заготовленного списка вопросов, но заместо кучи этапов сжали все это в одно собеседование.


🫠 На этом все, если хотите, чтобы я написал выжимку каких-либо докладов в посте, пишите в комментарии интересующий доклад ⬇️

#Mobius
@kotlin_adept

Kotlin Adept Notes

21 Jan, 00:22


Сегодня буду выступать на Mobius с докладом про отличия Compose и SwiftUI.

В докладе сравним следующие моменты:
🟣Принцип работы под капотом
🟣Стейт и жизненный цикл
🟣Система модификаторов
🟣Корутины в UI
🟣Подход к анимациям

Если вы на площадке, то приходите во второй зал в 12:15 мск или подключайтесь онлайн, если у вас есть билет на Mobius.

До встречи 🤝

Kotlin Adept Notes

21 Jan, 00:10


Стартует конференция Mobius и сегодня Community day, поэтому можно бесплатно посмотреть некоторые доклады.

Приходите послушать интересный доклад Kotlin in GitHub Actions. Расширяем горизонты KMP от Макса Качинкина.

Я там тоже буду присутствовать в качестве "эксперта", так что до встречи 🤝

Kotlin Adept Notes

21 Jan, 00:03


Коллега из Контура, Василий Рылов, поделился архитектурным примером KMP проекта 🔥

В репозитории вы найдете пример приложения построенного по следующим принципам:

🟣Каждая фича представлена группой модулей: feature-component, feature-domain, feature-ui и feature-data
🟣Комбинация FSM-based MVI и MVVM+ подхода с простой небиблиотечной ViewModel
🟣Навигация абстрагирована от Decompose, Decompose компоненты выделены в собственные модули
🟣Многомодульный DI, каждый модуль может использовать собственную реализацию DI

В примере использованы библиотеки:
🔵Multiplatform Room
🔵Multiplatform Settings
🔵Decompose
🔵Compose Multiplatform
🔵Варианты с Kotlin-inject и Koin DI

#KMP #Decompose #Sample
@kotlin_adept

Kotlin Adept Notes

21 Jan, 00:00


Пока готовился к докладу, нашел неплохой репозиторий с набором разных анимаций для Compose Multiplatform.

Там вы найдете множество разных примеров:
🟣Анимации заставок разных приложений (Netflix, Twitter, GitHub, Slack и др.)
🟣Кастомный pull-to-refresh
🟣Анимация горения свечи
🟣Упоротая сова из Duolingo

А если вы iOS разработчик, то вот вам еще более классный репозиторий с кучей красивых анимаций для SwiftUI 💅

#Animation #Compose #KMP #SwiftUI
@kotlin_adept

Kotlin Adept Notes

20 Jan, 23:49


В публичный доступ опубликовали воркшоп от Павла Стрельченко по созданию плагинов для любых IDE от JetBrains 👩‍💻

Очень рекомендую глянуть воркшоп, даже если вы не собираетесь разрабатывать плагины, ведь из воркшопа можно вынести много всего полезного, а именно:

💡 Почерпнуть идеи для плагинов и автоматизаций
🔮 Понять как мыслить при работе с незнакомым кодом
🐞 Увидеть как эффективно работать с дебаггером
✏️ Услышать полезные советы и многое другое

Приятного просмотра

#Plugins #Kotlin #IDE
@kotlin_adept

Kotlin Adept Notes

20 Jan, 23:47


🔥 Самые нужные каналы для Kotlin разработчика, чтобы расти в доходе 💸

• Kotlin | Вопросы собесов
• Kotlin | LeetCode
• Kotlin | Тесты
• Kotlin | Удалёнка

Подпишись, чтобы не потерять ☝️

#Реклама

Kotlin Adept Notes

20 Jan, 23:46


Перевернутые модификаторы

Неудивительно, что Android и iOS разработчики часто не могут найти общий язык, ведь у них (у нас) все перевернуто с ног на голову 🇦🇺

Это касается и модификаторов в декларативных UI фреймворках. На картинке видно, что цепочка из одинаковых модификаторов для Compose и SwiftUI дают один и тот же результат, при этом располагаясь в обратном порядке.

➡️ В Compose первый модификатор size задает минимальные и максимальные констрейнты и мы не можем выйти за эти ограничения, не переопределяя их.

➡️ В SwiftUI таких ограничений нет и там всегда padding применяется во вне, что может быть даже удобнее, так как не приходится об этом задумываться.

🗓 Но к чему я это все? На ближайшей конференции Мобиус буду рассказывать доклад, где сравню ключевые отличия обоих фреймворков, и если тема интересна, то буду рад видеть всех на докладе 😉

#Compose #SwiftUI
@kotlin_adept

Kotlin Adept Notes

20 Jan, 23:34


Как вкатиться в KMP без MacOs

Сегодня, слушая доклад Никиты Куликова на Podlodka Android Crew, получил для себя интересный инсайт.

Довольно часто видел вопросы в стиле, как мне вкатиться в Kotlin Multiplatform, если под рукой нет мака? Ведь на другой ОС запустить приложение под iOS не выйдет.

Решение довольно интересное, GitHub предоставляет вам бесплатное и безлимитное использование разных раннеров для Open source проектов, в том числе и на MacOs, соответственно вы можете собирать iOS проекты на CI и затем тестировать их на iPhone, если он у вас конечно есть🙃

Если хотите больше таких инсайтов и интересных обсуждений с разными экспертами, то вы ещё успеваете залететь на конференцию со скидкой по промокоду android_crew_12_o1TLih 😉

#KMP
@kotlin_adept

Kotlin Adept Notes

20 Jan, 23:30


iOS библиотеки в Kotlin коде

Не все знают, что в KMP мы не только можем скомпилировать Kotlin код в iOS фреймворк, но и, наоборот, использовать сторонние iOS библиотеки в Kotlin коде.

▶️ Например, есть две нативные библиотеки под Android и iOS, и вы хотите объединить их в одну KMP библиотеку и сделать все на Kotlin, тогда у вас есть два пути:

1️⃣ Использовать cocoapods (сторонний менеджер зависимостей в iOS), тогда подключение iOS фреймворка делается в одну строчку кода
2️⃣ Подключать фреймворк вручную, но тут все намного сложнее

Проблема cocoapods в том, что недавно их перевели в режим поддержки и большинство iOS разработчиков мигрируют свои зависимости на официальное решение SPM (Swift Package Manager), поэтому пойдем по второму пути и подключим iOS framework вручную:

1. Необходимо создать файл с расширением .def, где опишем некоторые параметры:

language = Objective-C
modules = YourFrameworkName
package = YourFrameworkName


2. В build.gradle вашей библиотеки необходимо добавить конфигурацию для создания klib из фреймворка с помощью cinterop 🤯:

KotlinNativeTarget.compilations.getByName("main") {
val YourFramework by cinterops.creating {
defFile = project.file("src/nativeInterop/cinterop/YourFramework.def")

compilerOpts("-framework", "YourFramework", "-F${projectDir}/../YourFramework.xcframework/$frameworkArch/")
compilerOpts("-fmodules")
}
}


Сделать это необходимо для всех iOS таргетов❗️ Также как и в следующем шаге.

3. В build.gradle файле, где будете собирать итоговый фреймворк для iOS нужно прилинковать тот же фреймворк:


KotlinNativeTarget.binaries.all {
linkerOpts("-framework", "YourFramework", "-F${projectDir}/../YourFramework.xcframework/$frameworkArch/")
}


💡 Как видите, делается это довольно сложно, поэтому не рекомендую использовать сторонние iOS библиотеки в Kotlin коде, лучше в общем коде сделать интерфейс, а реализацию оставить нативной на каждой платформе.

А еще если в iOS проекте уже использовалась эта библиотека, но другой версии, то все конечно же развалится 😂

#KMP #Kotlin #iOS
@kotlin_adept

Kotlin Adept Notes

20 Jan, 23:21


🎁 Розыгрыш билета на Podlodka Android Crew

Продолжим череду розыгрышей на канале, мы с ребятами подготовили для вас очередной сезон Podlodka Android Crew про автоматизацию разработки.

Удалось собрать сильных спикеров и интересную программу, но думаю вы и без меня уже видели кучу рекламы в каналах, поэтому повторяться не буду. Перейдем сразу к делу, и разыграем билет на конференцию.

От вас всего два условия:
1. Быть подписанным на канал @kotlin_adept
2. Написать любой комментарий про автоматизацию разработки. Может есть что-то, что надоело делать вручную или, наоборот, вы что-то уже автоматизировали 💬

Победителя выберем рандомно среди всех, кто выполнил условия, и подведем итоги 14 сентября.

Ну а те, кто не верит в фортуну, ловите промокод на скидку: android_crew_12_o1TLih 🤦‍♂️

Kotlin Adept Notes

20 Jan, 23:16


Поздравляю победителя, но никому не советую разыгрывать Telegram Premium, если вы вдруг собирались.

По итогу пришлось забанить 195 ботов в канале 😀 и сделать на сегодня канал частным, чтобы не налетело ещё больше ботов на розыгрыш.

Очень странно, что ТГ сам не умеет отсеивать ботов, в целом там довольно понятные паттерны как их можно определять🤔

Kotlin Adept Notes

20 Jan, 23:13


Топ 4 незаметных бага при смене стека

Помните я похвастался, что переписал проект с RX на корутины без багов? Так вот я соврал 😼

Ну или не совсем, так как баги не связаны напрямую с асинхронщиной, поэтому давайте посмотрим на топ незаметных багов при смене стека технологий.

1️⃣ Переходя с Rx на корутины у вас может сломаться Retrofit, при этом только для специфичных кейсов, когда в ответе приходит код 204, Retrofit начинает воспринимать успешный ответ как ошибку из-за отсутствия Body.

2️⃣ Переходя с Retrofit на Ktor проверьте все экстеншены для определения сетевых ошибок, зависимость на OkHttp у вас останется, но работать экстеншены перестанут так как исключение уже будет не HttpException, а ResponseException.

3️⃣ А также проверьте места, где возвращается Response, а не Body, в Retrofit это всегда успешная операция вне зависимости от ответа, в Ktor же это будет ошибкой, если выставлен флаг expectSuccess.

4️⃣ При переходе с GSON на KotlinxSerialization убедитесь, что все опциональные поля моделей помечены nullable и имеют дефолтное значение, так как GSON мог засунуть null даже в non-nullable поле и все могло работать, если к этому полю не обращаться.

💭 А какие незаметные баги просачивались у вас при рефакторинге стека технологий?

#Android #Kotlin
@kotlin_adept

Kotlin Adept Notes

20 Jan, 23:06


Канал незаметно перевалил за тысячу подписчиков 🎉

Спасибо, что читаете мои редкие записки!

В честь этого давайте разыграем Telegram Premium (поддержим Пашу и я смогу редактировать оформление канала 👏), а также чуть позже будет розыгрыш билета на следующий сезон Podlodka Android Crew, так что stay tuned 🎩

1,242

subscribers

22

photos

3

videos