AppFiles - Mobile Development
2.16K subscribers
3.04K photos
41 videos
12 files
4K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Monkeyrun - хаос-тестирование Android и iOS приложений

Monkeyrun - готовый к использованию кроссплатформенный CLI для мобильного хаотического (обезьяньего) тестирования Android и iOS приложений. Легковесный, удобный для CI/CD, единый исполняемый файл — без Appium, без сложной настройки.

Запускайте хаотические тесты на основе жестов на уже работающих эмуляторах и симуляторах. Обнаруживайте сбои, регистрируйте каждое событие и генерируйте чистый HTML-отчет.

Фичи:

• CLI-first подход — devices, run, report, replay команды
• Нулевая настройка — работает с существующими устройствами ADB и загруженными симуляторами iOS
• 12 действий — касание, двойное касание, длительное нажатие, свайп, прокрутка, ввод текста, назад, масштабирование, «Домой», очистка текста, поворот
• Умные скриншоты — гибридный захват (интервал, обнаружение изменений пользовательского интерфейса, сбой) с асинхронным пулом рабочих процессов
• Обнаружение сбоев — Android (logcat) и iOS (поток логов simctl) с уровнями серьезности
• HTML-отчет — темная тема в стиле Playwright с временной шкалой, фильтрами, скриншотами, логами
• Воспроизведение — воспроизведение тестового запуска из записанных событий
• Единый исполняемый файл — нет зависимостей от среды выполнения, кросс-компиляция для macOS/Linux/Windows

Monkeyrun на GitHub: https://github.com/ABNclearroute/monkeyrun
Платформа: тестирование
⭐️: 6

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

(iOS En) Threads App Swipe Up To Dismiss Interaction Using SwiftUI
(iOS En) Backporting iOS 26 Concentric Rectangle for Older iOS Versions
(iOS En) Build a Searchable, Sortable SwiftUI List with an Index Scrubber
(iOS En) AppleTV App Animated Carousel Using SwiftUI
(And Ru) Почему камера в Telegram Android снимает плохо
(And En) 6 Ways to Make Your Gradle Builds Super Fast
(Dev Ru) Зачем и как вам контрибьютить в open source
(Dev Ru) Внутренняя кухня SRE и информационной безопасности
(Dev Ru) Senior Android за 12 тысяч, рабство в IT и угрозы — Е*аное IT #1
(Dev Ru) Маленькие языковые модели — Open source, локальный ИИ, SLM
(Dev Ru) Рынок труда для джунов в 2026 году
(Dev En) We Don't Need Designers Anymore
(Dev En) Software Testing Course – Playwright, E2E, and AI Agents

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

(iOS Ru) Дивный мир Swift Concurrency
(iOS Ru) Задачи с собеседований: Leetcode — Недостающее число
(iOS Ru) Как встроить в TextField индикатор загрузки и кастомную View
(And Ru) Кастомные лейауты в Jetpack Compose
(And Ru) Мапим данные из domain в ui модуль в многомодульном проекте
(Crs Ru) Рецепт приготовления кроссплатформенного мобильного видеоредактора
(Dev Ru) Собеседование по System Design: проектируем клон Авито

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

PoolChat — это пакет Swift, обеспечивающий полностью зашифрованный, бессерверный обмен групповыми и личными сообщениями по локальной mesh сети. Он работает поверх ConnectionPool и добавляет согласование ключей Curve25519, шифрование сообщений AES-256-GCM, проверку подлинности по принципу Trust-On-First-Use, расширенные типы сообщений (голосовые, опросы, реакции), зашифрованное сохранение истории и готовые представления SwiftUI. Не требуется подключение к интернету, серверов или учетных записей — только устройства, напрямую взаимодействующие друг с другом с использованием сквозного шифрования.

PoolChat на GitHub: https://github.com/Olib-AI/PoolChat
Платформа: iOS
⭐️: 11

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

Разработка сетевого слоя — одна из самых распространенных тем в проектировании систем (system design) на собеседованиях для опытных iOS-разработчиков. На первый взгляд, задача кажется простой. Каждый iOS-разработчик писал сетевые запросы с использованием URLSession, анализировал JSON-ответы и отображал данные в пользовательском интерфейсе.

Но собеседования проверяют не умение вызывать API, а понимание того, как построить многоразовую, тестируемую, поддерживаемую и масштабируемую сетевую систему.

Надежная сетевая архитектура разделяет задачи, корректно обрабатывает ошибки, поддерживает различные конечные точки и позволяет остальной части приложения взаимодействовать с API предсказуемым образом.

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

Статья: https://apptractor.ru/info/articles/networking-layer.html
Платформа: iOS/собеседования

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

Приходилось ли вам браться за задачу, из-за которой прошлый разработчик успел выгореть и сменить компанию? Что ж, мне удалось с такой столкнуться — c задачей обеспечения безопасного локального хранения файлов, которые пользователь загружает в приложение, например, общаясь с технической поддержкой в чате. Обо всех деталях и во всех подробностях я и расскажу в данной статье.

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

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

Сегодня хочу поговорить про особенности реализации MVVM. Не с практической, а с теоретической стороны. С практической стороны этот архитектурный шаблон давно уже изучен вдоль и поперёк. А вот теоретических исследований, особенно применимых к Swift (и в общем, и к SwiftUI в частности), не так уж и много. Давайте вместе попробуем закрыть этот пробел и обосновать с теоретической точки зрения те или иные вариации реализаций в нашей ежедневной работе. Мобильным разработчикам на ObjC, Java и Kotlin данное исследование и обсуждение тоже будет полезно.

Статья: https://habr.com/ru/companies/psb/articles/1010690/
Платформа: архитектура

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Tracey - "черный ящик" для Compose-приложения

Tracey - Kotlin Multiplatform SDK для Android и iOS для записи жестов, просмотров экранов, навигационных цепочек и сбоев — с последующим воспроизведением их в виде таймлайна.

Фичи:

• Запись жестов. Фиксирует тапы, скроллы, свайпы, долгие нажатия и щипки без какой-либо дополнительной инструментализации.
• Экраны и переходы. Автоматически отслеживает все навигационные события через tracey-navigation или позволяет логировать их вручную.
• События. Логируйте произвольные события из любого места приложения — обновления корзины, API-ошибки, feature flags и не только.
• Повтор сбоя. При падении сохраняет снепшот буфера событий и воспроизводит его при следующем запуске.
• Маскирование приватных данных. Помечайте чувствительные composable-элементы — они отображаются как обычно, но в захватах автоматически скрываются.
• Кастомные репортеры. Отправляйте записанные сессии в Logcat, Crashlytics, Sentry, Slack или в собственный бэкенд.

Tracey на GitHub: https://github.com/hi-manshu/tracey/
Платформа: Android/кроссплатформа
⭐️: 35

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

inDrive выпустили подробную статью о том, как они ускоряли запуск приложения. Ребята разобрали, почему это вообще важно, как скорость запуска влияет на метрики и прибыль компании, объяснили теорию и показали реальные кейсы с инструментами и результатами. Получился практически полноценный гайд по оптимизации запуска: с конкретными цифрами, подходами и выводами. Если вы работаете с производительностью и ускорением запуска приложений - статья именно для вас.

Статья: https://hackernoon.com/milliseconds-make-millions-how-and-why-to-speed-up-your-app-from-indrives-playbook 🇺🇸
Платформа: iOS

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

Compose Preview в Android Studio кажется магией: поставил @Preview — и UI уже рендерится в IDE. Но под капотом там довольно сложный пайплайн. @Preview — это не поведение, а просто метаданные, которые Studio считывает из байткода. Дальше IDE собирает synthetic XML, прокидывает его в ComposeViewAdapter, поднимает фейковый lifecycle, а сам composable вызывается через reflection с учётом скрытых параметров, которые добавляет Compose compiler.

Самое интересное — почему preview иногда “ломается”. В preview-среде есть только имитация Android runtime: например, lifecycle переводится сразу в RESUMED, но попытка запустить ActivityResult специально падает с ошибкой, потому что реальной Activity нет. Ещё статья хорошо показывает, откуда берётся LocalInspectionMode.current == true и как Studio потом связывает отрисованные пиксели с конкретными строками исходников через ViewInfo.

Полезный разбор для тех, кто хочет не просто пользоваться Compose Preview, а понимать, почему он работает именно так — и почему иногда не работает.

Статья: https://doveletter.dev/preview/articles/compose-preview-internals 🇺🇸
Платформа: Android

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

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

Главная идея Engine не в том, чтобы добавить еще десятки случайных helper-функций, а в том, чтобы закрыть реальные архитектурные пробелы SwiftUI. Пакет помогает строить собственные стилизуемые компоненты, работать с variadic view, организовывать совместимость между версиями SwiftUI и избегать некоторых дорогих по производительности решений вроде бездумного использования AnyView. Engine - фундамент для авторов UI-компонентов, дизайн-систем и внутренних фреймворков.

Engine на GitHub: https://github.com/nathantannar4/Engine
Платформа: iOS
⭐️: 507

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

Компонент MaterialSwitch, который проактивно пытается отключиться, используя анимацию кошачьей лапы.

CatPawSwitch на GitHub: https://github.com/hearsilent/CatPawSwitch
Платформа: Android
⭐️: 11

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

Впервые за всю свою карьеру я заколебался, прежде чем сказать: «Я — разработчик мобильных приложений».

Не потому, что мне стыдно за это, а потому, что я больше не уверен, что это значит в 2026 году.

Индустрия не рухнула. Мобильные приложения не исчезли. Люди по-прежнему разрабатывают приложения, компании по-прежнему выпускают продукты, и приложения по-прежнему приносят деньги. Но что-то изменилось. Уверенность, которая раньше приносила эта профессия, уже не так сильна, как прежде. И дело не в том, что работа стала сложнее. Дело в том, что ценность этой работы подвергается сомнению так, как никогда раньше.

Статья: https://apptractor.ru/info/articles/ne-nachinayut-li-mobilnye-razrabotchiki-sozhalet-o-vybore-professii-v-2026.html
Платформа: разработка/карьера
Компилятор Kotlin 2.3: ускорение работы с большими кодовыми базами более чем на 40%

По данным из свежего разбора, на больших кодовых базах прирост может доходить до 40%+ за счёт трёх вещей:

• нормальной incremental compilation без лишних пересборок
• более зрелого K2 compiler
• улучшенного кэширования артефактов, что особенно полезно для CI/CD

Что важно: для перехода не нужно переписывать код — достаточно обновить версию Kotlin и сравнить метрики сборки до и после.

Статья: https://medium.com/@androidlab/kotlin-2-3-compiler-speed-up-large-codebases-by-40-841227042946 🇺🇸
Платформа: Android

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

Средний срок работы разработчика в крупной tech-компании — 2–3 года. Среднее время, чтобы вырастить junior-а в надёжного самостоятельного middle-инженера — 2–4 года. Среднее время от middle до senior — ещё 3–5 лет. Эти цифры могут гулять, но порядок величин стабилен: чтобы вырастить senior-инженера из нового выпускника, нужно примерно 5–9 лет.

Если индустрия заметно сокращает junior-найм на протяжении трёх лет подряд — 2024, 2025 и 2026 годов, а именно это сейчас и происходит, — эффект проявится не сразу. Он проявится в 2029–2033 годах, когда истончится конвейер middle-инженеров, и в 2032–2036 годах, когда истончится конвейер senior-инженеров.

К тому моменту компании, которые сегодня режут junior-найм, будут конкурировать за ещё меньший пул опытных инженеров и жаловаться на «дефицит талантов». CEO будут винить кого угодно, кроме самих себя, за проблему, которую сами и создали тремя годами квартальной оптимизации.

Вопрос уже не в том, сломан ли конвейер подготовки junior-разработчиков. Он сломан. Данные говорят об этом громко и однозначно. Вопрос в другом: сделает ли кто-то, у кого есть возможности это исправить, хоть что-нибудь до того, как последствия станут необратимыми.

Прямо сейчас ответ такой: нет. Ни у кого нет плана.

Статья: https://apptractor.ru/info/articles/konveyer-podgotovki-dzhunov-sloman-i-ni-u-kogo-net-plana-po-ego-ispravleniyu.html
Платформа: разработка/карьера
😭3😁1
10 ошибок, которые Android-разработчики до сих пор допускают при работе с Jetpack Compose

Как человек, который за последние два года проанализировал сотни кодовых баз Jetpack Compose, могу сказать, что одни и те же ошибки повторяются снова и снова, что и побудило меня написать этот пост. Даже опытные Android-разработчики, привыкшие к традиционным View-системам, сталкиваются с ними при переходе на Compose.

Статья: https://apptractor.ru/info/articles/10-oshibok-kotorye-android-razrabotchiki-do-sih-por-dopuskayut-pri-rabote-s-jetpack-compose.html
Платформа: Android

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

Swift Service - легковесный фреймворк внедрения зависимостей, созданный для Swift 6 Concurrency — с явными API для Sendable и MainActor, без внешних зависимостей и с изоляцией среды на основе TaskLocal.

Основные особенности:

• Дизайн, ориентированный на параллелизм — параллелизм в Swift является первоклассным элементом. Ограничения Sendable и MainActor являются частью API и обеспечиваются компилятором на каждом этапе вызова — они не скрыты за @unchecked Sendable.
• Нативная поддержка MainActor — выделенные функции registerMain() / @MainService / @MainProvider для типов, изолированных MainActor. Соответствует требованиям Swift 6.2 Approachable Concurrency.
• Нулевые зависимости — полностью построен на основе примитивов стандартной библиотеки Swift (Synchronization.Mutex, @TaskLocal).
• Изоляция среды TaskLocal — переключение среды для каждой задачи для параллельно-безопасного тестирования. Не требуется изменение глобального состояния.
• Гибкие области видимости — сколупы для синглтонов, временных объектов, графов и пользовательских имен для точного управления жизненным циклом.
• Знакомые шаблоны — API регистрации/разрешения, вдохновленный Swinject. Внедрение оберток свойств с модульной поддержкой Assembly.

Swift Service на GitHubhttps://github.com/nslogmeng/swift-service
Платформа: iOS
⭐️: 22

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

(iOS En) Accelerate your machine learning workloads with the M5 and A19 GPUs
(iOS En) Boost your graphics performance with the M5 and A19 GPUs
(iOS En) SwiftUI Telegram Resizable Header | Scroll Effects | Animations
(And En) Explicit Backing Fields are experimental in Kotlin 2.3
(And En) Kotlin 2.3.20, Android Bench, and more
(Crs Ru) Flutter — Dart, Impeller и реальные юзкейсы
(Dev Ru) Путь инди-хакера
(Dev En) How to build a full-stack app with Supabase and Stripe on Google AI Studio
(Dev En) 1h Claude Code Crash Course For App Developers (Beginner Level)

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

(iOS Ru) Исследуем мир фото и видео редакторов
(iOS Ru) Найди и исправь ошибки в коде — Задачи с собеседования
(iOS Ru) Запускаем приложения на своем iOS-симуляторе
(iOS Ru) Осторожно, Combine!
(iOS Ru) Позаботимся о памяти при использовании value-типов
(iOS Ru) Swift – больше, чем язык для iOS
(And Ru) Почему вам стоит включить Gradle Configuration Cache
(And Ru) Интеграция GeckoView в Dynamic Feature
(And Ru) Последнее слово в Android-навигации
(Dev Ru) Kotlin не для Android
(Dev Ru) Пишем рекомендательную систему музыки на Java
Please open Telegram to view this post
VIEW IN TELEGRAM
Я купил самый дешёвый MacBook от Apple и попробовал заняться настоящей разработкой

У меня уже есть MacBook Pro M3 Pro. Это просто зверь. Но мне хотелось посмотреть, что получится, если попробовать настоящую разработку на самом дешевом Mac от Apple.

Статья: https://apptractor.ru/info/articles/macbook-neo-dev.html
Платформа: iOS

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

Presently - открытый и бесплатный дневник благодарности с более чем 1 миллионом установок. 

Технологический стек:

• MVVM с архитектурными компонентами
• ViewModel
• Room (с FTS и Paging v3)
• Mavericks
• CircleCI
• Отчеты о покрытии кода Jacoco (интегрированы с CI)
• Отчеты о сбоях Firebase Crashlytics
• Dagger + Hilt
• Espresso
• Firebase Test Lab
• WorkManager
• Dropbox Java SDK

Presently на GitHub: https://github.com/alisonthemonster/Presently
Платформа: Android
⭐️: 412

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2
iOS network frameworks и HTTP TCP Server внутри приложения

В iOS разработке работа с сетью является одной из ключевых задач. Для этого существует целый арсенал инструментов: от высокоуровневого URLSession до работы с низкоуровневыми BSD сокетами.

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

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

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

Тема сериализации данных является базой для любого мобильного разработчика, поскольку используется для работы с сетью, файловой системой и коммуникацией между основными компонентами. Но есть в этом вопросе особенность, с которой я столкнулся впервые за 7 лет.

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

Поскольку Parcelable не является общим механизмом сериализации (нельзя использовать для сохранения данных на диск или сетевых запросов), он не может полностью заменить Serializable, но остается более эффективным для Android среды. Два решения сериализации остаются в проекте с нами надолго, а это значит нам нужно уметь работать с ними правильно.

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

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