Kotlin Adept Notes
الذهاب إلى القناة على Telegram
Канал о разработке на Kotlin и обо всем, что с ним связано По всем вопросам и рекламе: @ajiekcx
إظهار المزيد2 349
المشتركون
+124 ساعات
-57 أيام
-1130 أيام
جاري تحميل البيانات...
القنوات المماثلة
سحابة العلامات
الإشارات الواردة والصادرة
---
---
---
---
---
---
جذب المشتركين
يونيو '26
يونيو '26
+21
في 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 قنوات
| التاريخ | نمو المشتركين | الإشارات | القنوات | |
| 30 يونيو | +1 | |||
| 29 يونيو | +1 | |||
| 28 يونيو | 0 | |||
| 27 يونيو | +2 | |||
| 26 يونيو | 0 | |||
| 25 يونيو | 0 | |||
| 24 يونيو | 0 | |||
| 23 يونيو | 0 | |||
| 22 يونيو | 0 | |||
| 21 يونيو | 0 | |||
| 20 يونيو | 0 | |||
| 19 يونيو | 0 | |||
| 18 يونيو | +3 | |||
| 17 يونيو | 0 | |||
| 16 يونيو | +2 | |||
| 15 يونيو | +2 | |||
| 14 يونيو | +1 | |||
| 13 يونيو | 0 | |||
| 12 يونيو | 0 | |||
| 11 يونيو | +1 | |||
| 10 يونيو | +1 | |||
| 09 يونيو | +2 | |||
| 08 يونيو | +1 | |||
| 07 يونيو | +1 | |||
| 06 يونيو | +1 | |||
| 05 يونيو | +1 | |||
| 04 يونيو | 0 | |||
| 03 يونيو | 0 | |||
| 02 يونيو | +1 | |||
| 01 يونيو | 0 |
منشورات القناة
Тестировщики, общий сбор! Что успеете сделать за 100 минут работы?
Делимся идеей: можно запустить параллельные тесты приложения на разных устройствах, проверить производительность, нажатия и UI. И все это — бесплатно в Мобильной ферме от Selectel, потому что при регистрации вы получаете 100 бонусных минут в сервисе.
Что дает Мобильная ферма Selectel:
● Парк из 50+ моделей от популярных до редких смартфонов на Android и iOS.
● Удобство — настройки сохраняются, пока устройство закреплено за вами вне зависимости от количества тестов и длины сессии.
● Безопасность — информация о ваших сессиях автоматически удаляется после завершения аренды.
Регистрируйтесь и получите промокод на 100 минут при первом заказе: https://slc.tl/z6ujt
Реклама. АО "Селектел". erid:2W5zFHq1xQH
| 2 | Насколько AI ускоряет TTM в большой компании
🧠 Мы запустили первое приложение, которое целиком написано с помощью AI: от прототипов и бэкенда до мобильных приложений. И хочется обсудить, насколько это реально ускорило общий TTM.
Можно услышать сотни историй о том, как вайбкодеры одновременно работают над десятком проектов и пишут по 30 тысяч строк кода в день. Это всё работает, пока ты делаешь это один. Но в большой компании, где куча команд, ещё больше микросервисов, своя инфраструктура, дизайн-система, правила безопасности и многое другое, тогда без полноценной перестройки процессов на уровне всей компании такой подход просто не получится внедрить.
Поэтому сейчас речь идёт именно о применении AI-агентов для написания кода, без глобального изменения процессов и с тем же уровнем качества кода, что и раньше.
Итак, я замерил показатели предыдущих MVP наших проектов и получил интересные цифры.
🟡Разработка действительно ускорилась, но не драматически — примерно на 50%. Всё потому, что раньше мы тратили большую часть времени на написание кода, попутно уточняя требования и валидируя результат. Теперь это время, по сути, переместилось в фазу планирования и валидации.
🟢А вот ускорение time to market получилось действительно разительным: от идеи до релиза приложения стало проходить в три раза меньше времени, чем обычно. Но, по сути, AI здесь ни при чём. Это произошло потому, что значительно сократилось количество людей в цепочке.
Разумеется, это всего лишь один пример, который проще всего было измерить. На большом масштабе цифры могут сильно отличаться.
📊 А какие цифры получаются у вас? | 899 |
| 3 | Как устроены продукты, которые задают тренды?
Т-Банк готовит летний фест для тех, кому важно не просто слушать, а разбираться, как реально устроены продукты
20 июня «Сезон кода» собирает разработчиков, аналитиков и продактов в Санкт-Петербурге, чтобы показать, как создаются продукты — от первых гипотез до продакшена.
Вас ждут:
— прикладные доклады команд Т-Банка и других компаний про архитектуру, бэкенд и интеграции;
— демо-зоны с ключевыми платформенными и коммуникационными сервисами и графовой аналитикой;
— продуктовый стрим «Продуктовая кухня»: разберем, как данные превращаются в решения, а гипотезы — в рост продукта и ценность для пользователя;
— формат, где знакомства происходят прямо по ходу программы.
А еще — баскетбольная площадка, пинг-понг и большое афтепати с диджеем.
Фест пройдет в ИТ-хабе Группы компаний «Т-Технологии».
Количество мест ограничено — успейте зарегистрироваться | 946 |
| 4 | Как сделать аналог 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"). | 1 707 |
| 5 | ✅ 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! | 1 640 |
| 6 | Недушное изучение и практика разговорного английского в онлайн-школе Authentic Pigeon, чтобы привести язык в порядок и дотянуться до офферов за рубежом. Узнать подробнее и записать на бесплатное демо-занятие можно в телеграм-боте.
Абсолютно кайфую от подхода … Занятия тут это не потогонка, а крутой дружеский разговор.
Студент школы — Иван
Реклама. ИП Моисеева А.А. ИНН 270393875959 | 1 715 |
| 7 | Решили тут перейти в дизайн-системе на state-based TextField, чтобы порешать разные проблемы предыдущей версии. И, как говорится, что же могло пойти не так 😐
Какие плюсы получили:
🟢Упростилась работа с курсором — страшные хаки больше не нужны
🟢Перестали лагать быстрые изменения текста на старых устройствах
🟢VisualTransformation теперь разделился на InputTransformation и OutputTransformation, что позволяет гибче работать с изменением текста
Какие минусы:
🔘Пришлось костылить обёртку с двумя LaunchedEffect, чтобы сохранить перегрузку с предыдущим API
🔘Ну и самое бесячее: в новом TextField почему-то решили поменять отступ от клавиатуры. Теперь экран подскролливается к каретке ввода, и выглядит это как на изображении выше. А фиксится всё ужасно костыльным образом.
💬 Так что вопрос к знатокам: кто-нибудь уже сталкивался с подобной проблемой? И если да, то как её решили? | 2 076 |
| 8 | Особенности работы с 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 405 |
| 9 | Твой код — в сердце мощного ИИ! 💚
Команда GigaChat зовёт на One Day Offer амбициозных Java-разработчиков, которые готовы создавать AI‑продукты уровня BigTech и стать частью крупнейшего AI-комьюнити.
Если ты дружишь с Java (версии 8–25), ладишь со Spring и Hibernate, а PostgreSQL и ClickHouse для тебя — не просто слова, переходи по ссылке и занимай слот на One Day Offer.
Встречаемся 23 мая — очень ждём именно тебя! | 1 822 |
| 10 | Переход на 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 758 |
| 11 | Особенности работы с 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 |
| 12 | Mobius 2026 Spring: конференция для мобильных разработчиков
Почему мобильные приложения тормозят на проде? Как строить архитектуру, которая масштабируется с ростом пользователей? Где AI уже помогает решать инженерные задачи?
Эти и многие другие вопросы разберем на Mobius этой весной.
📅 12–13 мая, Москва + онлайн
Два дня докладов, воркшопов и живого общения мобильного сообщества. В программе — интеграции с бэкендом, управление состоянием, CI/CD, инструменты, оптимизация перфоманса и поддержка крупных проектов.
Листайте карточки — собрали топовые доклады из программы.
Используйте промокод, чтобы купить персональный билет со скидкой — KOTLINADEPT
Купить билет
Реклама. ООО «Джуг Ру Груп». ИНН 7801341446 | 0 |
| 13 | Генерация макетов через 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 |
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
