es
Feedback
AppFiles - Mobile Development

AppFiles - Mobile Development

Ir al canal en Telegram

Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.

Mostrar más
2 167
Suscriptores
-124 horas
-27 días
-430 días
Archivo de publicaciones
Учим Siri говорить о вашем любимом приложении: пример Walk Mate В посте на прошлой неделе я рассказал, как Walk Mate начал пе
Учим Siri говорить о вашем любимом приложении: пример Walk Mate В посте на прошлой неделе я рассказал, как Walk Mate начал передавать избранные маршруты в Spotlight. Добавляете маршрут в избранное и задаёте ему название. Ищете в Spotlight, нажимаете — маршрут открывается на карте. Для этого использовались App Intents без особых изысков: IndexedEntity для избранного маршрута, OpenIntent для его загрузки и небольшой маршрутизатор, чтобы нажатие в Spotlight попадало в тот же редьюсер, что и нажатие внутри приложения. Фраз для Siri тогда ещё не было. Spotlight уже знает, что прогулка существует. Теперь Siri в iOS 27 должна уметь говорить о ней. В прошлый раз Spotlight мог находить избранный маршрут. Теперь я делаю так, чтобы Siri могла говорить о нём, передавать его в Карты и открывать голосом. Статья: https://apptractor.ru/info/articles/uchim-siri-govorit-o-vashem-lyubimom-prilozhenii-primer-walk-mate.html Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Appstore PPP Prices - цены встроенных покупок по покупательной способности Appstore PPP Prices — бесплатная утилита с открыты
Appstore PPP Prices - цены встроенных покупок по покупательной способности Appstore PPP Prices — бесплатная утилита с открытым исходным кодом, которая приносит PPP-цены (паритет покупательной способности, ППС) в App Store. Она массово обновляет цены встроенных покупок и подписок сразу в 175+ странах: берёт коэффициенты из ВВП на душу населения, при желании подстраивает их через GPT под тип вашего приложения и записывает цены напрямую через App Store Connect API. Одна команда вместо вечера кликов по территориям. Фичи:  • Лёгкая установка — одна строка на macOS, Windows или Linux. Свой Python не нужен. • Дружелюбно для ИИ-агентов — Claude Code, Codex или Cursor поставят, настроят и запустят всё за вас. • Безопасно по умолчанию — --dry-run печатает все 174 цены до того, как применится хоть одна. • Ключ API не покидает вашу машину — ни аккаунта, ни загрузки, ни посредника. • 175+ территорий одной командой — и встроенные покупки, и подписки. • Реальные ценовые точки Apple — каждая цена в местной валюте и принимается App Store Connect. • Бесплатно и с открытым кодом (MIT) — подписка на утилиту для подписок не нужна. Appstore PPP Prices на GitHub: https://github.com/duceum/appstore-ppp-pricing-agent-skill Платформа: iOS ⭐️: 46 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Norch - скрипт, который прячет чёлку MacBook Репозиторий нашего читателя: Я долгое время пользовался бесплатным приложением T
Norch - скрипт, который прячет чёлку MacBook Репозиторий нашего читателя:
Я долгое время пользовался бесплатным приложением TopNotch, которое прячет чёлку на MacBook. После обновления на macOS 27 оно перестало работать. Автор обещал исправление, но через пару недель, а ждать не хотелось. Поэтому я вместе с Claude написал простой бесплатный скрипт на Swift, который делает то же самое. Работает так: даёшь ему картинку для обоев, а он добавляет сверху чёрную полосу под строкой меню и скругляет углы. Так решаются сразу две проблемы: чёлку не видно, и обои не выглядывают из-за углов окон, развёрнутых на весь экран. Размеры и радиус скругления скрипт берёт из системы, настраивать ничего не нужно, и в фоне ничего не висит.
Norch на GitHub: https://github.com/mezhevikin/norch Платформа: iOS ⭐️: 4 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Нативная разработка снова стала будущим мобильных приложений в Shopify Мы не держимся за решение только потому, что когда-то
Нативная разработка снова стала будущим мобильных приложений в Shopify Мы не держимся за решение только потому, что когда-то оно было успешным. Когда меняется одна из ключевых предпосылок, мы готовы вернуться назад и спросить себя, остаётся ли это решение правильным. LLM изменили одну из основных предпосылок, лежавших в основе нашего решения 2020 года, поэтому мы заново оценили наш мобильный стек, начиная с фундаментальных принципов. То, что мы обнаружили, привело нас обратно к нативной разработке. Статья: https://apptractor.ru/info/articles/nativnaya-razrabotka-snova-stala-buduschim-mobilnyh-prilozheniy-v-shopify.html Платформа: кроссплатформа 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Compose Recomposition Highlighter - тепловая карта рекомпозиций Compose Recomposition Highlighter — это инструмент для разраб
Compose Recomposition Highlighter - тепловая карта рекомпозиций Compose Recomposition Highlighter — это инструмент для разработчиков, не создающий дополнительной нагрузки на систему и позволяющий разработчикам и QA-инженерам визуально выявлять избыточные рекомпозиции, нестабильные параметры и бесконечные циклы рендеринга непосредственно на физических устройствах в виде тепловых карт, без привязки к Layout Inspector в Android Studio. Compose Recomposition Highlighter на GitHub: https://github.com/zakayothuku/compose-recomposition-highlighter Платформа: Android ⭐️: 15 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Рекомпозиции, которых не было Недавно я глубоко погрузился в профилирование, пытаясь понять, почему один экран Compose в прод
Рекомпозиции, которых не было Недавно я глубоко погрузился в профилирование, пытаясь понять, почему один экран Compose в продакшене ощущался тяжелее, чем должен. То, что начиналось как обычная проверка производительности, быстро превратилось во что-то большее: Layout Inspector и Memory Profiler показывали совершенно разные картины происходящего. Вот что я обнаружил, что исправил и что хотел бы знать раньше. Статья: https://apptractor.ru/info/articles/rekompozitsii-kotoryh-ne-bylo.html Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Как я перестал платить за macOS-минуты: перенос iOS-сборки с GitHub Actions на Xcode Cloud, с цифрами Есть один факт про GitH
Как я перестал платить за 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: код, инструменты, практики, производительность

Lucide Swift - типобезопасные Lucide иконки с векторным рендерингом Lucide Swift - библиотека для использования иконок Lucide
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: код, инструменты, практики, производительность

Arkive - плагин Gradle для генерации веб-каталога экранов Arkive превращает ваши первью Compose и XML-представлений в просматриваемый каталог экранов вашего приложения — запись производится на JVM с помощью Roborazzi (или, при желании, Paparazzi), без использования устройств или эмуляторов, без написания тестового кода. Arkive на GitHub: https://github.com/infinum/arkive Платформа: Android ⭐️: 17 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Разработка на Авроре под Аврору: разворачиваем Coder в облаке и пишем плагин для VS Code Среди веб-решений (GigaIDE, GitLab W
Разработка на Авроре под Аврору: разворачиваем Coder в облаке и пишем плагин для VS Code Среди веб-решений (GigaIDE, GitLab Web IDE и другие) мне больше всего нравится code-server (coder) — полноценная веб-версия Visual Studio Code, которая поддерживает большинство привычных плагинов. В статье я подробно расскажу, как развернуть облачную среду разработки, привязать ее к планшету и написать собственный плагин для автоматизации сборки под «Аврору ОС». Статья: https://habr.com/ru/companies/selectel/articles/1074074/ Платформа: разработка 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Как я написал круговой лаунчер на Jetpack Compose: тригонометрия свайпов и системные грабли Большинство лаунчеров для Android
Как я написал круговой лаунчер на Jetpack Compose: тригонометрия свайпов и системные грабли Большинство лаунчеров для Android повторяют одну и ту же концепцию сетки иконок. Чтобы открыть приложение, нужно листать бесконечные рабочие столы и тянуться пальцем до нужной иконки (а она может быть и в верхнем углу экрана, поэтому часто приходится использовать вторую руку). Я решил сделать SwipeLauncher — открытый лаунчер с круговыми меню, где любое действие или вложенное меню открывается одним свайпом из любой точки экрана. Статья: https://habr.com/ru/articles/1075198/ Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

📺 Видео и подкасты за неделю • (iOS En) AI-Assisted TDD in Practice (Swift + AI) • (iOS En) Vibe Coding a macOS App in Xcode
📺 Видео и подкасты за неделю(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: код, инструменты, практики, производительность

Повышение качества Android-приложений: сокращение использования памяти и улучшение миграции на другие устройства Google объяв
Повышение качества 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: код, инструменты, практики, производительность

SwiftUIBackportKit - обратная совместимость с современными SwiftUI API с поддержкой более старых версий iOS Небольшой, не тре
SwiftUIBackportKit - обратная совместимость с современными SwiftUI API с поддержкой более старых версий iOS Небольшой, не требующий зависимостей Swift-пакет для поддержки нескольких версий iOS в SwiftUI — без нарушения цепочек модификаторов, дублирования целых представлений или разброса проверок #available по всему коду. Подробнее об использовании библиотеки вы можете прочитать в статьеSwiftUIBackportKit на GitHub: https://github.com/EmadBeyrami/SwiftUIBackportKit Платформа: iOS ⭐️: 21 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Как создать сверхперсонализированный пейвол с помощью Apple Foundation Models Chorus — приложение для определения птиц по гол
Как создать сверхперсонализированный пейвол с помощью 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: код, инструменты, практики, производительность

Kwery - управление серверными данными для Android-приложения Kwery — это библиотека для управления серверным состоянием в And
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: код, инструменты, практики, производительность

Один код для многих платформ - вот что вам никто не расскажет о KMP Привет, Kotlin-разработчики. Скажу честно. Когда я начал
Один код для многих платформ - вот что вам никто не расскажет о 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: код, инструменты, практики, производительность

Android CameraX: детекция лица в реалтайме для биометрии Представим ситуацию: клиент хочет перевести большую сумму, используя
Android CameraX: детекция лица в реалтайме для биометрии Представим ситуацию: клиент хочет перевести большую сумму, используя мобильное приложение. Внутренние системы видят подозрительную активность и запрашивают проверку по селфи, человек наводит камеру на лицо — получает отказ. А все из-за того, что на бэкенде была получена размытая фотография потолка с кусочком лица пользователя, по которому никак не понять, действительно ли это владелец счета хочет провести операцию. Клиент звонит в поддержку, злится. Банк теряет доверие. Именно такие сценарии заставили нас серьезно заняться качеством записываемого фото. Статья: https://habr.com/ru/companies/tbank/articles/900136/ Платформа: Android 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Kadr - декларативное создание видео для платформ Apple SwiftUI для видео. Компонуйте, трансформируйте и экспортируйте видео н
Kadr - декларативное создание видео для платформ Apple SwiftUI для видео. Компонуйте, трансформируйте и экспортируйте видео на Swift — так, как действительно хочется писать код. Kadr - cовременная декларативная библиотека на Swift для создания видеокомпозиций на платформах Apple. Видео собираются с помощью DSL на основе result builder, а асинхронная работа построена на async/await. Поддерживаются многодорожечные временные шкалы, переходы, наложения, фильтры с анимацией по ключевым кадрам, собственные покадровые композиторы, привязанный ко времени звук с плавными перекрёстными переходами — всё это поверх AVFoundation и без сторонних зависимостей. Kadr на GitHub: https://github.com/SteliyanH/kadr Платформа: iOS ⭐️: 48   👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность

Надежное выполнение фоновых задач в iOS: часть 1 Можно подумать, что если у вас в кармане лежит суперкомпьютер, то он уж точн
Надежное выполнение фоновых задач в iOS: часть 1 Можно подумать, что если у вас в кармане лежит суперкомпьютер, то он уж точно должен уметь надёжно выполнять разные рутинные задачи в фоне, пока вы занимаетесь своими делами. Примерно так же, как  cron в Unix-системах делает это ещё с 1970-х. В первой статье этой серии из трёх частей я расскажу о начале своего пути с BGTaskScheduler — фреймворком Apple для запуска фоновых задач на iOS. А также о том, как методом проб, ошибок и наблюдений мне удалось добиться достаточно хорошей надёжности в моём приложении Calendar Copilot, которое я использую для синхронизации событий между календарями. Сразу раскрою итог: BGTaskScheduler не настолько надёжен, как cron, но добиться достаточно стабильного расписания можно. Правда, есть важная оговорка — вам или вашим пользователям придётся открывать приложение хотя бы раз в неделю или две. Если этого не делать, iOS со временем начинает реже запускать фоновые задачи, а затем вообще прекращает это делать ради экономии батареи. Статья: https://apptractor.ru/info/articles/nadezhnoe-vypolnenie-fonovyh-zadach-v-ios-chast-1.html Платформа: iOS 👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность