AppFiles - Mobile Development
2.18K subscribers
3.17K photos
42 videos
13 files
4.16K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Container - повышения реактивности асинхронных операций/загрузки

Container — это библиотека для упрощения управления состоянием и загрузки данных в приложениях Android. Она предоставляет небольшой набор строительных блоков, охватывающих наиболее распространенные реактивные шаблоны: обертывание асинхронных результатов в типизированный статус, управление производным состоянием из нескольких потоков и ленивая загрузка данных по запросу.

Container на GitHub: https://github.com/romychab/container
Платформа: Android
⭐️: 15

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

(iOS En) Permission Onboarding Animation
(iOS En) SwiftUI Search Made Amazing: Suggestions, Scopes & Tokens
(iOS En) Gooey Morphing Pull To Refresh Using SwiftUI
(And En) My Best Practices For Showing Errors In an App - Building Successful Apps
(And En) The Compose Styles API Is Everything I Wished For
(And En) Talking to terminals (and how they talk back)
(And En) Peeling back the Layers: A Navigation3 Deep Dive
(And En) How I Learned to Stop Worrying and Love Value Semantics (in Kotlin)
(And En) Local Lifetimes for Kotlin
(And En) Metro Under the Hood
(And En) When Flows Won't Cut It
(And En) AI-Driven Performance Optimization - Kotzilla MCP
(Crs En) React Native Full Stack Course – Clerk, Postgres, NativeWind
(Dev Ru) Качество, архитектура и ответственность в эпоху ИИ-ассистентов
(Dev Ru) Технический долг и архитектура
(Dev Ru) Терминалы и оболочки — tty, bash, zsh
(Dsg Ru) DesignOps на стероидах: автоматизация процессов в Figma

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

(iOS Ru) Sideloading и узник Apple
(iOS Ru) Как побеждать в конкурсах от Telegram
(And Ru) Переходишь на Compose? Не спеши!
(And Ru) Как работает ТВ в Android TV?
(And Ru) Нужны ли Android-разработчики на заводе?
(And Ru) Gradle DSL изнутри
(And Ru) Kotlin DSL как единый источник правды для решения многих задач

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Экономим на СМС рассылках — сервис push-уведомлений для веб- и PWA-приложений

В этом материале поговорим о сервисе доставки push-уведомлений - решаемых задачах, архитектуре, реализации и достигаемом эффекте от внедрения.

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

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

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

Навыки - практические инструкции по оптимизации производительности для ИИ-агентов. Они разработаны для того, чтобы помочь агенту анализировать проблемы производительности iOS с помощью более структурированной модели мышления: что проверять, чего избегать, какие компромиссы важны и когда требуется измерение. Это набор многократно используемых руководящих файлов для анализа, рефакторинга и исследования кода с помощью ИИ.

iOS Performance Agent Skills на GitHub: https://github.com/Livsy90/iOS-Performance-Agent-Skills
Платформа: iOS
⭐️: 79
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Я создал желеобразное FAB-меню для Jetpack Compose

JellyFab — необычное FAB-меню для Jetpack Compose, в котором центральная кнопка не просто открывает дополнительные действия, а растягивается и покачивается, словно желе. Эффект реализован без шейдеров: только Canvas, Animatable и немного геометрии. Вместо стандартного FloatingActionButton используется обычный кликабельный Box, под которым можно полностью самостоятельно отрисовывать и деформировать форму.

Главная идея — представить круг не готовой фигурой, а набором из 36 точек. При появлении пунктов меню ближайшие к ним точки смещаются наружу, причём сила смещения плавно уменьшается по гауссовой кривой. Затем точки соединяются кривыми Безье, а тень меняется вместе с деформацией кнопки. Хороший пример того, что выразительная UI-анимация необязательно требует сложных технологий — иногда достаточно правильно представить задачу и синхронизировать несколько простых эффектов.

Статья 🇺🇸: https://proandroiddev.com/i-built-a-jelly-like-fab-menu-for-jetpack-compose-42e9f65f6576
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
overlay-demo.gif
39.2 MB
Compose A11y Scanner - cканер доступности для Jetpack Compose

Compose A11y Scanner - рантайм сканер доступности, который отображает проблемы непосредственно в пользовательском интерфейсе Compose.

:scanner-core отвечает за движок сканирования, модели, состояние результатов и контракт A11yRule:scanner-rules содержит встроенные правила проверки. :scanner-ui читает дерево семантики Compose, извлекает цвета через ColorExtractor, запускает сканирование и рисует оверлеи с найденными проблемами поверх интерфейса приложения.

Compose A11y Scanner на GitHub: https://github.com/mohdaquib/ComposeA11yScanner
Платформа: Android
⭐️: 15

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
DarkGram: как мы делаем power‑user Telegram‑клиент для iOS — и почему его нет в App Store

Мы небольшой командой развиваем DarkGram — неофициальный Telegram‑клиент для iOS на базе Swiftgram и Telegram‑iOS. Вдохновлялись мы прежде всего философией AyuGram: дать пользователю больше контроля над клиентом, приватностью и локальной историей. Но DarkGram не является попыткой буквально перенести AyuGram на iPhone. Проект постепенно развивается в самостоятельный клиент со своими функциями, интерфейсом и техническими решениями.

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

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

Diagnostics серьёзно меняет подход к поддержке пользователей внутри приложений. HTML-отчёт сразу отвечает на типичные вопросы и уменьшает количество лишней переписки.

Статья: https://apptractor.ru/info/articles/otchety-polzovateley-s-diagnostics-bolee-bystroe-ustranenie-oshibok-s-pomoschyu-ii.html
Платформа: iOS

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

Simslim позволяет запускать гораздо больше iOS-симуляторов на одном Mac, отключая фоновые процессы, которые симулятору не нужны.

Вновь запущенный iOS-симулятор запускает около 180 фоновых служб: Siri, индексирование Spotlight, анализ фотографий, новости, постановка обоев, синхронизация iCloud и так далее. Ничто из этого не имеет значения, когда вы используете симулятор для разработки, тестирования или CI. Simslim отключает эти службы, что сокращает объем памяти, потребляемой каждым симулятором, примерно в 4 раза. 

Что вы теряете

Отключение служб подходит для большинства задач разработки, автоматизации UI и CI, но некоторые функции действительно перестают работать. Вот некоторые из них, о которых стоит знать:

• Spotlight и поиск в настройках ничего не выдают
• Для push-уведомлений нужен apsd, для тестирования StoreKit нужен storekitd
• Для универсальных ссылок нужен swcd
• Средство выбора контактов, фотографий и календаря может работать некорректно без категорий

simslim profiles отображает все категории, поэтому вы можете сохранить категорию с помощью --except или отдельные демоны с помощью --keep.

Simslim на GitHub: https://github.com/MobAI-App/simslim
Платформа: iOS
⭐️: 98
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Интеллектуальные приложения для Android: введение в Jetpacker

В этой серии публикаций Google поможет пройти через все эти варианты выбора. Мы начнём с базового мобильного приложения и постепенно превратим его в персонализированный, интеллектуальный и агентный пользовательский опыт.

Статья: https://apptractor.ru/info/articles/vvedenie-v-jetpacker.html
Платформа: Android

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

Несколько недель назад у меня Wi-Fi просел прямо посреди серии. Картинка стала мыльной примерно на десять секунд, а затем тихо снова стала чёткой. Без индикатора загрузки. Без остановки.

Этот маленький момент находится в конце длинной цепочки, и почти ни одна её часть не запускается в тот момент, когда вы нажимаете Play. В начале 2024 года Netflix превысил отметку в 260 миллионов домохозяйств с подпиской, а с тех пор вырос уже более чем до 300 миллионов. В один вечер ноября 2024 года 65 миллионов потоков одновременно смотрели один боксёрский матч.

То, как Netflix справляется с такой нагрузкой в 2026 году, в основном решается за часы до того, как запрос вообще покидает ваш дом. В этом вся суть, и это изменило мой взгляд на кэширование. Давайте разберёмся.

Статья: https://apptractor.ru/info/articles/kak-netflix-spravlyaetsya-s-260-millionami-odnovremennyh-potokov-bez-buferizatsii.html
Платформа: разработка

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

Мысли о масштабируемой архитектуре приложений через кодовую структуру и философии «developer as a user»; подходит для indie-разработчиков и стартапов на ранних стадиях.

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

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

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

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

Представьте: вы проходите собеседование на позицию Staff Android Engineer, и интервьюер наклоняется вперёд и говорит:

«Расскажите, как бы вы спроектировали систему автоматической синхронизации, похожую на Google Photos. Меня интересует всё: обнаружение новых фотографий, загрузка, работа без сети, влияние на батарею и серверная часть».

Это один из лучших вопросов по системному дизайну для Staff Android Engineer, потому что он затрагивает каждый уровень системы. Здесь недостаточно просто написать фоновый сервис — нужно одновременно учитывать постоянно меняющиеся ограничения Android, надёжность распределённых систем, особенности энергопотребления и доверие пользователей.

В этой статье я приведу ответ, который дал бы сам. Разберём систему уровень за уровнем.

Статья: https://apptractor.ru/info/articles/razrabotka-sistemy-avtomaticheskoy-sinhronizatsii-fotografiy-android-system-design.html
Платформа: Android/архитектура

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

Serve-avd транслирует Android Emulator на веб-страницу. Он захватывает экран эмулятора через adb screenrecord, предоставляет его в виде потока H.264 WebCodecs (с резервным вариантом MJPEG) плюс канал управления WebSocket и отображает в браузере. Он работает с любым запущенным эмулятором Android (и большинством физических устройств через adb) — без root-прав, без плагинов, без инструментов в вашем приложении.

Фичи:

• Плавный видеопоток H.264 в браузере (WebCodecs) с мгновенной отрисовкой при подключении — без ожидания следующего кадра
• Полное взаимодействие: касание, перетаскивание и перемещение мышью, прокрутка колесиком
• Навигация Android из браузера: Назад, Домой, Недавние, питание, громкость, переключение тем, скриншот
• Переадресация клавиатуры — ввод текста непосредственно в эмулятор, клавиша Escape — «Назад», ⌘⇧H — «Домой»
• logcat перенаправляется в браузер (и отображается в консоли браузера для чтения инструментами MCP, используемыми в браузере)
• Недавние действия доступны на панели инструментов браузера и в журнале событий serve-avd
• Вывод иерархии пользовательского интерфейса для агентов: serve-avd ax (uiautomator → JSON)
• Несколько эмуляторов одновременно — загрузка и подключение AVD прямо с панели «Устройства»
• Работает в headless режиме через тот же HTTP API, если браузер не подключен

Размещенные эмуляторы сложно тестировать. serve-avd позволяет сначала протестировать размещенную инфраструктуру локально для более быстрой итерации. Когда вы будете готовы разместить эмулятор удаленно, просто туннелируйте обслуживаемый URL-адрес, и пользователи смогут взаимодействовать с эмулятором, как если бы он работал локально на их устройстве. Это также отличный способ передать эмулятор агенту ИИ: всё управляется по протоколу HTTP + WebSocket, скриншоты и дампы пользовательского интерфейса создаются одной командой, а журнал событий показывает, что сделал агент.

Serve-avd на GitHub: https://github.com/hsandhu/serve-avd
Платформа: Android
⭐️: 4

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
50 вопросов о System Design, ответы на которые должен знать каждый Senior iOS-разработчик: часть 3

Вопрос 11. Когда вы бы использовали Core Data?
Вопрос 12. Когда вы бы выбрали SQLite вместо Core Data?
Вопрос 13. Как спроектировать Offline First iOS-приложение?
Вопрос 14. Как синхронизировать локальные и серверные данные?
Вопрос 15. Как разрешать конфликты синхронизации?

Первая часть, про архитектуру приложения. Вторая про сетевой слой.

Статья: https://apptractor.ru/info/articles/50-voprosov-o-system-design-otvety-na-kotorye-dolzhen-znat-kazhdyy-senior-ios-razrabotchik-chast-3.html
Платформа: iOS

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

Каждые несколько лет Apple выводит системных инженеров из спячки, чтобы они немного улучшили динамический компоновщик, планирование процессора или предварительную загрузку данных.

В результате компании удаётся выжать из времени запуска очередное двукратное ускорение, постепенно уменьшающиеся до 1,3 раза или, что более вероятно, зафиксированные мной 1,2 раза.

Это хорошо. Однако ответственность за архитектуру критического пути запуска по-прежнему лежит на разработчике.

Статья: https://apptractor.ru/info/articles/kak-apple-v-ios-27-udalos-sokratit-vremya-zapuska-na-30.html
Платформа: iOS

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

LNPopupController — это фреймворк для отображения контроллеров представлений в виде всплывающих окон для других контроллеров представлений, аналогично мини-плеерам Apple Music и Podcasts.
Фреймворк спроектирован как универсальное решение, подходящее для большинства сценариев, поэтому он реализован в виде категории для UIViewController. Каждый контроллер представления может отображать всплывающую панель, закреплённую относительно нижнего элемента интерфейса.

Для UITabBarController и его подклассов панель по умолчанию закрепляется над панелью вкладок. Для UINavigationController и его подклассов — над панелью инструментов. В остальных контроллерах всплывающая панель отображается в нижней части экрана. Подклассы контроллеров представления также могут предоставлять собственные элементы для закрепления панели.
Фичи:

• Поддержка стеклянного дизайна iOS 26 с сохранением подходящего внешнего вида на предыдущих версиях iOS.
• Поддержка iOS 13 и новее.
• Распространение в виде Swift Package Manager-пакета для проектов на Swift и Objective-C.
• Корректная интеграция с современным UIKit.
• Есть реализация SwiftUI

LNPopupController на GitHub: https://github.com/LeoNatan/LNPopupController
Платформа: iOS
⭐️: 3.1K
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
📺 Видео и подкасты за неделю

(iOS En) Complex UI: Recreating iOS Lock Screen UI Animations Using SwiftUI
(iOS En) SwiftUI Network Reachability with NWPathMonitor and Observation
(iOS En) Elastic Custom Segmented Control - SwiftUI
(And En) Android XR fireside talk: Building the future of spatial experiences
(And En) Beginner's Guide to Analytics Logging on Android With Firebase Analytics
(And En) Tiny Models, Big Impact: On-Device AI for Real Apps 
(And En) The State of Amper
(And En) Run, Kotlin, Run!
(Crs En) How You Get the REAL Liquid Glass Effect In Compose Multiplatform
(Crs En) Full-Stack Kotlin AI: Powering Compose Multiplatform apps with Koog & MCP
(Crs En) What Nobody Told Us About Shipping Kotlin to iOS
(Dev Ru) Spec-Driven Development: теория, инструменты, практика
(Dev Ru) Как за три дня собрать прототип продукта и сократить месяцы согласований
(Dev Ru) Зачем учить Kotlin, если есть ИИ?
(Dev Ru) Spec-Driven Development на практике — SDD, BMAD, OpenSpec, вайб кодинг

🧳 Прошлые видео:

(iOS Ru) Инструменты для мониторинга производительности iOS-приложений
(iOS Ru) Разбор SwiftUI проекта стартапа с AI на борту
(iOS Ru) Вам не нужно хранилище в приложении
(And Ru) Navigation 3 для Compose: что нового и зачем это нужно?
(And Ru) Роман Елизаров про Kotlin, корутины и работу в Jetbrains

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

Этой статьёй я открываю цикл материалов, в которых будут собраны мысли, советы и инструкции о том, как сделать приложение и процессы его разработки измеримыми, как находить «узкие места», диагностировать проблемы и причины их возникновения, а также фиксировать их наличие. Минимум кода, сложных терминов и «rocket science» — только практический опыт и наработки по различным метрикам.

Эта тема далеко не новая, и многие моменты могут показаться очевидными. Однако, чтобы разобраться в нюансах, необходимо начать с базы. Вовсе не обязательно делать именно так. Буду рад узнать, как вы работаете с теми или иными метриками.

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

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

Flighty KMP - трекер полетов в стиле Flighty, созданный с помощью Compose Multiplatform, ориентирован на Android, iOS, десктопы (JVM) и веб-версии (Kotlin/Wasm) из единой кодовой базы. Все данные имитируются — замороженный снепшот "Пн, 20 июля" с одним рейсом в воздухе.

Есть демонстрация: luca992.github.io/flighty-cmp — веб-версия (Kotlin/Wasm), которая загружается прямо из папки docs/ этого репозитория через GitHub Pages (scripts/publish-web.sh генерирует её заново).

Автор пишет, что это приложение было создано практически полностью агентом с минимальным контролем со стороны разработчиков. Он не одобряет создание приложений таким способом, не проверял код и не советует его использовать. Это всего лишь демонстрация концепции, показывающая, что можно создавать нативные многоплатформенные приложения так же быстро, а может быть, даже быстрее, на Kotlin.

Flighty KMP на GitHub: https://github.com/luca992/flighty-cmp
Платформа: Android/кроссплатформа
⭐️: 20

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

Андрей Карпати недавно написал в X о своём новом любимом способе работы с LLM — «хорошей длинной сессии бесцельного проговаривания мыслей», как он сам это назвал.

Мы с моим кофаундером занимаемся этим уже несколько месяцев. По сравнению с обычным текстовым вайб-кодингом это настолько большой шаг вперёд, что я уже не помню, когда в последний раз использовал клавиатуру, чтобы написать промпт агенту. На нас тревожно смотрели люди за соседними столиками в кофейнях. Соседи закрывали окна, пытаясь уснуть, пока мы в час ночи вслух излагали свои мысли Codex. Было и множество других неловких ситуаций, о которых мне лучше не вспоминать.

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

Сначала я постараюсь объяснить, почему считаю такой подход будущим взаимодействия с агентами. Затем поделюсь несколькими советами, которые помогут получить максимум пользы от подобных монологов. Прошу только об одном: попробуйте. Обещаю, возвращаться к прежнему способу вам уже не захочется.

Статья: https://apptractor.ru/info/articles/10x-ramble-coder.html
Платформа: разработка

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