AppFiles - Mobile Development
2.17K subscribers
3.27K photos
48 videos
13 files
4.28K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
AsoBeast - self-hosted ASO-инструмент для отслеживания ключевых слов в App Store и Google Play

AsoBeast — это инструмент для App Store Optimization (ASO) и отслеживания позиций по ключевым словам в Apple App Store и Google Play. Он импортирует страницу приложения, ежедневно отслеживает позиции по ключевым словам до 200-го места, следит за конкурентами, отзывами и метаданными, а затем превращает накопленную историю в приоритетную очередь задач по ASO. Этот репозиторий содержит бесплатную версию с открытым исходным кодом, которую можно запустить на собственном сервере.

Каждый запрос к магазину выполняется непосредственно на машине, где размещён AsoBeast, как обычный публичный поисковый запрос или запрос страницы, поэтому Apple и Google видят каждую отслеживаемую фразу так же, как любой другой поисковый запрос. Вам не нужно регистрироваться у стороннего ASO-провайдера, покупать API-ключ или передавать стороннему ASO-сервису информацию о том, какие ключевые слова вы отслеживаете. За исключением этих запросов к магазинам, ваши данные остаются внутри вашего развёртывания, если только вы явно не включите внешнюю интеграцию, например webhook-уведомления, электронную почту, помощь OpenAI, данные о популярности запросов из Apple Ads или обновления статуса магазинов.

AsoBeast на GitHub: https://github.com/AsoBeast/asobeast
Платформа: ASO
⭐️: 53

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Dari — инспектор взаимодействия WebView bridge для Android

Dari — это библиотека-инспектор для отладки взаимодействия через Android WebView bridge, вдохновлённая Chucker. Она перехватывает и отображает все сообщения WebView ↔️ App bridge в постоянном уведомлении и во встроенном интерфейсе приложения, не требуя изменений существующей логики бриджа.

Возможности:

• Перехват в реальном времени сообщений Web→App и App→Web
• Отслеживание трёх состояний: IN_PROGRESS, SUCCESS, ERROR
• Поддержка тёмной темы
• Жест встряхивания для открытия инспектора
• Фильтр по статусу, чтобы сосредоточиться на ошибках или незавершённых вызовах
• Экспорт перехваченных сообщений в JSON
• Опциональная инспекция Protocol Buffers с декодером, предоставляемым приложением
• No-op модуль (dari-noop) для release-сборок без дополнительных затрат во время выполнения
• Поддержка вызовов fire-and-forget для одностороннего взаимодействия через бридж
• Одинаковый публичный API для debug- и release-артефактов

Dari на GitHub: https://github.com/easyhooon/dari
Платформа: Android
⭐️: 35

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

В прошлой статье мы рассмотрели несколько базовых метрик. В этой части поговорим о менее очевидных, но не менее полезных критериях и способах измерения различных аспектов мобильной разработки. Тема не новая, однако получила новый импульс благодаря развитию и широкому внедрению искусственного интеллекта (ИИ).

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

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

• (iOS Ru) Анатомия LazyVStack. Проблемы, скрытые возможности, оптимизации
• (iOS Ru) Влияние температурного режима на UX в iOS-приложениях
• (iOS En) iPhone Duo Group Lab + iPhone Duo Group Lab
• (iOS En) Top 6 Swift Concurrency Interview Questions Explained
• (iOS En) Animated Launch Screen With OnBoarding View Using SwiftU
• (iOS En) AI is now really good at building iOS apps
• (iOS En) iPhone Duo Is Here - What Happens to Your Existing iOS
• (iOS En) SwiftUI Animated App Theme Switcher
• (And Ru) 1 байт вместо 32: анатомия ScatterMap
• (And Ru) 15 лет Kotlin: ретроспектива
• (And Ru) А вы можете сказать, что все-таки такое «корутина» в Kotlin?
• (And En) From Android to QuakeCon: What 90s Game Engines Teach Us About Extreme Optimization
• (Crs Ru) Как превратить абстрактную задачу в оптимизационную на примере KMP-движка коллажей
• (Crs Ru) Swift для Android и кроссплатформы. Разбираем на практике
• (Crs Ru) CMP на ОС Аврора: с нуля до альфы
• (Crs Ru) Пробуем Сompose-alpha для ОС Аврора
• (Crs Ru) Под капотом изолятов и Garbage Collector Dart VM
• (Crs Ru) KMP Contest Winners | KotlinConfersations 2026
• (Dev Ru) Метрики плавности мобильных приложений
• (Dev Ru) Первый бескомпромиссный SDUI
• (Dev Ru) Разработчик вышел из кода
• (Dev Ru) Вуз в эпоху ИИ — развод на 4 года?
• (Dev Ru) Koog — твой друг: специализированный агент на Kotlin
• (Dev En) Line-by-line review of AI code is a mistake
• (Dev En) I didn't know I needed this new AI model so badly
• (Dev En) Design Software Systems Like a Senior Engineer – Complete Course

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

• (And Ru) Семантический Gradle: публикуем артефакты со спокойствием и уверенностью
• (Dev Ru) Собеседование DS инженера в Авито: ML system design (все собеседования)

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

Нашей команде поставили задачу разработать мобильное приложение для iOS и Android. Нативных разработчиков на Swift и Kotlin в команде нет, зато половина хорошо знает Vue. Поэтому я как лид выбрал Vue и Capacitor — фреймворк, который упаковывает обычное веб‑приложение в нативную оболочку и даёт доступ к функциям телефона через JavaScript‑плагины.

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

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

Blueprint - небольшая CLI-утилита для iOS/macOS-разработки, которая автоматически превращает обычную иконку приложения в blueprint-версию для Debug-сборок, примерно в стиле иконки Xcode. Главная идея: чтобы тестовую/отладочную сборку на устройстве было сразу видно и не перепутать с продакшеном.

Она умеет работать как с новыми файлами Icon Composer .icon, так и с обычными AppIcon.appiconset. На выходе она создаёт отдельную иконку вроде AppIconDebug.icon или AppIconDebug.appiconset, после чего её можно назначить для Debug-конфигурации через ASSETCATALOG_COMPILER_APPICON_NAME. Исходную иконку библиотека не перезаписывает. 

Blueprint на GitHub: https://github.com/MustafaNatur/blueprint
Платформа: iOS
⭐️: 114

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

Структурирование SwiftUI-приложения для меня всегда сводилось к одним и тем же целям: хорошо организованный код, компоненты, каждый из которых выполняет одну задачу, и приложение, которое остаётся поддерживаемым по мере роста. Я хочу быстро находить нужные вещи, менять одну функцию, не ломая остальные, и использовать превью без зависимости от сервера.

Swift concurrency добавила ко всему этому ещё одну проблему, и довольно болезненную. Как только появляются сеть, кэширование или аутентификация, компилятор начинает жаловаться. Ошибки Sendable, ошибки изоляции main actor, предупреждения о гонках данных. Добавляешь где-нибудь @MainActor, и новая ошибка появляется уже в другом месте. В какой-то момент начинаешь задаваться вопросом: Swift concurrency вообще нормально работает со SwiftUI? И если да, то как нужно структурировать приложение, чтобы они не конфликтовали друг с другом?

Работает. В этой статье я покажу, как структурирую свои SwiftUI-приложения, чтобы они оставались организованными и удобными в поддержке, а SwiftUI и Swift concurrency работали вместе, а не друг против друга.

Статья: https://apptractor.ru/info/articles/kak-ya-proektiruyu-swiftui-prilozheniya-s-swift-concurrency.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Mac.apk - запуск Android-приложений нативно на Apple Silicon

Mac.apk запускает Android-приложения непосредственно на Apple Silicon. Приложения стартуют как обычные процессы macOS, отрисовывают графику через GPU Mac и выполняются на CPU с нативной скоростью. Они появляются в Dock, получают собственные окна с кнопкой «Назад» рядом со стандартными кнопками управления окном, могут менять размер и ориентацию как обычные окна macOS и автоматически переключаются между светлой и тёмной темой вместе с Mac. Android TV-приложениями можно управлять с клавиатуры, а игровые лаунчеры способны запускать другие установленные приложения.

Здесь нет ни эмулятора, ни виртуальной машины. В фоне не загружается Android, под системой не работает ядро Linux, а инструкции не интерпретируются одна за другой. Mac.apk напрямую реализует среду выполнения Android-приложений поверх macOS.

Mac.apk на GitHub: https://github.com/kksimp/Mac.apk
Платформа: Android
⭐️: 901

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

Сегодня мы с вами обсудим наработки от Apple. Какую технологию они представили еще в 2025 году, что изменилось со времени, как Apple выпустили официальный релиз Swift SDK для Android. А также мы посмотрим, как написать настоящее приложение, где вся бизнес-логика живёт на Swift, а UI на Compose.

Статья в двух частях: первая и вторая
Платформа: кроссплатформа

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Гравицапа для GPU: OpenGL ES на Kotlin DSL на примере 3D‑«Жизни» Конвея

Наконец‑то я закончил работу над новым большим блоком RedByteFX, тем самым, который в планах звучал скромно: «а ещё было бы неплохо OpenGL ES». «Неплохо» растянулось на много вечеров и вылилось в версию 1.2.0, которая уже лежит в Maven Central. Если коротко: теперь на Kotlin DSL можно писать не только эффекты для Compose, но и полноценную 3D‑графику и вычисления на GPU. Если подробно, то читайте дальше: я покажу всё на живом примере и сравню с тем, как пришлось бы писать без библиотеки.

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

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

Проблемы с производительностью SwiftUI часто сводятся к двум вещам: представления либо перерисовываются слишком часто, либо их body выполняется слишком долго. Прежде чем что-то исправлять, нужно понять, какие именно представления виноваты и что вызывает их обновление. Xcode Instruments способен показать это довольно точно — если знать, где смотреть.

В этой статье я покажу, как находить перерисовки SwiftUI и измерять их стоимость в Xcode Instruments. Мы запишем трассировку с шаблоном SwiftUI, изучим дорожку SwiftUI и представления View Body Updates, чтобы увидеть, какое представление сколько раз обновляется, сколько занимает каждое обновление и что именно его вызвало. Если вы раньше пользовались Self._printChanges(), то Instruments — следующий шаг, когда нужно понять, сколько эти перерисовки реально стоят.

Статья: https://apptractor.ru/info/articles/proizvoditelnost-swiftui-kak-nahodit-pererisovki-v-xcode-instruments.html
Платформа: iOS

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

У iOS Simulator никогда не было настоящей камеры. AVCaptureDevice возвращает nil. Любое приложение, которое работает с камерой — сканеры QR-кодов, считыватели штрихкодов, захват документов, ML-конвейеры, AR-прототипы, видеозвонки, — либо подменяет работу камеры заглушкой, либо запускается только на физических устройствах, либо содержит ненадёжный запасной вариант вроде «использовать фото вместо камеры».

SimulatorCamera регистрирует виртуальную камеру на системном уровне macOS с помощью API Apple CMIOExtension. iOS Simulator в Xcode 16+ видит эту виртуальную камеру через стандартный AVFoundation. Ваш существующий код с AVCaptureSessionпросто работает. Никакой интеграции SDK. Никаких изменений в Info.plist. Никаких веток #if targetEnvironment(simulator).

Что вы получаете:

• Веб-камера Mac → iOS Simulator — существующее приложение получает кадры с частотой 30 FPS и разрешением 1280×720
• Видео как источник — можно использовать любой MP4 / MOV / HEVC, воспроизведение зацикливается без разрывов
• Статичное изображение как источник — выберите PNG / JPG, и оно станет видеопотоком камеры
• Генератор QR-кодов — программная генерация QR для тестирования сканеров
• Тестовый шаблон — встроенные цветные полосы / движущаяся полоса, всегда доступны
• CLI simcamctl — например, simcamctl set-source --qr "TOKEN" для CI и ИИ-агентов
• Никакого SDK — вашему iOS-приложению не нужно импортировать или линковать что-либо из этого проекта
• Физическое устройство не требуется — всё работает целиком внутри iOS Simulator
• Бесплатно, открытый исходный код, лицензия MIT — можно форкать, распространять, продавать, никаких отчислений

SimulatorCamera на GitHub: https://github.com/dautovri/SimulatorCamera
Платформа: iOS
⭐️: 59

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Как Grab сократил ANR на 32% и улучшил время запуска на 35% благодаря R8

Grab — ведущий суперапп Юго-Восточной Азии, который предлагает доставку, транспортные и финансовые услуги миллионам пользователей в восьми странах через одно приложение. За 10 лет кодовая база выросла до более чем 10 млн строк кода и сотен сторонних библиотек, а сборка использовала гибридную связку Bazel и Gradle. В итоге команда столкнулась с тремя растущими проблемами: высоким уровнем ошибок Application Not Responding (ANR), постоянно увеличивающимся размером приложения и постепенно ухудшающимся временем запуска. Включив оптимизацию R8, доработав keep rules и внедрив Baseline Profiles и Startup Profiles, Grab снизил воспринимаемый пользователями уровень ANR на 32%, уменьшил размер загрузки приложения примерно на 30% и ускорил запуск на 35%.

Статья: https://apptractor.ru/info/articles/kak-grab-sokratil-anr-na-32-i-uluchshil-vremya-zapuska-na-35-blagodarya-r8.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Sketchy - рисованные анимированные иллюстрации и empty states для Compose Multiplatform

Sketchy — это библиотека Kotlin Multiplatform с иллюстрациями в стиле набросков и линейной графики — тёплыми, «человечными» изображениями, которые хорошо подходят для онбординга и пустых состояний. Все они полностью рисуются через Canvas, изначально поддерживают анимацию и полностью настраиваются под тему вашего приложения. Библиотека работает на Android, iOS, desktop и web из одного source set commonMain.

Sketchy на GitHub: https://github.com/Ali0092/Sketchy
Платформа: Android/кроссплатформа
⭐️: 39

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
😱1
UIKit говорит, что интерфейс уже RTL. Почему тогда половина экрана осталась LTR?

Представьте: пользователь переключает язык приложения с английского на арабский. Интерфейс перестраивается, кнопки меняются местами, навигация переезжает на другую сторону. Вроде всё работает.

Но затем открываешь следующий экран и замечаешь, что стрелка Back смотрит не туда. Возвращаешься назад, открываешь форму, а текстовое поле ведёт себя странно при вводе латиницы. Ещё одно переключение языка, и часть интерфейса снова оказывается в LTR.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Прощай, project.pbxproj, здравствуй, JSON: крупнейшее изменение Xcode за 30 лет

Apple наконец заменила самый пугающий файл в каждом iOS-репозитории. Вот что изменилось, как перейти на новый формат и стоит ли это делать — с объяснениями для джунов, сеньоров и тимлидов.

Статья: https://apptractor.ru/info/articles/proschay-project-pbxproj-zdravstvuy-json-krupneyshee-izmenenie-xcode-za-30-let.html
Платформа: iOS

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