AppFiles - Mobile Development
2.18K subscribers
3.29K photos
48 videos
14 files
4.3K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Вылечил лагающий телевизор Xiaomi за 10 минут: реклама, слежка и YouTube — без root и с откатом

На прошлой неделе на GitHub взлетел проект CleanYourTV: автор попросил ИИ-ассистента почистить телевизор родителей от рекламы и за четыре дня собрал 16 тысяч звёзд и статью в TechCrunch. Я открыл его списки — и не нашёл ни Яндекс ТВ, ни Салют ТВ, ни российских прошивок Xiaomi. Зато мой собственный Xiaomi на Android 9 лагал так, что меню открывалось через пару секунд после нажатия.

Я сделал ЧистыйТВ — скрипт для Windows, который по Wi-Fi находит телевизор, отключает рекламу и телеметрию по проверенным спискам, ставит YouTube без рекламы и откатывает всё одной командой. Ниже — что на самом деле крутится внутри «умного» телевизора, какие пакеты отключать нельзя ни в коем случае (некоторые превращают ТВ в кирпич до сброса) и на какие грабли я наступил при первом запуске.

Статья: https://habr.com/ru/articles/1097472/
Платформа: разработка

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Прежде чем работать с AIDL: разбираемся, как устроен IDL

Расскажу в двух статьях о языке определения интерфейсов (Interface Definition Language, IDL) и платформенном механизме, который построен поверх этой идеи в Android — Android Interface Definition Language (AIDL).

Начну рассказ с IDL — что это за язык и какую задачу он решает. Здесь будет только теоретическая информация. Примеры кода, внутренности Android и важные технические детали будут во второй статье.

Статья: https://habr.com/ru/companies/vk/articles/1096294/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
ChaosBank — 131 переключаемый баг для тренировки мобильного тестирования

Оба проекта под MIT. По функциональности это небольшой необанк с брокером акций и крипты, примерно в духе Revolut и Robinhood. Сейчас в нём 131 именованный дефект, и к каждому есть короткое письменное упражнение.

Начинал я это как стенд для собственных экспериментов, но, возможно, он пригодится и как тренировочная площадка тем, кто только начинает в мобильной разработке или мобильном QA. Ниже — как всё устроено, как я бы стал этим пользоваться и пара вещей, в которых я пока не уверен.

Статья: https://habr.com/ru/articles/1098668/
Платформа: тестирование

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Over The Air обновления Kotlin-кода для Android-приложений

Как мы сделали настоящие OTA-обновления для Kotlin-приложений: не только UI, но и бизнес-логика, функции и состояние — при этом основную тяжёлую работу выполняет сам рантайм Android.

Статья: https://apptractor.ru/info/articles/over-the-air-obnovleniya-kotlin-koda-dlya-android-prilozheniy.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Noodle - персональные ИИ-агенты

Noodle - персональные ИИ-агенты для вашего Mac, iPhone и iPad. Бесплатное ПО с открытым исходным кодом. Работает на базе уже имеющихся у вас ИИ-решений или подписок.

Поставьте перед агентом задачу или объедините нескольких агентов в группу для достижения общей цели. У каждого агента есть собственное рабочее пространство, предыстория и история действий; они работают в выбранной вами среде, используя вашу личную учетную запись. Доступные варианты включают: Codex, Claude Code, FX, Grok Build, Muse Code, OpenCode v2, Antigravity, а также Apple Intelligence (с выполнением вычислений непосредственно на устройстве).

Noodle на GitHub: https://github.com/pdparchitect/noodle
Платформа: iOS
⭐️: 227

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Личный опыт публикации в магазинах приложений в России в 2026 году

У нас сейчас работают приложения в RuStore, Google Play, App Store и Huawei AppGallery. Мы неудачно пробовали разместиться в Samsung Galaxy Store. Эта статья про наш личный опыт.

Статья: https://habr.com/ru/articles/1099484/
Платформа: разработка

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Как один UI‑баг заставил меня разбираться с графом зависимостей целого приложения

Есть такая категория задач, которые поначалу выглядят настолько безобидно, что ты даже не закладываешь на них много времени. Ну не обновился какой‑то элемент интерфейса после авторизации, бывает. Скорее всего, где‑нибудь потерялось событие, не обновилось состояние или кто‑то забыл вызвать нужный метод. Открываешь проект, ставишь пару брейкпоинтов и рассчитываешь довольно быстро во всём разобраться.

Примерно с таким настроением я и взялся за очередной UI‑баг, а спустя какое‑то время обнаружил себя уже совсем не там, где планировал. Вместо экрана, ради которого всё затевалось, передо мной были несколько репозиториев, менеджеры, сервисы, фабрики, DI‑контейнеры и довольно запутанная цепочка создания объектов. Причём чем дальше я по ней продвигался, тем меньше понимал, почему вообще что‑то не работает, потому что каждый отдельный компонент выглядел совершенно исправным.

Статья: https://habr.com/ru/articles/1099266/
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Я вам сборку принёс, но я вам ее не отдам: как установить тестовое приложение на iOS

Ручные проверки, поиск логов, разбор крешей, автотесты — с чего бы ни начиналась работа тестировщика, первым делом приложение нужно установить на устройство. Звучит как самая простая часть работы, правда?

На Android так и есть: скачал APK, разрешил установку из неизвестных источников — готово. С iOS такой номер не прокатит. Во многих компаниях в качестве сервиса для распространения сборок используется Firebase AppDistribution. В связи с этим часто возникает вопрос от мобильных QA, у которых мало опыта — «Почему вместо кнопки „Скачать“ отображается „Зарегистрировать устройство“? Почти все сложности с установкой объясняются одним механизмом — подписью приложения. Если понять, как она устроена, то любой способ установки перестает быть набором инструкций. С подписи и начнем разбираться в способах установить тестовую сборку на iPhone.

Статья: https://habr.com/ru/articles/1099592/
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Compose State Monitor - лог рекомпозиций

Compose State Monitor позволяет отслеживать причины повторного выполнения (рекомпозиции) @Composable-функций. Достаточно пометить функцию аннотацией @ComposableMonitor, и специальный плагин компилятора обеспечит вывод информации о её параметрах и локальных переменных состояния (State) при каждом вызове. Если какой-либо из этих элементов изменится, в логах появится запись с указанием его имени, а также старого и нового значений.

Работает на всех платформах, поддерживаемых Compose Multiplatform: Android, десктоп (JVM), iOS, wasmJs и js.
MainScreen recomposed because
`text` changed from `haha!` to `haha! count = 1`,
CounterLabel recomposed because
`count` changed from `0` to `1`,

Логи выводятся с тегом ComposeMonitorInspector: на Android используется Log.d (logcat), а на остальных платформах — println.

Compose State Monitor на GitHub: https://github.com/hellsong/ComposeStateMonitor
Платформа: Android
⭐️: 10

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
От 798 до 16 нс: как оптимизация debounce привела меня в Swift Runtime

Я прочитал статью Side Effect про debounce на Swift Concurrency и решил проверить, какой прирост производительности дает предложенный там подход. Идея простая: вместо того чтобы создавать новую Task на каждое входящее значение, можно использовать одну и ту же Task для всех событий и продлевать время ожидания.

В моем тесте такая замена сократила среднее время выполнения с 798 до 216 нс. Уже хороший результат, но оставалось непонятно, на что уходят эти 216 нс. В большинстве вызовов Task больше не создается: нужно получить текущее время, сохранить новое значение и пересчитать deadline (момент окончания ожидания).

В итоге я дошел до 16 нс. По пути пришлось разобраться, что происходит при выполнении этих нескольких строк Swift‑кода: как runtime работает с типами, что компилятор может оптимизировать и почему расположение блокировки в памяти влияет на результат. В статье я покажу, как проверял свои гипотезы и что обнаружил в экспериментах. Надеюсь, этот опыт пригодится тем, кто хочет разобраться в производительности своего Swift‑кода.

Статья: https://habr.com/ru/articles/1099306/
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Пропуск вшитых интеграций в TikTok на Android: анализ TTVideoEngine, ReVanced-патч и k-анонимность

В коротких видео формат рекламы давно сместился от официальных промо-постов к прямым интеграциям: авторы монтируют вставки (рулетки скинов CS:GO, платформы кейсов, телеграм-каналы) прямо в середину ролика.

Для YouTube эту проблему решает SponsorBlock. Мне стало интересно, насколько реально перенести подобную механику в Android-клиент TikTok. В процессе пришлось столкнуться с проприетарным плеером ByteDance, обфускацией байт-кода, оптимизацией вызовов к плееру и вопросами приватности запросов к базе таймкодов.

В этой статье описываю техническую сторону Proof of Concept: как устроен плеер TikTok, как стабильно перехватывать его методы через ReVanced и как организовать базу меток без слежки за пользователями.

Статья: https://habr.com/ru/articles/1100084/
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Sill - любое окно с Mac на iPhone или iPad

Приложение Sill позволяет отображать окно с вашего Mac (или весь рабочий стол целиком) на экране iPhone или iPad. Вы можете управлять им с помощью сенсорного ввода, трекпада, клавиатуры или стилуса Apple Pencil. Sill для Mac захватывает изображение окна, кодирует его в видеоформат HEVC и передает в приложение Sill на вашем устройстве. Все ваши действия — касания, клики, прокрутка или нажатия клавиш — передаются обратно на Mac. Устройства могут подключаться друг к другу через общую сеть, по USB-кабелю, посредством прямого беспроводного соединения (Direct Wireless Connection) — если общая сеть отсутствует, — либо через вашу собственную VPN-сеть (например, Tailscale) для удаленного доступа. При этом не требуется создание учетной записи, а данные не проходят через сторонние серверы.

Sill на GitHub: https://github.com/Saffsanity/sill
Платформа: iOS
⭐️: 4.2K

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Android Studio Rabbit 2: больше ИИ (агентов)

Google выпустил Android Studio Rabbit 2 в стабильном канале, и главное изменение — Android Studio теперь фактически превращается в универсальную оболочку для разных кодинг агентов, а не только для Gemini.

Статья: https://apptractor.ru/info/articles/android-studio-rabbit-2-bolshe-ii-agentov.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
KassiOS: слой в стиле Kaspresso поверх XCUITest, проверенный на сломанном банке

Я пришёл в нативное iOS-тестирование из Appium, и простой логин на XCUITest раз за разом обрастал waitForExistence, ретраями и самописными хелперами. Так появился KassiOS — слой в стиле Kaspresso поверх XCUITest: тап с общим бюджетом ожидания, который не повторяется после отправки, перечитывание поля после ввода, понятные сообщения о падениях, параметризованные тесты.

Чтобы проверить, ловят ли тесты баги, я прогнал их против ChaosBank — приложения с включаемыми дефектами — и написал утилиту, которая включает дефекты по одному и показывает, какой из них прошёл незамеченным. Рассказываю, что из этого вышло, какие баги нашлись в самом фреймворке и кому он подойдёт, а кому нет.

Статья: https://habr.com/ru/articles/1100796/
Платформа: iOS/тестирование

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Доставляем 584 Мб модель Gemma через Google Play

Это новая библиотека Google, пока находящаяся в beta, которая позволяет приложениям загружать ИИ-модели во время установки, сразу после неё или по запросу. Она построена поверх Play Asset Delivery, где ресурсы загружаются только тогда, когда действительно нужны. Например, приложение с обоями может поставлять маленькие превью, а полноразмерные изображения скачивать только тогда, когда пользователь открывает нужную категорию или хочет установить конкретные обои.

Статья: https://apptractor.ru/info/articles/dostavlyaem-584-mb-model-gemma-cherez-google-play.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
671258351-002719e9-7886-4bf6-b982-a2e65f1c7589.webm
3.4 MB
CmpDevicePreview - предварительный просмотр Compose Multiplatform в веб

CmpDevicePreview позволяет отображать ваше приложение внутри рамки, имитирующей устройство. В состав библиотеки входит панель управления, с помощью которой можно менять тип устройства, ориентацию экрана, включать темную тему, настраивать размер текста и элементов интерфейса, направление верстки, а также выбирать язык и состояние клавиатуры. Панель можно адаптировать под свои нужды: менять расположение элементов или добавлять собственные настройки. Библиотека работает на Android, iOS, macOS (Apple Silicon), десктопных платформах (JVM), а также в средах JS и Wasm, что позволяет, например, разместить веб-демоверсию вашего приложения в сети.

CmpDevicePreview на GitHub: https://github.com/Apadmi-Engineering/CMPDevicePreview
Платформа: Android/кроссплатформа
⭐️: 38

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
📺 Видео и подкасты за неделю

• (iOS En) Boost your app’s speed and efficiency - Meet with Apple
• (iOS En) Bring Touch to your Mac app
• (iOS En) Bring Live Activities to Mac
• (iOS En) Design for Touch on Mac
• (iOS En) Apple's Birthday Card Fireworks Animation Using SwiftUI
• (iOS En) iPhone Duo Changes SwiftUI Layouts: Here’s How to Adapt Your App
• (iOS En) Compact Morphing Photo Picker using SwiftUI
• (And En) Trace me if you can: Automated instrumentation and field profiling
• (And En) Building audio-first experiences for intelligent eyewear with Gemini Nano 4
• (And En) Agentic engineering with Claude Code and Android CLI
• (And En) Optimize media playback and maximize reach with Jetpack Media3 APIs
• (And En) App security in the agentic era
• (And En) Elevating camera experiences across devices with CameraX and on-device intelligence
• (And En) The car is your canvas: Unlocking Android development for the road
• (And En) Declarative, agent-ready Android builds with Lightbuild
• (And En) Graphics features in Jetpack Compose that can elevate your app
• (And En) Migrating two decades of the Google Play app to Jetpack Compose
• (And En) Mastering on-device intelligence with ML Kit and LiteRT in Google Play services
• (And En) Extend your app to Gemini and Search with the Connected Apps Platform
• (And En) Scale your app for every screen with Compose
• (And En) Build optimized Android Apps with Firebase AI Logic and Gemini Nano 4
• (And En) Why You MUST Stick to Mutation Testing (Never Have Bad AI-Written Tests Anymore)
• (And En) Inside Kotlin's Language Design
• (And En) Can Kotlin Handle Low-Latency Audio?
• (AXR En) XR is for everyone: Designing accessible spatial experiences
• (AXR En) Build world anchored experiences for wired XR glasses
• (AXR En) Architecting Spatial Content on Android XR with Unity
• (AXR En) Elevate immersive experiences with 3D Engines in Jetpack Compose for XR
• (Crs Ru) Мониторим здоровье Gradle-сборки KMP проекта
• (Dev Ru) CI/CD не работает, и я знаю почему: карта точек отказа мобильного конвейера
• (Dev Ru) Это не я, это мой агент
• (Dev Ru) Вайбкодинг и будущее программистов — ИИ агенты, Кроссплатформа, Вход в IT
• (Dev En) Beginner's Guide to Integrating On-Device AI Agents In Your Mobile App (Android + iOS)

Прошлогодние видео:

• (And Ru) ART Memory Management
• (And Ru) Kotlin и контекстно-ориентированное мышление
• (And Ru) VK Звонки в лесу: звоним в плохих сетях
• (Dev Ru) Как вас взламывают через Open Source — DevSecOps и безопасная разработка

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Начинаем работать с Lightbuild

Google начал переписывать ещё одну фундаментальную часть Android-разработки под ИИ-агентов. Появился Lightbuild — экспериментальная система сборки Android-проектов, где конфигурация описывается обычным YAML, а сборка управляется простым CLI. Новый проект можно создать прямо из Android Studio Canary или командой, а дальше агенту достаточно примерно такого набора:

lightbuild build app
lightbuild test app-core
android run --apks=app/build/app-debug.apk

Статья: https://developer.android.com/tools/agents/lightbuild/setup
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
OnboardingKit - онбординг на всех платформах Apple

OnboardingKit — это SDK для Swift и SwiftUI, позволяющий создавать гибкие процессы онбординга на всех платформах Apple.

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

Автор архивирует open-source OnboardingKit и переводит проект на закрытую модель с коммерческой лицензией. Это первый из нескольких его проектов, которые пойдут тем же путём. Главные причины две. Во-первых, стало меньше обратной связи от сообщества: меньше issues, pull requests и обсуждений, из-за чего поддержка 20+ open-source проектов всё чаще ощущается как работа в пустоту. Во-вторых, автору не нравится, что годы документации, тестов и архитектурных решений автоматически становятся материалом для обучения ИИ, который затем помогает другим воспроизводить похожие продукты без его участия. Новая схема такая: проекты будут публиковаться через его компанию Kankoda, с бесплатным и недорогим платным тарифом. Платная лицензия будет открывать дополнительные возможности, а лицензирование будет работать через собственный LicenseKit. Старые open-source версии никуда не исчезнут: они останутся публичными архивами под MIT-лицензией. Их можно продолжать использовать или форкнуть, но обновлений больше не будет.

OnboardingKit на GitHub: https://github.com/kankoda/onboardingkit
Платформа: iOS
⭐️: 1

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Как я без опыта разработки написал первые автотесты на Kotlin за месяц

Сегодня я часто встречаю тестировщиков, которые работают исключительно вручную и пока не представляют, как писать автотесты. Раньше я был таким же. Но времена меняются — нейросети проникают во все сферы, и подход «я только мануальщик» постепенно устаревает. Если ты QA и до сих пор не приступил к автоматизации, самое время задуматься об этом, пока за тебя не задумались другие. Особенно актуально это для тех, кто работает в Сбере: у тебя под рукой те же самые инструменты, которыми пользуюсь я. Банк их одобряет и активно развивает, чтобы ускорить и улучшить качество работы. Надеюсь, мой опыт вдохновит кого-то попробовать сделать то же самое.

Статья: https://habr.com/ru/companies/domclick/articles/1092854/
Платформа: Android/тестирование

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1