AppFiles - Mobile Development
2.17K subscribers
3.2K photos
44 videos
13 files
4.2K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Kadr - декларативное создание видео для платформ Apple

SwiftUI для видео. Компонуйте, трансформируйте и экспортируйте видео на Swift — так, как действительно хочется писать код. Kadr - cовременная декларативная библиотека на Swift для создания видеокомпозиций на платформах Apple. Видео собираются с помощью DSL на основе result builder, а асинхронная работа построена на async/await.

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

Kadr на GitHub: https://github.com/SteliyanH/kadr
Платформа: iOS
⭐️: 48
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Android CameraX: детекция лица в реалтайме для биометрии

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

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

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

Привет, Kotlin-разработчики. Скажу честно. Когда я начал разрабатывать своё приложение для разделения расходов на Kotlin Multiplatform, я подумал: «Напиши один раз, запускай везде. Что может быть сложного?»
Оказалось, может быть очень сложно. Но и невероятно полезно.

Это не очередной туториал «как начать работу с KMP». Таких и без того полно. Это скорее статья, которую я сам хотел бы прочитать до начала работы: реальные проблемы, реальные ошибки и реальные решения. Всё основано на моём опыте создания ExpenseSplitter KMP — полноценного приложения для совместного учёта расходов, которое работает на Android, Desktop и Web из одной общей кодовой базы.

Вот как всё было на самом деле.

Статья: https://apptractor.ru/info/articles/odin-kod-dlya-mnogih-platform-vot-chto-vam-nikto-ne-rasskazhet-o-kmp.html
Платформа: кроссплатформа

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

Kwery — это библиотека для управления серверным состоянием в Android-приложении. По смыслу она очень похожа на TanStack Query/React Query, только для Kotlin/Android. Она не заменяет Retrofit, Ktor или OkHttp, а работает поверх них. Автор формулирует идею так: "Room хранит данные, которыми владеет приложение. Kwery управляет данными, которыми владеет сервер".

Kwery предлагает взять на себя значительную часть типовой логики между UI и сетевым клиентом. При этом сам HTTP-запрос всё равно делает Retrofit/Ktor/OkHttp. Kwery однако решает, когда его вызывать, нужно ли вообще вызывать, можно ли отдать уже имеющиеся данные и как показывать состояние запроса.

Основные вещи, которые она делает:

• Кэширует ответы сервера. Если экран повторно запрашивает те же данные, Kwery может вернуть существующий результат вместо нового HTTP-запроса.
• Дедупликация запросов. Если несколько экранов/компонентов одновременно запросили один ресурс, не обязательно делать несколько одинаковых запросов.
• Управляет состояниями loading/success/error.
• Делает retry при ошибках.
• Может обновлять данные в фоне.
• Управляет устареванием кэша.
• Поддерживает offline-сценарии, в том числе управляет записью данных без сети и затем синхронизацией при ее появлении.
• Может переиспользовать один результат между несколькими подписчиками.
• Использует корутины Kotlin + Flow.
• Есть интеграция с Compose.

Kwery на GitHub: https://github.com/dbjpanda/kwery
Платформа: Android
⭐️: 16

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

Chorus — приложение для определения птиц по голосу и отслеживания прогулок, которое я создаю для Shipaton 2026. Во время онбординга оно узнаёт, зачем пользователь вообще открыл приложение и что могло бы заставить его чаще выходить на прогулки. Приложение спрашивает о птице мечты, с кем человек обычно гуляет, когда он выходит на прогулку, что действительно могло бы мотивировать его чаще выходить из дома.

Эта статья — о том, что происходит дальше: как использовать локальный фреймворк Foundation Models от Apple, чтобы в момент предложения подписки вернуть пользователю его собственную мотивацию, прямо внутри удалённо конфигурируемого пейвола RevenueCat.

И самое приятное — это бесплатно.

Статья: https://apptractor.ru/marketing-monetization/engagement/kak-sozdat-sverhpersonalizirovannyy-peyvol-s-pomoschyu-apple-foundation-models.html
Платформа: iOS

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

Небольшой, не требующий зависимостей Swift-пакет для поддержки нескольких версий iOS в SwiftUI — без нарушения цепочек модификаторов, дублирования целых представлений или разброса проверок #available по всему коду. Подробнее об использовании библиотеки вы можете прочитать в статье

SwiftUIBackportKit на GitHub: https://github.com/EmadBeyrami/SwiftUIBackportKit
Платформа: iOS
⭐️: 21

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

Google объявил о двух новых требованиях к качеству приложений в Google Play: ограничениях по использованию памяти и обязательном восстановлении авторизации при переносе приложения на новый Android-смартфон. Новые правила начнут реально влиять на публикацию приложений в 2027 году.

Статья: https://apptractor.ru/develop/povyshenie-kachestva-prilozheniy-sokraschenie-ispolzovaniya-pamyati-i-uluchshenie-migratsii-na-drugie-ustroystva.html
Платформа: Android

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

(iOS En) AI-Assisted TDD in Practice (Swift + AI)
(iOS En) Vibe Coding a macOS App in Xcode 27
(iOS En) Apple Music Reactions Emoji Picker
(And Ru) AI-агент Android-разработчика: как вынести его на сервер и выполнять задачи 24/7
(And En) Beginner's Guide to Continuous Integration (CI) for Android with GitHub Actions
(And En) Is TDD the next big thing for agentic development on Android?
(And En) Reflection is Evil
(Crs En) Developing Music Creation Apps for Web, Desktop and Android
(Crs En) Advanced Kotlin Native Integration
(Dev Ru) «Чё ты такой серьёзный?» Как юмор помогает продуктовым командам
(Dev Ru) Анастасия Терёхина. Гадание на собеседовании: можно ли за час «технички» предсказать работу на годы вперед
(Dev En) Redefining Machine Learning with Kotlin A Device First Approach to AI
(Dev En) Teaching Kotlin for the AI Era: Tips, Tools, and Practical Insights
(Mtr Ru) «Считаем то, что важно» – практический гид по метрикам в продукте

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

(iOS Ru) Стратегия автотестирования для iOS приложений
(iOS Ru) 5 вопросов для iOS разработчика
(iOS Ru) Борьба с утечками памяти: от задачи до победы
(And Ru) Google закрывает свободу на Android
(And Ru) 5 уроков из опыта реализации pixel-perfect тестирования дизайн-системы в Android
(And Ru) Gradle-сборка. Измеряем самое важное
(And Ru) Шифруем файлы в Android
(Crs Ru) Kotlin Multiplatform в большом проекте
(Dev Ru) Как «думают» LLM: внутренняя механика языковых моделей
(Dev Ru) Как AI научился рассуждать — Reinforcement learning, reasoning models

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

Большинство лаунчеров для Android повторяют одну и ту же концепцию сетки иконок. Чтобы открыть приложение, нужно листать бесконечные рабочие столы и тянуться пальцем до нужной иконки (а она может быть и в верхнем углу экрана, поэтому часто приходится использовать вторую руку).

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

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

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

Среди веб-решений (GigaIDE, GitLab Web IDE и другие) мне больше всего нравится code-server (coder) — полноценная веб-версия Visual Studio Code, которая поддерживает большинство привычных плагинов. В статье я подробно расскажу, как развернуть облачную среду разработки, привязать ее к планшету и написать собственный плагин для автоматизации сборки под «Аврору ОС».

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
🤮1
Media is too big
VIEW IN TELEGRAM
Arkive - плагин Gradle для генерации веб-каталога экранов

Arkive превращает ваши первью Compose и XML-представлений в просматриваемый каталог экранов вашего приложения — запись производится на JVM с помощью Roborazzi (или, при желании, Paparazzi), без использования устройств или эмуляторов, без написания тестового кода.

Arkive на GitHub: https://github.com/infinum/arkive
Платформа: Android
⭐️: 17

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

Lucide Swift - библиотека для использования иконок Lucide с поддержкой векторной графики и типобезопасностью, нативная для SwiftUI. Более 2112 иконок (1738 обычных + 374 экспериментальных Lab), отображаемых как настоящие векторные фигуры из данных SVG-путей, без каких-либо зависимостей в рантайме.

Фичи: 

• Настоящий векторный рендеринг: SVG-пути преобразуются в нативные SwiftUI Shape, поэтому иконки можно масштабировать до любого размера без пикселизации.
• Типобезопасный API: 1 738+/1 792 enum-вариантов с полной поддержкой автодополнения Xcode. Проверка на этапе компиляции предотвращает ошибки вида «иконка не найдена» во время выполнения.
• Поддержка Lucide Lab: полная интеграция 374+ экспериментальных иконок из репозитория Lucide Lab.
• Ноль зависимостей: чистая реализация на Swift без внешних runtime-зависимостей — только Swift и SwiftUI.
• Нативная интеграция со SwiftUI: библиотека построена на протоколе SwiftUI Shape и поддерживает стандартные модификаторы, включая .stroke(), .fill(), .frame() и другие.
• Поддержка нескольких платформ: iOS 14+, macOS 11+, tvOS 14+, watchOS 7+, visionOS 1+.
• Настраиваемая толщина линии: толщину обводки можно задавать через параметр strokeWidth.
• Абсолютная толщина линии: absoluteStrokeWidth позволяет сохранять одинаковую толщину обводки независимо от размера иконки.
• Интеграция с Label: нативная поддержка SwiftUI Label для меню, панелей инструментов и кнопок.
• Высокая производительность: поиск иконки через enum примерно в 7 раз быстрее подходов на основе Bundle, а рендеринг через Shape — примерно в 2 раза быстрее растеризации PDF.

Lucide Swift на GitHub: https://github.com/ajaxjiang96/lucide-swift
Платформа: iOS
⭐️: 38

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Как я перестал платить за macOS-минуты: перенос iOS-сборки с GitHub Actions на Xcode Cloud, с цифрами

Есть один факт про GitHub Actions, который многие мобильные разработчики узнают только из счёта: одна минута на macOS-раннере стоит десять минут на Linux. Не в деньгах — в «бесплатных» минутах, которые входят в тарифный план. Ваш пятиминутный iOS-архив съедает из квоты столько же, сколько пятьдесят минут Linux-тестов. И пока Android-джоба тратит 6 минут квоты, её соседка по воркфлоу тратит 45.

Ниже — история одного переезда: как я вынес iOS-деплой из GitHub Actions в Xcode Cloud, что при этом сломалось (семь раз), что измерил и почему теперь iOS-релиз стоит мне ноль минут GitHub Actions и 6 минут оплачиваемого compute-времени Apple при 25 бесплатных часах в месяц.

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

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

Недавно я глубоко погрузился в профилирование, пытаясь понять, почему один экран Compose в продакшене ощущался тяжелее, чем должен. То, что начиналось как обычная проверка производительности, быстро превратилось во что-то большее: Layout Inspector и Memory Profiler показывали совершенно разные картины происходящего. Вот что я обнаружил, что исправил и что хотел бы знать раньше.

Статья: https://apptractor.ru/info/articles/rekompozitsii-kotoryh-ne-bylo.html
Платформа: Android

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