uz
Feedback
AppFiles - Mobile Development

AppFiles - Mobile Development

Kanalga Telegram’da o‘tish

Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.

Ko'proq ko'rsatish
2 173
Obunachilar
-224 soatlar
+17 kunlar
-830 kunlar
Postlar arxiv
Один код для многих платформ - вот что вам никто не расскажет о KMP Привет, Kotlin-разработчики. Скажу честно. Когда я начал
Один код для многих платформ - вот что вам никто не расскажет о KMP Привет, Kotlin-разработчики. Скажу честно. Когда я начал разрабатывать своё приложение для разделения расходов на Kotlin Multiplatform, я подумал: «Напиши один раз, запускай везде. Что может быть сложного?» Оказалось, может быть очень сложно. Но и невероятно полезно. Это не очередной туториал «как начать работу с KMP». Таких и без того полно. Это скорее статья, которую я сам хотел бы прочитать до начала работы: реальные проблемы, реальные ошибки и реальные решения. Всё основано на моём опыте создания ExpenseSplitter KMP — полноценного приложения для совместного учёта расходов, которое работает на Android, Desktop и Web из одной общей кодовой базы. Вот как всё было на самом деле. Статья: https://apptractor.ru/info/articles/odin-kod-dlya-mnogih-platform-vot-chto-vam-nikto-ne-rasskazhet-o-kmp.html Платформа: кроссплатформа 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Android CameraX: детекция лица в реалтайме для биометрии Представим ситуацию: клиент хочет перевести большую сумму, используя
Android CameraX: детекция лица в реалтайме для биометрии Представим ситуацию: клиент хочет перевести большую сумму, используя мобильное приложение. Внутренние системы видят подозрительную активность и запрашивают проверку по селфи, человек наводит камеру на лицо — получает отказ. А все из-за того, что на бэкенде была получена размытая фотография потолка с кусочком лица пользователя, по которому никак не понять, действительно ли это владелец счета хочет провести операцию. Клиент звонит в поддержку, злится. Банк теряет доверие. Именно такие сценарии заставили нас серьезно заняться качеством записываемого фото. Статья: https://habr.com/ru/companies/tbank/articles/900136/ Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Kadr - декларативное создание видео для платформ Apple SwiftUI для видео. Компонуйте, трансформируйте и экспортируйте видео н
Kadr - декларативное создание видео для платформ Apple SwiftUI для видео. Компонуйте, трансформируйте и экспортируйте видео на Swift — так, как действительно хочется писать код. Kadr - cовременная декларативная библиотека на Swift для создания видеокомпозиций на платформах Apple. Видео собираются с помощью DSL на основе result builder, а асинхронная работа построена на async/await. Поддерживаются многодорожечные временные шкалы, переходы, наложения, фильтры с анимацией по ключевым кадрам, собственные покадровые композиторы, привязанный ко времени звук с плавными перекрёстными переходами — всё это поверх AVFoundation и без сторонних зависимостей. Kadr на GitHub: https://github.com/SteliyanH/kadr Платформа: iOS ⭐️: 48   👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Надежное выполнение фоновых задач в iOS: часть 1 Можно подумать, что если у вас в кармане лежит суперкомпьютер, то он уж точн
Надежное выполнение фоновых задач в iOS: часть 1 Можно подумать, что если у вас в кармане лежит суперкомпьютер, то он уж точно должен уметь надёжно выполнять разные рутинные задачи в фоне, пока вы занимаетесь своими делами. Примерно так же, как  cron в Unix-системах делает это ещё с 1970-х. В первой статье этой серии из трёх частей я расскажу о начале своего пути с BGTaskScheduler — фреймворком Apple для запуска фоновых задач на iOS. А также о том, как методом проб, ошибок и наблюдений мне удалось добиться достаточно хорошей надёжности в моём приложении Calendar Copilot, которое я использую для синхронизации событий между календарями. Сразу раскрою итог: BGTaskScheduler не настолько надёжен, как cron, но добиться достаточно стабильного расписания можно. Правда, есть важная оговорка — вам или вашим пользователям придётся открывать приложение хотя бы раз в неделю или две. Если этого не делать, iOS со временем начинает реже запускать фоновые задачи, а затем вообще прекращает это делать ради экономии батареи. Статья: https://apptractor.ru/info/articles/nadezhnoe-vypolnenie-fonovyh-zadach-v-ios-chast-1.html Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Шпаргалка: Kotlin Coroutines Channels и Actor‑модель Пытаюсь лучше понять работу Kotlin Coroutines. Беру небольшую тему про Kotlin Coroutines и пытаюсь разобраться и написать шпаргалку (максимально кратко и лаконично). Сегодня поговорим про Каналы (Channel) и паттерн Actor. В предыдущих частях я писал, что обычные suspend‑функции возвращают результат только один раз. Но что делать, если у нас есть непрерывный поток данных, который асинхронно генерируется в одной корутине, а обрабатываться должен в другой (или даже в нескольких)? Нам нужна потокобезопасная «труба». В мире корутин этой трубой является Channel. Статья: https://habr.com/ru/articles/1071290/ Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

DroidGauge - Local-first регрессионное тестирование Android-приложений DroidGauge — это инструмент командной строки, ориентир
DroidGauge - Local-first регрессионное тестирование Android-приложений DroidGauge — это инструмент командной строки, ориентированный на локальную работу, для воспроизводимых измерений производительности приложений Android. Он не требует root-доступа, APK-файла на устройстве, облачных сервисов или внешних ресурсов для создания отчетов. Он выявляет регрессии производительности и энергопотребления Android локально с помощью одной команды adb и готового автономного отчета. Возможности: • Сбор показателей CPU, PSS-памяти, рывков при отрисовке кадров, батареи, температуры и сетевой активности отдельных приложений — если соответствующие данные доступны в используемой версии Android. • Устойчивый сбор данных: недоступные команды и поля отмечаются как отсутствующие метрики, а не приводят к прерыванию всего запуска. • Стабильный JSON-формат schema_version: 1 со средним значением, p50, p95, минимумом, максимумом и изменением от первого до последнего измерения. • Адаптивные HTML-отчёты в тёмной теме со встроенными SVG-графиками, без CDN, JavaScript, внешних шрифтов и дополнительных файлов. • A/B-сравнение с учётом направления изменения (improved, regressed, stable) и детерминированными выводами на основе правил. • Проверка в CI с кодом выхода 2 при обнаружении настроенных регрессий. • Не собираются логи, списки приложений, содержимое экрана или другие персональные данные. DroidGauge на GitHub: https://github.com/RuizheGu0/droidgauge Платформа: Android ⭐️: 4 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Забавные анимации с меш-градиентами в Jetpack Compose 1.12 В Jetpack Compose всегда были интерфейсы для линейных и радиальных градиентов. Но если хотелось получить более сложное смешивание цветов, подходящего встроенного решения не было. Теперь оно появилось: в Jetpack Compose 1.12 представлен MeshGradientPainter. Статья: https://apptractor.ru/info/articles/zabavnye-animatsii-s-mesh-gradientami-v-jetpack-compose-1-12.html Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

MYCloudKit - синхронизация и и возможности обмена данными через CloudKit MYCloudKit — это фреймворк, разработанный для упроще
MYCloudKit - синхронизация и и возможности обмена данными через CloudKit MYCloudKit — это фреймворк, разработанный для упрощения и автоматизации операций синхронизации, удаления и получения данных из CloudKit для вашего приложения.  MYCloudKit на GitHub: https://github.com/mufasaYC/MYCloudKit Платформа: iOS ⭐️: 215   👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

⚡️⚡️Мобильные разработчики снова соберутся на Mobius этой осенью! 21–22 октября в Санкт-Петербурге и онлайне пройдет Mobius —
⚡️⚡️Мобильные разработчики снова соберутся на Mobius этой осенью! 21–22 октября в Санкт-Петербурге и онлайне пройдет Mobius — конференция JUG Ru Group для мобильных разработчиков. По традиции в фокусе — практические задачи, нативный и кроссплатформенный подходы, архитектура и реальный опыт продуктовых команд. ✨Программа уже активно формируется, делимся наиболее интересными докладами: 🔹Портирование Android-приложений под HarmonyOS NEXT. Спикер расскажет про автоматизированный перенос с сохранением архитектуры: от преобразования Kotlin-кода в ArkTS до трансляции Jetpack Compose в ArkUI. 🔹AI-driven T-shape. Разбор реального опыта команды о том, как искусственный интеллект помогает осваивать соседние платформы и бэкенд, ускоряя развитие инженеров и уменьшая time-to-market. 🔹Liquid Glass своими руками на Metal. Анатомия визуального эффекта из iOS 26 и его воссоздание для более старых версий с разбором интеграции в кодовую базу Telegram. 📣 Встречаемся 21–22 октября (Санкт-Петербург + online). Подробнее о программе и билетах — на сайте.

React Native в 2026 году: New Architecture, нативный код и AI в реальном проекте React Native по-прежнему часто описывают фор
React Native в 2026 году: New Architecture, нативный код и AI в реальном проекте React Native по-прежнему часто описывают формулой «один код для iOS и Android». В 2026 году она звучит слишком просто. Современное приложение на React Native — это общий продуктовый слой на TypeScript, нативный интерфейс, Hermes, Fabric, JSI, фоновые процессы, platform-specific код и довольно много решений о том, где именно должна выполняться каждая задача. Мы столкнулись с этим в Synchra.24 — мобильном приложении для линейных и распределённых команд. В проекте больше тысячи TS/TSX-файлов и свыше ста экранов, но рядом с ними живут Kotlin и Swift: геопозиция, push-уведомления, биометрия, системные виджеты и работа с медиа. Это не история о функциях нашего продукта и не попытка его рекламировать. Это разбор того, чем на практике стала разработка на React Native к 2026 году — и какую часть этой работы действительно можно поручить нейросетям. Статья: https://habr.com/ru/articles/1072522/ Платформа: кроссплатформа 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

📺 Видео и подкасты за неделю • (iOS En) SwiftUI in motion • (iOS En) AllTrails: Momentum without a rewrite • (iOS En) Flow d
📺 Видео и подкасты за неделю(iOS En) SwiftUI in motion(iOS En) AllTrails: Momentum without a rewrite(iOS En) Flow data through SwiftUI(iOS En) SwiftUI essentials(iOS En) A guide to layout in SwiftUI(iOS En) Design with SwiftUI(iOS En) Reorderable Modifier | Multi-Item Reordering | Section Reordering | SwiftUI(iOS En) Prominent Action Custom Tab Bar | SwiftUI (iOS En) Device Hub Explained - What Every Apple Developer Should Know(And Ru) Android Runtime под капотом(And En) The Multi-Agent Code Review Workflow For My Production Android Apps(And En) Vertical vs. Horizontal Slicing - The ONLY Right Way to Split Down Your App(And En) A tale of the Gradle DSLs(Crs En) SwiftPM support for Kotlin Multiplatform(Crs En) All platforms are unique but some platforms are more unique than others(Crs En) KMP at Scale in Kuaishou Super App for over 700M users(Dev Ru) Выпрямляем руки агентов: как сделать MCP удобными и действительно полезными(Dsg Ru) DesignOps: операционная система команды, которая работает на вас(Dsg Ru) Дизайн для программиста: пробую Claude Design(Dev En) Build a live translation broadcast app with the Gemini Live API and LiveKit(Dev En) Go Get It, with Kotlin Lessons Learned Evolving Uber’s Java Backend Прошлогодние видео: • (Dev Ru) Генерация UI Kit с использованием ИИ(Dev Ru) Надежность мобильных приложений: что это и как достичь(Dev Ru) Задача на логику из собеседования в Amazon (+ все собеседования) 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Boxlore - умный плеер подкастов для Android Большинство приложений для подкастов обращаются к открытому API, выполняют буквал
Boxlore - умный плеер подкастов для Android Большинство приложений для подкастов обращаются к открытому API, выполняют буквальный поиск по словам, показывают чарты Apple — и на этом всё. Ошибитесь в написании названия шоу — и ничего не найдёте. Попробуйте искать по теме — получите совпадения по заголовкам, которые вообще не отражают смысл запроса. А когда вы уже внутри приложения, главный экран редко ощущается как ваш: одинаковые подборки для всех и почти никакого обучения на основе того, что вы действительно слушаете. Boxlore создан именно вокруг этих двух проблем. Он помогает найти шоу даже при неточном написании названия или искать подкасты и отдельные эпизоды по смыслу, когда вы примерно знаете, что хотите, но не можете сформулировать точный запрос. А по мере прослушивания приложение становится персональнее: Home, Explore, очередь и загрузки переупорядочиваются прямо на устройстве с учётом ваших предпочтений. Появляются подборки по времени суток, Because You Like, персональные рекомендации For You, а также карточки для случайных открытий — когда хочется найти что-то такое, что вы сами никогда не стали бы искать. Данные о ваших предпочтениях остаются на телефоне. Можно слушать потоково или скачивать выпуски для офлайн-доступа, полноценно управлять очередью и обходиться без рекламы и платных ограничений там, где это действительно важно. Умный каталог охватывает популярные подкасты из чартов и ежедневно расширяется — пока в нём есть не абсолютно все шоу в мире. Но даже за пределами этого индекса Boxlore продолжает работать как обычный клиент для подкастов: можно подписываться, слушать, скачивать выпуски и импортировать OPML. Boxlore на GitHub: https://github.com/boxcreate/boxlore Платформа: Android ⭐️: 59 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Как Tinder сократил холодные старты на 47%, благодаря R8 Configuration Analyzer Используя R8 Configuration Analyzer, Tinder с
Как Tinder сократил холодные старты на 47%, благодаря R8 Configuration Analyzer Используя R8 Configuration Analyzer, Tinder смог найти и удалить непреднамеренные блокировки оптимизации. Результаты оказались заметными сразу:  холодные запуски сократились на 47%, размер загружаемого приложения уменьшился на 28,98% — до 61,5 МБ, а число заметных пользователю ANR снизилось на 28%. Статья: https://apptractor.ru/info/articles/kak-tinder-sokratil-holodnye-starty-na-47-blagodarya-r8-configuration-analyzer.html Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Подготовьте ваше приложение к более широким ограничениям объема памяти Отличный пользовательский опыт — одна из ключевых целе
Подготовьте ваше приложение к более широким ограничениям объема памяти Отличный пользовательский опыт — одна из ключевых целей Android, а для этого устройства должны оставаться быстрыми, отзывчивыми и надёжными. Именно поэтому оптимизация памяти становится важнее, чем когда-либо. На фоне роста цен на память новые устройства сохраняют прежний объём оперативной памяти или даже получают меньше, однако пользователи по-прежнему ожидают такой же плавной и производительной работы приложений. В Android 17 ввели ограничения памяти для отдельных приложений, начав с устройств Pixel. Их задача — защитить общую отзывчивость системы от приложений, которые потребляют слишком много памяти и вызывают замедление всего устройства. В течение следующего года всё больше производителей начнут использовать ограничения памяти Android для приложений на устройствах с объёмом ОЗУ от 4 ГБ до 16 ГБ и более. Если приложение превысит эти лимиты, система замедлит его работу, а затем может завершить процесс. Поэтому уменьшение объёма потребляемой приложением памяти становится критически важным: это помогает избежать ограничения производительности со стороны ОС и сохранить плавный пользовательский опыт. В этой статье разберём, как эти ограничения работают внутри системы, как измерять потребление памяти с помощью новых метрик Android vitals и какие конкретные действия помогут оптимизировать приложение или игру. Статья: https://apptractor.ru/info/articles/podgotovte-vashe-prilozhenie-k-bolee-shirokim-ogranicheniyam-obema-pamyati.html Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Stitch - инъекция зависимостей для SwiftUI Stitch — это лёгкая библиотека внедрения зависимостей (DI), вдохновлённая SwiftUI
Stitch - инъекция зависимостей для SwiftUI Stitch — это лёгкая библиотека внедрения зависимостей (DI), вдохновлённая SwiftUI и обеспечивающая безопасность на этапе компиляции. Она позволяет описывать карту зависимостей без необходимости использовать инструменты генерации кода. Безопасность Stitch на этапе компиляции даёт уверенность в корректности настройки: если проект компилируется, значит зависимости сконфигурированы правильно. В отличие от типичных контейнеров зависимостей, здесь не возникает ошибок в рантайме из-за того, что какая-либо зависимость не была зарегистрирована. Для описания карты зависимостей Stitch использует новые макросы Swift 5.9+, что делает API более удобным, а для получения объектов из карты предоставляет соответствующие реализации @propertyWrapper. Stitch предлагает следующие ключевые возможности: 1. Интеграция в жизненный цикл SwiftUI и привычный для SwiftUI стиль работы — использовать Stitch можно так же, как другие оболочки свойств SwiftUI. 2. Внедрение зависимостей через протоколы внутри представлений SwiftUI. Библиотека расширяет возможности ObservableObject, позволяя работать с протокольными типами и при этом корректно обновлять представления. 3. Доступ к Combine-издателям для свойств протокольных типов без необходимости добавлять в протокол переменные вида Publisher<Object, Never> и вручную проксировать их в реализации. Stitch на GitHubhttps://github.com/entrhq/stitch Платформа: iOS ⭐️: 19   👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Senior инженеры замолчали, и вот почему это плохой знак Речь не о том, что у этих инженеров закончились мнения. Мнений у них
Senior инженеры замолчали, и вот почему это плохой знак Речь не о том, что у этих инженеров закончились мнения. Мнений у них по-прежнему хватает. Изменилось другое — куда эти мнения теперь направляются. Стало меньше замечаний на дизайн-ревью. Меньше возражений в архитектурных обсуждениях. Меньше тех моментов, когда человек с десятью годами производственного опыта говорит: подождите, я уже видел нечто подобное, и вот чем всё закончилось. Встречи по-прежнему проходят. Решения по-прежнему принимаются. Но один конкретный вид трения стал почти незаметным. А это трение выполняло важную функцию. Статья: https://apptractor.ru/info/articles/senior-inzhenery-zamolchali-i-vot-pochemu-eto-plohoy-znak.html Платформа: разработка 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

ZeroDroid - инструменты для анализа сетей, сигналов и безопасности ZeroDroid — открытое Android-приложение, которое превращае
ZeroDroid - инструменты для анализа сетей, сигналов и безопасности ZeroDroid — открытое Android-приложение, которое превращает смартфон в универсальный набор инструментов для анализа беспроводных сетей, радиосигналов, датчиков и безопасности. Проект объединяет 29 инструментов в пяти категориях: Wireless, RF & Signals, Sensors, Network и Security. Для работы используются аппаратные возможности самого телефона — Wi-Fi, Bluetooth и BLE, NFC, GPS, сотовый модем, магнитометр, барометр, микрофон, USB, UWB и ИК-порт, если они присутствуют в конкретном устройстве. Среди наиболее интересных функций — анализатор Wi-Fi, BLE-сканер с просмотром GATT, инструменты NFC, Wi-Fi Direct и Wi-Fi Aware, анализ ультразвукового диапазона 18–24 кГц, работа с внешними SDR-приёмниками через USB OTG и мониторинг датчиков смартфона. Есть также GPS-трекер с информацией о GNSS-спутниках и записью NMEA, EMF Mapper на основе магнитометра, инспектор USB-устройств и анализатор сотовых вышек. ZeroDroid написан на Kotlin с использованием Jetpack Compose и Material 3. Архитектура построена вокруг MVVM, StateFlow и Hilt, для локального хранения используется Room, для камеры — CameraX, а для распознавания QR-кодов — ML Kit и ZXing. Минимальная поддерживаемая версия — Android 8.0, хотя для полноценной работы современных Bluetooth и Wi-Fi API автор рекомендует более новые версии Android. Не все возможности доступны на каждом смартфоне: например, UWB, ИК-передатчик или барометр зависят от конкретного аппаратного оснащения. ZeroDroid на GitHub: https://github.com/theabhishekchandra/ZeroDroid Платформа: Android ⭐️: 22 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Android Skills — что выпустил Google и почему большинство разработчиков используют навыки неправильно Вы, скорее всего, уже в
Android Skills — что выпустил Google и почему большинство разработчиков используют навыки неправильно Вы, скорее всего, уже видели анонс. Android Skills запустили в апреле; реакция превзошла ожидания Google, а в начале августа команда Android Developer Relations опубликовала подробный материал, в котором объяснила философию проекта. Большинство разработчиков восприняли это как обычное описание релиза. На самом деле это набор архитектурных решений о том, как должна выглядеть Android-разработка с помощью ИИ. И если их не понять, можно в итоге получить конфигурацию агента, которая будет стоить дороже, работать медленнее и выдавать результаты хуже, чем если бы вы вообще ничего не настраивали. Статья: https://apptractor.ru/info/articles/android-skills-chto-vypustil-google-i-pochemu-bolshinstvo-razrabotchikov-ispolzuyut-navyki-nepravilno.html Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Архитектура Android переходит от Event-Driven UI к State-Driven UI Состояние — это то, за чем UI наблюдает постоянно. События
Архитектура Android переходит от Event-Driven UI к State-Driven UI Состояние — это то, за чем UI наблюдает постоянно. События или эффекты — это то, что UI должен обработать только один раз. Такой подход давно распространён в архитектурах MVVM и MVI. Однако если посмотреть на актуальные рекомендации Android-разработки по событиям UI, Google предлагает пересмотреть саму эту модель. Статья: https://apptractor.ru/info/articles/arhitektura-android-perehodit-ot-event-driven-ui-k-state-driven-ui.html Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

JS-инъекция для iOS-тестов: как подружить WKWebView и XCTest Мы пишем UI-тесты для Ozon Банка, и примерно каждый второй экран
JS-инъекция для iOS-тестов: как подружить WKWebView и XCTest Мы пишем UI-тесты для Ozon Банка, и примерно каждый второй экран — с WebView. Оферты, платёжные формы, веб-флоу — всё это рендерится внутри WKWebView. И здесь XCTest оказывается почти бессилен. Статья: https://habr.com/ru/companies/ozonbank/articles/1016596/ Платформа: iOS/тестирование 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность