AppFiles - Mobile Development
2.18K subscribers
3.29K photos
48 videos
14 files
4.31K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Jetpack Compose 1.12: как я наконец отказался от «ненастоящих» градиентов

Я не могу сосчитать, сколько раз дизайнер присылал мне красивый мягкий градиент, а я отвечал тремя наложенными radialGradient, blur и молитвой. На эмуляторе всё выглядело отлично; на настоящем OLED-экране — блекло. Compose 1.12 решает обе проблемы.

Статья: https://apptractor.ru/info/articles/jetpack-compose-1-12-kak-ya-nakonets-otkazalsya-ot-nenastoyaschih-gradientov.html
Платформа: Android

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

HackiOS загружает открытое ядро Apple XNU (xnu-8796.121.2, ядро iOS 16.5) на аппаратном обеспечении Android-смартфона и запускает поверх него неизменённое пользовательское пространство iOS 16.5: launchd → backboardd → SpringBoard → приложения. Это стало возможным благодаря собственному EFI-загрузчику, собственным заменам закрытых драйверов Apple, порту UEFI и Linux-драйверу Wi-Fi, работающему через слой совместимости.

Система работает в двух вариантах:

• POCO X5 Pro 5G (redwood, Snapdragon 778G) — ничего не прошивается: UEFI запускается через fastboot boot, вся система работает из оперативной памяти, а после перезагрузки телефон возвращается к Android;
• QEMU (virt, aarch64) — то же самое можно запустить на любом Linux-компьютере, телефон для этого не нужен.

Пока не работают сотовая связь, Bluetooth, зарядка под собственным ядром, запись видео и Live Photo, вход в Apple ID и содержимое App Store. Причина последних ограничений связана в том числе с отсутствием Secure Enclave и тем, что FairPlay daemon завершается.

Главное техническое ограничение сейчас — Metal для приложений. Работа уже идёт: 293 из 456 системных шейдеров удалось запустить на Adreno. Поэтому HackiOS уже выглядит как достаточно функциональная iOS-среда на Android-железе, но до полноценной замены обычного iPhone ей пока далеко.

HackiOS на GitHub: https://github.com/oosexgang/hackios-xnu-kernel
Платформа: iOS/Android
⭐️: 654

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

• (iOS Ru) Metal без магии — когда GPU ускоряет, а не мешает
• (iOS Ru) Как легально опубликоваться вне App Store
• (iOS Ru) Как и зачем писать игровой движок на Swift
• (iOS En) Instagram's Swipeable Feed-to-Camera Interaction Using SwiftUI
• (iOS En) Your iPhone App Needs This Before Supporting iPhone Duo
• (And Ru) Явное лучше неявного, или Shift left в Android-сборке
• (And Ru) Как читать метрику памяти и искать прожорливые экраны
• (Dev Ru) Как подружить мобильное приложение с JS и прокачать свой SDUI
• (Dev Ru) Разделяй и властвуй: распил мобильного приложения на микросервисы
• (Dev Ru) Rust в мобильной разработке
• (Dev Ru) Насколько опасен ИИ для кибербезопасности
• (Dev En) How this skill helps me to understand AI code
• (Dev En) The Tech Market Changed. Here's How to Survive It.
• (Mrk Ru) Хэллоуин: ASO и монетизация мобильных игр

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

• (And Ru) Как обеспечить стабильную работу SDK для миллионов устройств
• (Crs Ru) Что ждёт Kotlin Multiplatform разработчика на собесе? (все собеседования)

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

Многие предприниматели стремятся разработать мобильное приложение для удобства доступа потребителей к его продукту/услуге, узнаваемости и, как следствие, для роста продаж.

Вместе с тем, не каждый предприниматель задумывается, что создаваемые результаты интеллектуальной деятельности (РИД): иконка, название приложения и/или его разделов, интерфейсы страниц (их композиционное, цветовое, шрифтовое решения), и конечно, функционал приложения — всё это потенциально можно превратить в интеллектуальную собственность. Как это сделать?

Прежде всего, любой РИД создается человеком — автором. В процессе создания приложения многие РИДы являются объектами авторского права.

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

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

Tellyscope - приложение очищает Android TV от лишних приложений, позволяет устанавливать программы, просматривать и передавать файлы. И всё это прямо со смартфона. Без root-прав и без компьютера.

Для работы Tellyscope необходим смартфон на базе Android 8.0 или новее, подключенный к той же сети Wi-Fi, что и телевизор, а также телевизор с активированными параметрами разработчика.

Tellyscope на GitHub: https://github.com/man15h/tellyscope
Платформа: Android
⭐️: 126

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN 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