fa
Feedback
Kotlin Adept Notes

Kotlin Adept Notes

رفتن به کانال در Telegram

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

نمایش بیشتر
2 356
مشترکین
-224 ساعت
-37 روز
-1330 روز
جذب مشترکین
ژوئن '26
ژوئن '26
+9
در 0 کانال‌ها
مه '26
+23
در 0 کانال‌ها
Get PRO
آوریل '26
+36
در 0 کانال‌ها
Get PRO
مارس '26
+34
در 0 کانال‌ها
Get PRO
فوریه '26
+28
در 0 کانال‌ها
Get PRO
ژانویه '26
+38
در 0 کانال‌ها
Get PRO
دسامبر '25
+32
در 0 کانال‌ها
Get PRO
نوامبر '25
+58
در 0 کانال‌ها
Get PRO
اکتبر '25
+268
در 3 کانال‌ها
Get PRO
سپتامبر '25
+68
در 1 کانال‌ها
Get PRO
اوت '25
+79
در 1 کانال‌ها
Get PRO
ژوئیه '25
+247
در 2 کانال‌ها
Get PRO
ژوئن '25
+136
در 1 کانال‌ها
Get PRO
مه '25
+59
در 0 کانال‌ها
Get PRO
آوریل '25
+52
در 0 کانال‌ها
Get PRO
مارس '25
+115
در 3 کانال‌ها
Get PRO
فوریه '25
+84
در 2 کانال‌ها
Get PRO
ژانویه '25
+44
در 0 کانال‌ها
Get PRO
دسامبر '24
+85
در 1 کانال‌ها
Get PRO
نوامبر '24
+142
در 2 کانال‌ها
Get PRO
اکتبر '24
+97
در 0 کانال‌ها
Get PRO
سپتامبر '24
+185
در 2 کانال‌ها
Get PRO
اوت '24
+415
در 2 کانال‌ها
Get PRO
ژوئیه '24
+42
در 0 کانال‌ها
Get PRO
ژوئن '24
+39
در 0 کانال‌ها
Get PRO
مه '24
+109
در 1 کانال‌ها
Get PRO
آوریل '24
+97
در 3 کانال‌ها
Get PRO
مارس '240
در 1 کانال‌ها
Get PRO
فوریه '24
+95
در 3 کانال‌ها
Get PRO
ژانویه '24
+52
در 1 کانال‌ها
Get PRO
دسامبر '23
+276
در 3 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
12 ژوئن0
11 ژوئن+1
10 ژوئن+1
09 ژوئن+2
08 ژوئن+1
07 ژوئن+1
06 ژوئن+1
05 ژوئن+1
04 ژوئن0
03 ژوئن0
02 ژوئن+1
01 ژوئن0
پست‌های کانال
Как устроены продукты, которые задают тренды? Т-Банк готовит летний фест для тех, кому важно не просто слушать, а разбираться
Как устроены продукты, которые задают тренды? Т-Банк готовит летний фест для тех, кому важно не просто слушать, а разбираться, как реально устроены продукты 20 июня «Сезон кода» собирает разработчиков, аналитиков и продактов в Санкт-Петербурге, чтобы показать, как создаются продукты — от первых гипотез до продакшена. Вас ждут: — прикладные доклады команд Т-Банка и других компаний про архитектуру, бэкенд и интеграции; — демо-зоны с ключевыми платформенными и коммуникационными сервисами и графовой аналитикой; — продуктовый стрим «Продуктовая кухня»: разберем, как данные превращаются в решения, а гипотезы — в рост продукта и ценность для пользователя; — формат, где знакомства происходят прямо по ходу программы. А еще — баскетбольная площадка, пинг-понг и большое афтепати с диджеем. Фест пройдет в ИТ-хабе Группы компаний «Т-Технологии». Количество мест ограничено — успейте зарегистрироваться

2
Как сделать аналог availability check из iOS в KMP В Swift есть специальный механизм проверки доступности API на разных версиях ОС: ``swift if #available(iOS 17.4, *) { newAPI() } else { legacyAPI() } Это позволяет выполнять код только на определённых версиях ОС, где нужный API гарантированно существует. Но, к сожалению, такого механизма нет в Kotlin Native при работе над KMP-проектами. И если мы хотим реализовать данную возможность только в Kotlin-коде, то придётся искать обходное решение. В первую очередь понадобится метод для определения версии iOS: ```kotlin internal fun isIosVersionAtLeast(major: Int, minor: Int = 0, patch: Int = 0): Boolean { val target = cValue<NSOperatingSystemVersion> { majorVersion = major.toLong() minorVersion = minor.toLong() patchVersion = patch.toLong() } return NSProcessInfo.processInfo.isOperatingSystemAtLeastVersion(target) } Однако само по себе это не поможет. Приложение всё равно будет крашиться при запуске на старых версиях ОС, если во фреймворке есть символы несуществующего класса. Поэтому придётся добавить в настройки сборки shared-фреймворка специальный флаг линковки, который будет подключать указанный системный фреймворк только в том случае, если он доступен: it.binaries.framework { linkerOpts.addAll(listOf("-weak_framework", "AuthenticationServices")) } Однако если обратиться к несуществующему классу, то приложение всё равно упадет в рантайме. Поэтому для дополнительной безопасности можно также проверять наличие класса через NSClassFromString("ClassName").
758
3
✅ kmp-telegram-login Решил реализовать пример работы с OAuth 2.0 в KMP, как и обещал, но делать просто пример в вакууме не хотелось, и я вспомнил про недавно вышедший android-telegram-login. Подумал, что было бы полезно адаптировать его под KMP. Но что бы вы думали? Разумеется, кто-то уже навайбкодил это до меня здесь, причём всего пару дней назад 💅 В целом код из репозитория и наша реализация довольно схожи, за исключением некоторых важных моментов. Там также используется безопасный Code Flow + PKCE, но если Telegram не установлен на устройстве, то вместо нового AuthTabIntent используется CustomTabsIntent и есть подозрение, что с https-схемой могут быть проблемы на некоторых браузерах. ⚠️ Однако в либе есть очень критичная проблема. Похоже, разработчики ещё не запускали код на устройствах с iOS ниже 17.4 или не удосужились написать, как это исправить. Если собрать KMP-фреймворк с этой библиотекой, приложение просто крашнется при запуске, поскольку ASWebAuthenticationSessionCallback доступен только начиная с этой версии ОС. Именно поэтому мы у себя в итоге отказались от использования Universal Links и оставили только кастомную схему. На самом деле это можно исправить, и о том, как это сделать, я расскажу в следующем посте, так что stay tuned!
929
4
Недушное изучение и практика разговорного английского в онлайн-школе Authentic Pigeon, чтобы привести язык в порядок и дотянуться до офферов за рубежом. Узнать подробнее и записать на бесплатное демо-занятие можно в телеграм-боте. Абсолютно кайфую от подхода … Занятия тут это не потогонка, а крутой дружеский разговор. Студент школы — Иван Реклама. ИП Моисеева А.А. ИНН 270393875959
1 715
5
Решили тут перейти в дизайн-системе на state-based TextField, чтобы порешать разные проблемы предыдущей версии. И, как говори
Решили тут перейти в дизайн-системе на state-based TextField, чтобы порешать разные проблемы предыдущей версии. И, как говорится, что же могло пойти не так 😐 Какие плюсы получили: 🟢Упростилась работа с курсором — страшные хаки больше не нужны 🟢Перестали лагать быстрые изменения текста на старых устройствах 🟢VisualTransformation теперь разделился на InputTransformation и OutputTransformation, что позволяет гибче работать с изменением текста Какие минусы: 🔘Пришлось костылить обёртку с двумя LaunchedEffect, чтобы сохранить перегрузку с предыдущим API 🔘Ну и самое бесячее: в новом TextField почему-то решили поменять отступ от клавиатуры. Теперь экран подскролливается к каретке ввода, и выглядит это как на изображении выше. А фиксится всё ужасно костыльным образом. 💬 Так что вопрос к знатокам: кто-нибудь уже сталкивался с подобной проблемой? И если да, то как её решили?
1 928
6
Особенности работы с OAuth 2.0 в KMP Во многих мобильных приложениях аутентификация и авторизация пользователей происходят через протокол OAuth 2.0, который является индустриальным стандартом. В нём предусмотрены различные флоу авторизации, и наиболее подходящим для мобильных приложений считается Authorization Code + PKCE. Этот флоу предотвращает перехват данных благодаря генерации временных параметров: codeChallenge и codeVerifier. Я не сторонник использования сторонних неофициальных библиотек в целом, и тем более для такой критичной вещи, как аутентификация. А в мире KMP найти что-то подходящее ещё сложнее, поэтому часто приходится делать всё самому. 🤖 Android Для Android в пакете androidx.browser появился очень удобный механизм AuthTabIntent, который берёт на себя почти всю работу, хотя и не без нюансов. Если выбранный в системе браузер по умолчанию не поддерживает AuthTab, ничего работать не будет. А кроме Chrome и Firefox, насколько я знаю, его почти никто не поддерживает. Поэтому придётся либо явно указывать пакет браузера, либо делать fallback, если подходящего браузера нет. 🍏iOS На iOS есть аналогичный удобный механизм ASWebAuthenticationSession. Но, как это часто бывает у Apple, не все фичи работают на старых версиях iOS. Например, редирект через https-схему (Universal Links) поддерживается только начиная с iOS 17.4, а на более ранних версиях придётся использовать кастомную схему. И в KMP это довольно сложно разграничить — приходится прибегать к чёрной магии чтобы исключать символы при загрузке фреймворка 🤨 ⭐️Если тема для вас актуальна и нужен KMP-сэмпл, ставьте реакции и я постараюсь собрать полноценный пример. #KMP #OAuth
2 317
7
Твой код — в сердце мощного ИИ! 💚 Команда GigaChat зовёт на One Day Offer амбициозных Java-разработчиков, которые готовы соз
Твой код — в сердце мощного ИИ! 💚 Команда GigaChat зовёт на One Day Offer амбициозных Java-разработчиков, которые готовы создавать AI‑продукты уровня BigTech и стать частью крупнейшего AI-комьюнити. Если ты дружишь с Java (версии 8–25), ладишь со Spring и Hibernate, а PostgreSQL и ClickHouse для тебя — не просто слова, переходи по ссылке и занимай слот на One Day Offer. Встречаемся 23 мая — очень ждём именно тебя!
1 787
8
Переход на AGP 9 в KMP-проектах Мы долго откладывали миграцию на AGP 9, ждали, пока всякие авторы по типу Huawei адаптирует свои плагины, и наконец решились ⚪️ Казалось бы, спустя столько времени это должна была быть легкая прогулка, но не тут-то было. С какими проблемами столкнулись 🟢Теперь нельзя использовать плагин android.application в KMP-модулях. 🟢Все модули нужно было мигрировать на новый Android Gradle Plugin. 🟢Больше нельзя генерировать BuildType в KMP-модулях. 🟢Значительно изменились многие API, которые мы использовали в своих Gradle-плагинах. Помимо этого, обновление Kotlin и Compose нам тоже вставило палки в колеса, но сегодня не об этом. Так что поделюсь рекомендациями для тех, кто еще не перевел свои проекты. Скиллы для агентов 🟢Официальный skill от Google для миграции KMP-проектов абсолютно не подходит: он лишь понаделал кучу deprecated свойств в gradle.properties. 🟢А вот аналогичный skill от JetBrains хорош! К сожалению, мы узнали о нем поздно, поэтому пришлось делать свой, но с pet-проектом он справился отлично. Что еще почитать 🟢Переход на Android Gradle Plugin для KMP 🟢Миграция на built-in Kotlin 🟢Гайд по миграции на AGP 9 💬 А как прошла ваша миграция на APG 9?
1 731
9
Особенности работы с Passkeys в Android и iOS Мы наконец-то реализовали мультиплатформенный модуль для работы с Passkeys и хочу поделиться нюансами, с которыми столкнулись. Passkeys — более безопасная и простая альтернатива паролям, где аутентификация в сервисе происходит по биометрии. В случае с Android поддержка Passkeys появилась с Android 9, в то время как на iOS только с iOS 16. При этом технология значительно совершенствовалась в последних версиях ОС, например, предоставляя выбор кастомного менеджера паролей. 🤖 В Android работа с Passkeys происходит через CredentialManager и реализована довольно удобно: почти всё происходит под капотом, достаточно лишь передать JSON с бэкенда. Но есть две проблемы: обработка ошибок и необходимость в Activity context, что создаёт определённые архитектурные сложности. В случае обработки ошибок приходится вручную извлекать из текста через регулярки коды ошибок, чтобы отображать понятные пользователю сообщения. 🇨🇳 А вот пользователи Huawei, к сожалению, не смогут воспользоваться этой фичей, так как CredentialManager просто отказывается работать с другими менеджерами паролей. Хотя для Huawei существует своя реализация FIDO2, API там реализован далеко не лучшим образом, и всё это делается через отдельную Activity, которая будет открываться даже если ключей нет 😐 🍏В iOS же работа с Passkeys происходит через ASAuthorizationController, где приходится вручную мапить каждое поле, конвертировать NSData в Base64URL и обратно. В общем, работать со всем этим добром не очень удобно. Также имеются отличия от Android: например, нельзя передать excludeCredentials для исключения дубликатов ключей, и не поддерживается direct attestation, который позволяет определить, что устройство подписано корневым сертификатом производителя. 💬 А вы интегрировали Passkeys в свой проект или планируете это сделать? #Passkeys #KMP #Android #iOS
2 143
10
Mobius 2026 Spring: конференция для мобильных разработчиков Почему мобильные приложения тормозят на проде? Как строить архите+4
Mobius 2026 Spring: конференция для мобильных разработчиков Почему мобильные приложения тормозят на проде? Как строить архитектуру, которая масштабируется с ростом пользователей? Где AI уже помогает решать инженерные задачи? Эти и многие другие вопросы разберем на Mobius этой весной. 📅 12–13 мая, Москва + онлайн Два дня докладов, воркшопов и живого общения мобильного сообщества. В программе — интеграции с бэкендом, управление состоянием, CI/CD, инструменты, оптимизация перфоманса и поддержка крупных проектов. Листайте карточки — собрали топовые доклады из программы. Используйте промокод, чтобы купить персональный билет со скидкой — KOTLINADEPT Купить билет Реклама. ООО «Джуг Ру Груп». ИНН 7801341446
0
11
Генерация макетов через Figma MCP 🖌 Пока все говорят про "убийцу Figma", хочу рассказать о том, как мне удалось примерить шапочку дизайнера и собрать макеты приложения в Figma с использованием корпоративной дизайн-системы с помощью Figma MCP. Не так давно Figma сделала скил под названием figma-use, который даёт доступ к рисованию на канвасе, переменным, стилям и компонентам. И это стало отличным шансом собрать макеты приложения без навыков работы в Figma. Я не стал сразу пытаться собирать макеты в Figma, а начал с генерации макетов в виде сайта, скормив бизнес-сценарии приложения и несколько изображений-референсов по стилю AI-агенту. В целом Claude с одного промта справился очень даже неплохо, дальше пришлось просто допилить некоторые моменты. И уже после этого я решил зафиксировать макеты в Figma на основе сгенерированного сайта. Но первое, во что я упёрся — это лимиты Figma: они закончились буквально за пару вызовов MCP, так что на бесплатном тарифе можете даже не пытаться что-то сделать 🙃 Далее я попробовал выборочно перенести экран как есть, без использования дизайн-системы, и это сработало хорошо, всё перенеслось так, как я и ожидал. Но проблемы начались, когда нужно было использовать компоненты существующей дизайн-системы. В нашем случае ключевой проблемой оказались кастомные шрифты, которых нет в Figma, из-за чего MCP не может редактировать текст в компонентах 😠 В итоге, чтобы добиться хоть какого-то вменяемого результата, мне пришлось создать ещё два скила: один для корректной работы с палитрой, чтобы правильно выбирать цвета, и отдельно для работы с дизайн-системой, где описаны id всех компонентов и их свойства, а также решения для всех проблем, возникших по пути. Через боль и страдания я перенёс все макеты. И что могу сказать по текущему статусу работы Figma MCP: пока что это очень сырая штука. Механизм self-валидации через скриншоты работает ужасно — такое ощущение, что работаешь со слепым дизайнером. Да и в целом всё это работает очень долго, даже банальные задачи могут занимать несколько минут, которые профессиональный дизайнер сделает в разы быстрее. 💬 А что вы думаете: сможет ли Figma адаптироваться к новому миру? Или макеты уже прошлый век, и всё сразу будет верстаться в коде? #Figma #MCP #AI
0
12
Как защитить API от нежданных клиентов На днях я делал приложение для bug bounty активности на конференции, в котором нужно будет найти секретную ссылку. Мне не хотелось, чтобы всё решилось простым запросом в AI или пересборкой приложения с отключением SSL-пиннинга, поэтому я задумался о том, как защититься от пересборки приложения, чтобы только версия с моей подписью могла делать запросы к серверу. Я решил попробовать Play Integrity. Всё бы ничего, но приложение должно быть обязательно опубликовано в Google Play, хотя бы во внутреннем тестировании, иначе аттестация устройства не будет проходить. Поэтому этот вариант мне не подошёл, и я решил реализовать собственный сервер аттестации, который проверяет цепочку сертификатов, извлекает из сертификата отпечаток подписи приложения и сравнивает его с заданным. Звучит круто, но почему тогда это не используется массово? Дело в том, что, во-первых, это работает не на всех версиях Android. Кроме того, устройство должно поддерживать Hardware Attestation, что может отсечь часть устройств и на них приложение просто не будет работать. Если вас заинтересовала тема, вы ещё успеваете залететь на Podlodka Android Crew и послушать доклад про Play Integrity, где разберут как работают эти механизмы. А ещё вы сможете попробовать сами обойти эту защиту в нашей bug bounty активности 💻 Так что присоединяйтесь, будет не только полезно, но и интересно 😉
0
13
Розыгрыш билета на Podlodka Android Crew #15 Мы снова подготовили для вас новый сезон конференции Podlodka Android Crew, кото
Розыгрыш билета на Podlodka Android Crew #15 Мы снова подготовили для вас новый сезон конференции Podlodka Android Crew, который пройдет с 30 марта по 3 апреля. В этот раз неделя будет посвящена безопасности в Android-разработке, и, на мой взгляд, нам удалось собрать интересную программу. Мой личный топ докладов, которые хотелось бы послушать: 🔘Про защиту видеоконтента 🔘Про passkeys, так как прямо сейчас мы имплементируем это у себя 🔘Про то, как работает защита Play Integrity 🔘Про reverse engineering на практике от моего коллеги И в связи с этим хочу провести розыгрыш билета. Условия розыгрыша 💬 Вам нужно написать комментарий под этим постом на тему безопасности мобильных приложений. Можно рассказать про самый интересный баг в безопасности, с которым вы сталкивались, или, наоборот, поделиться опытом, как вы реализовали какое-то безопасное решение. Итоги розыгрыша 🗓 Победителя выберу случайным образом уже в эту субботу в 10:00 МСК. Удачи! P.S. Ну а для тех, кто не хочет участвовать в розыгрыше, могу предложить скидку по промокоду adept15
0