AppFiles - Mobile Development
2.13K subscribers
2.76K photos
38 videos
11 files
3.7K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
PokedexUI - это пример современного приложения на SwiftUI. Оно интегрируется с PokeAPI для получения и отображения данных о покемонах, используя чистую реактивную архитектуру с использованием async/await и Swift Concurrency.

Этот пример приложения демонстрирует:

• Сеточный пользовательский интерфейс с LazyVGrid и плавной прокруткой;
• Асинхронную загрузку изображений и извлечение доминирующего цвета;
• Чистую архитектуру Model + View + ViewModel (MVVM) с SOLID;
• Современную сетевую абстракцию с использованием async/await и фреймворка Networking;
• Настраиваемые переходы и эффекты согласованной геометрии;
• Композицию представлений с использованием protocol-oriented моделей представлений;
• Поиск и фильтрацию покемонов;
• Бесконечную прокрутку.

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

PokedexUI на GitHub: https://github.com/brillcp/PokedexUI
Платформа: iOS
⭐️: 70
Навигация SwiftUI: объяснение NavigationStack, Deep Linking и TabView

SwiftUI значительно усовершенствовал навигацию во фреймворке с появлением NavigationStack и переходом от привычного NavigationView. Теперь управление навигацией строится не вокруг представлений (views), а вокруг значений (values). Важно понять: NavigationStack не просто переименованная версия NavigationView, а мощный инструмент для построения сложных сценариев переходов между экранами. Вместе с NavigationPath разработчик получает полный контроль над навигацией, включая программное перемещение по стеку и поддержку deep linking — обработки ссылок, ведущих пользователя сразу к нужному экрану внутри приложения. Такой подход особенно полезен для сложных приложений с множеством состояний и переходов между экранами.

Помимо NavigationStack, в статье отдельное внимание уделено TabView — классическому решению для построения таб-ориентированных приложений. Современная архитектура SwiftUI позволяет объединять TabView с NavigationStack, обеспечивая сохранение навигационного состояния внутри каждой вкладки. Это упрощает реализацию профессиональных и масштабируемых интерфейсов с поддержкой глубоких переходов (deep linking) и минимизацией типичных “подводных камней” SwiftUI-навигирования. Понимание этих инструментов экономит часы на отладку и делает код более структурированным и поддерживаемым.

Статья: https://swift-pal.com/swiftui-navigation-navigationstack-deep-linking-and-tabview-explained-0f905bbb20d4 (как читать ©)
Платформа: iOS
Функциональное программирование в Android. Побочные эффекты и ELM-архитектура

В четвёртой статье цикла про функциональное программирование в Android мы соберём знания, полученные в предыдущих частях цикла. А ещё применим их на практике — соберём скелет приложения для медитации.

Статья: https://habr.com/ru/companies/dododev/articles/927100/
Платформа: Android
Новый взгляд на Default Actor Isolation в Swift 6.2

После включения строгой проверки конкурентности многие разработчики обнаружили, что их рабочий однопоточный код начинает выбрасывать предупреждения и ошибки — несмотря на явную работу с MainActor. Это происходило потому, что до Swift 6.2, если у функции или типа не было указания области изоляции (isolation domain), компилятор рассматривал их как "non-isolated" (можно использовать конкуррентно). Для железной гарантии компилятор требовал отдельные аннотации, даже если весь модуль работал на MainActor.

Default Actor Isolation (SE-0466) теперь позволяет установить область изоляции по умолчанию на уровне Target — чаще всего это будет MainActor. Весь код без явных аннотаций автоматически будет считаться изолированным к MainActor, а ненужных деклараций станет меньше. Default Actor Isolation не только облегчает жизнь при строгой проверке конкурентности, но и подталкивает к модульному проектированию — ведь для разных Targets можно устанавливать разные области изоляции.

Итог: Default Actor Isolation в Swift 6.2 снижает «болезненность» внедрения строгой конкурентности, автоматизируя то, что раньше требовало от разработчиков рутинной работы. Однако для сложных или гибридных сценариев все еще надо помнить о нюансах и ограничениях новых опций.

Статья: https://fatbobman.com/en/posts/default-actor-isolation/
Платформа: iOS
Как создавать BLE-приложения под Android — личный опыт

Bluetooth Low Energy (BLE) — это энергоэффективный протокол передачи данных, который подходит для устройств с малым энергопотреблением, таких как фитнес-трекеры или датчики. В основе BLE лежит протокол GATT, организующий обмен данными через сервисы и характеристики. Разработка BLE-приложений на Android сопряжена с особенностями: нестабильностью соединений, сложным управлением правами доступа и особенностями разных устройств.

Для успешной реализации важно хорошо понимать GATT, уделять особое внимание энергопотреблению и тестировать приложение в реальных условиях. BLE требует асинхронного подхода и постоянной адаптации к аппаратным особенностям, но при правильном подходе обеспечивает надежную и эффективную связь для IoT-устройств с небольшим объемом передаваемых данных.

Статья: https://medium.com/codetodeploy/building-ble-apps-in-android-a-developers-journey-c1ecc04d6bdf (как читать ©)
Платформа: Android
YA Habit Tracker - простой, но современный трекер привычек для Android. Технологии: Compose, Hilt, Room, Reorderable  и Navigation 3.

YA Habit Tracker на GitHub: https://github.com/zaved707/Yet-Another-Habit-Tracker
Платформа: Android
⭐️: 22
📺 Видео и подкасты за неделю на @AppFiles

(iOS En) Custom Liquid Morphing Menu Effect
(iOS En) Create Beautiful Liquid Glass: iOS 26 & SwiftUI in Figma & Xcode 26
(iOS En) Supercharge Your SwiftUI App with SF Symbols & Emoji Pickers
(iOS En) Liquid Glass Morphing Effects Using SwiftUI
(And Ru) Нюансы работы Android Runtime в сравнении с HotSpot VM
(And Ru) Как Google тайно изменил Android на глазах у всех: Project Mainline
(And En) WearOS Material 3 shape morphing
(And En) Compose Prototyping in Kotlin Notebooks
(And En) Writing Your Third Kotlin Compiler Plugin
(And En) Kotlin compatibility crash course
(And En) Compose draw speedrun - reloaded
(And En) Gradle 9.0.0 is Live - What's new? Configuration Cache, Java 17, Kotlin 2, and more
(And En) Gradle Build Cache - Deliver faster by doing less
(Crs En) The Easing Symphony: AnimationSpec in detail
(Crs En) Using Previews with Compose Multiplatform
(Dev Ru) Запись Avito Mobile Meetup
(Dev Ru) Как работает синтез речи: от робота до живого голоса — синтез речи, TTS
(Dev En) What is a Mobile Platform Engineer? 4 Years of Real Experience
(Mrk Ru) Заработок на AI-фоторедакторах и аватарах. iOS. Подписки. Разбор ниши

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

(iOS Ru) Почему Metal перестал быть страшным
(iOS Ru) Локализация iOS-приложения за 1$ в 2024 году
(And Ru) Нужно ли учить Java для Android-разработки в 2024
(Vrs Ru) KMP на ОС Аврора: проблемы и пути их решения
(Dev Ru) Алгоритмическая сессия на собеседовании (все собеседования)
(Dev Ru) Автоматическая генерация верстки под Server-driven UI из макетов Figma
(Dev Ru) Учимся договариваться о деньгах — Офферы, Зарплаты, Повышение
Please open Telegram to view this post
VIEW IN TELEGRAM
AsyncGraphics - это пакет Swift для редактирования изображений и видео с использованием async/await и Metal. С его помощью вы можете применять эффекты или изменять графику в реальном времени с помощью Metal, рисовать с помощью примитивов, осуществлять компоновку и верстку, встраивать графику во View, работать с камерой, писать свои Metal-шейдеры на высоком уровне без ручной настройки пайплайна и т.д.

AsyncGraphics на GitHub: https://github.com/heestand-xyz/AsyncGraphics
Платформа: iOS
⭐️: 380
👍1
Все видео droidcon NYC 2025

Всего 61 видео. Все доступны на сайте DroidCon.

Сайт: https://www.droidcon.com/content/?filter_postyear=2025&filter_post_event_tag=droidcon-new-york
Платформа: Android
Стриминг изменений с помощью Observations

Появление типа Observations знаменует собой значительное улучшение возможностей Swift по наблюдению за данными, особенно для разработчиков, использующих Swift Concurrency. Он стирает разрыв между реактивными обновлениями и современными асинхронными шаблонами, упрощая создание понятных, эффективных и отзывчивых пользовательских интерфейсов.

Статья: https://apptractor.ru/info/articles/observations.html
Платформа: iOS
Кто такой Mobile Platform Engineer

Mobile Platform Engineer — это инженер, который создает и поддерживает внутренние инструменты, библиотеки и архитектуры, позволяя мобильным командам быстрее и стабильнее выпускать продукт. Его «пользователи» — это другие разработчики, а задачей становится автоматизация процессов, стандартизация инфраструктуры и управление качеством, чтобы избавить команду от рутинных технических проблем.

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

Статья: https://www.mobilesystemdesign.com/blog/what-is-a-mobile-platform-engineer/
Платформа: разработка

Поставьте 👍, если хотите эту статью на русском!
2
Flocon — это продвинутый инструмент отладки и проверки Android-приложений, созданный по мотивам Flipper.

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

Flocon SDK - легковесная библиотека всего 140 Кб. Flocon Desktop — это проект Kotlin Multiplatform, структурированный аналогично Android-приложению с использованием ViewModels, Room, Ktor и корутин. 

С Flocon вы получаете полный доступ к критически важным внутренним компонентам приложения, таким как

• сетевые запросы (http, изображения, grpc, graphql)
• локальное хранилище (sharedpref, базы данных, файлы приложения)
• аналитические события (и кастомные события)
• меню отладки, отображаемое на рабочем столе
• глубокие ссылки

И многое другое — без необходимости иметь root-доступ или выполнять утомительные команды ADB. Он разработан для ускорения процессов разработки, контроля качества и отладки.

Flocon на GitHub: https://github.com/openflocon/Flocon
Платформа: Android
⭐️: 119
👍1
Первый взгляд на retain{}: новый способ сохранения состояния в Jetpack Compose

Появление retain в Compose Runtime стало важным шагом к тому, чтобы сделать Compose самостоятельной UI-системой. Этот механизм закрывает разрыв между краткоживущим состоянием и длительным хранением в памяти, позволяя сохранять значения при переходах, не выходя за пределы composable-мирa.

Будь то сложная навигация, обработка конфигурационных изменений или управление временным UI-состоянием — retain предлагает новый многообещающий механизм восстановления состояния за пределами композиции непосредственно в рамках Compose Runtime.

Статья: https://apptractor.ru/info/articles/retain.html
Платформа: Android
Meetingnotes - приложение для ведения заметок на встречах с ИИ. Оно записывает аудио и ведет транскрибирование, к текстам можно добавлять собственные примечания, есть функции формирования, поиска, различные шаблоны и т.п.

Meetingnotes на GitHub: https://github.com/owengretzinger/meetingnotes
Платформа: macOS/iOS
⭐️: 38
👍1
Курс "Генеративный ИИ для начинающих с JavaScript" от Microsoft

Microsoft уже выпустила несколько обучающих курсов по ИИ, таких как "AI Agents for Beginners", "Copilot Adventures" и "Generative AI for Beginners". В этом курсе "Генеративный ИИ для начинающих с JavaScript" от Microsoft, размещенном на GitHub, вы научитесь создавать приложения GenAI с использованием JavaScript.

Это новое предложение можно рассматривать как продолжение общего курса "ИИ-агенты для начинающих", но посвящённого JavaScript. Курс также заимствует повествовательный стиль исследования из курса "Copilot Adventures", оформленного в виде приключения с путешествием во времени. Суть курса заключается в том, что вы выбираете задачу, или так называемое приключение, и затем пишете код для его выполнения.

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

Курс на GitHub: https://github.com/microsoft/generative-ai-with-javascript
Платформа: обучение
Swipe to Pay, или Как мы переписали слайдер оплаты на Compose

Помните компонент MotionLayout? С его помощью можно просто реализовывать сложные анимации, в том числе и основанные на жестах.

У нас в Дринките был компонент, сделанный на MotionLayout — слайдер быстрой оплаты в меню. Он появляется, когда пользователь добавляет продукты в корзину.

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

Но шло время, баги копились, поддерживать элемент становилось всё сложнее, да и слайдер нуждался в новом функционале.

Статья: https://habr.com/ru/companies/dododev/articles/933278/
Платформа: Android
Игра в SPM

На Хабре уже немало статей об опыте перехода на Swift Package Manager — успешных и не очень. В моем случае переезд прошел удачно, но на каждом шагу возникали проблемы, которые было сложно нагуглить или вообще найти решения. Поэтому я решил собрать все накопленные знания и поделиться ими в этой статье, надеясь, что другие разработчики сэкономят кучу времени.

Статья: https://habr.com/ru/articles/857364/
Платформа: iOS
👍1
Распутываем навигацию SwiftUI

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

Apple подарила нам NavigationView, а затем деликатно похлопала по плечу, выпустив новенький блестящий NavigationStack. Добавьте NavigationPath, onOpenURL и всеми любимый загадочный ящик — диплинкинг — и теперь даже опытные iOS-разработчики выглядят как тот мем с парнем, вокруг которого парят математические уравнения.

Но не волнуйтесь. Создаёте ли вы простое приложение с несколькими экранами или проектируете динамический поток с URL-адресами и кастомными типами данных, SwiftUI действительно может сделать простую навигацию. Как только вы разберётесь с инструментами (и будете знать, когда с ними не стоит бороться), всё станет на свои места.

Статья: https://apptractor.ru/info/articles/rasputyvaem-navigatsiyu-swiftui.html
Платформа: iOS
This media is not supported in your browser
VIEW IN TELEGRAM
FloatingTabBar - плавающая панель вкладок на Jetpack Compose, претворяющаяся "жидким стеклом" из iOS 26. 

Фичи: развёрнутое и свернутое состояния, настраиваемое поведение при прокрутке, можно добавлять кастомные аксессуары (например, медиаплеер), настраиваемые цвета, формы и размеры.

FloatingTabBar на GitHub: https://github.com/elyesmansour/compose-floating-tab-bar
Платформа: Android
⭐️: 624
This media is not supported in your browser
VIEW IN TELEGRAM
Как я сделал универсальный Skeleton‑View с shimmer‑эффектом в SwiftUI

Я — iOS‑разработчик, и недавно в своём приложении столкнулся с задачей: нужно было красиво показывать placeholder‑загрузку интерфейса. Думал использовать стандартный .redacted — но он неудобен: нет анимации, мало кастомизации. Либо подгружать тяжелую библиотеку вроде SwiftUI‑Shimmer. Решил: сделаю свой легковесный и гибкий подход — и расскажу вам, как это получилось.

Статья: https://habr.com/ru/articles/934756/
Платформа: iOS
День, когда моё Android-приложение чуть не убило телефоны пользователей (и как я это исправил)

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

В одном из отзывов пользователи писали: «Приложение съедает всю память телефона. Телефон стал совершенно нерабочим».

За ту ночь я узнал об управлении памятью в Android больше, чем за годы чтения учебников.

Статья: https://apptractor.ru/info/articles/den-kogda-moyo-android-prilozhenie-chut-ne-ubilo-telefony-polzovateley-i-kak-ya-eto-ispravil.html
Платформа: Android