TGViewer
Channel Public Channel
AppFiles - Mobile Development

AppFiles - Mobile Development

@applib

Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Subscribers
2.17K
Photos
3.2K
Videos
47
Links
4.3K

Showing posts older than #4429 · Back to latest

Older Posts 20 shown
Post #4428 328
Norch - скрипт, который прячет чёлку MacBook

Репозиторий нашего читателя:
Я долгое время пользовался бесплатным приложением TopNotch, которое прячет чёлку на MacBook. После обновления на macOS 27 оно перестало работать. Автор обещал исправление, но через пару недель, а ждать не хотелось. Поэтому я вместе с Claude написал простой бесплатный скрипт на Swift, который делает то же самое.

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

Norch на GitHub: https://github.com/mezhevikin/norch
Платформа: iOS
⭐️: 4

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 😁 3
  • 👎 1
Post #4427 343
Нативная разработка снова стала будущим мобильных приложений в Shopify

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

То, что мы обнаружили, привело нас обратно к нативной разработке.

Статья: https://apptractor.ru/info/articles/nativnaya-razrabotka-snova-stala-buduschim-mobilnyh-prilozheniy-v-shopify.html
Платформа: кроссплатформа

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 👍 2
  • 😁 2
Post #4426 367
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: код, инструменты, практики, производительность
Post #4425 573
Рекомпозиции, которых не было

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 👍 1
Post #4424 490
Как я перестал платить за 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: код, инструменты, практики, производительность
  • 👏 1
Post #4423 409
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: код, инструменты, практики, производительность
  • 🔥 2
Post #4422 375
Arkive - плагин Gradle для генерации веб-каталога экранов

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • ❤ 1
Post #4421 461
Разработка на Авроре под Аврору: разворачиваем Coder в облаке и пишем плагин для VS Code

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 🤮 1
Post #4420 366
Как я написал круговой лаунчер на Jetpack Compose: тригонометрия свайпов и системные грабли

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

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4419 2.7K
📺 Видео и подкасты за неделю

• (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: код, инструменты, практики, производительность
Post #4418 309
Повышение качества 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: код, инструменты, практики, производительность
Post #4417 298
SwiftUIBackportKit - обратная совместимость с современными SwiftUI API с поддержкой более старых версий iOS

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4416 343
Как создать сверхперсонализированный пейвол с помощью 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: код, инструменты, практики, производительность
  • 👍 1
Post #4415 345
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: код, инструменты, практики, производительность
Post #4414 366
Один код для многих платформ - вот что вам никто не расскажет о 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: код, инструменты, практики, производительность
Post #4413 346
Android CameraX: детекция лица в реалтайме для биометрии

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

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4412 308
Kadr - декларативное создание видео для платформ Apple

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

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

Kadr на GitHub: https://github.com/SteliyanH/kadr
Платформа: iOS
⭐️: 48
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Post #4411 377
Надежное выполнение фоновых задач в 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: код, инструменты, практики, производительность
  • 👍 1
Post #4410 365
Шпаргалка: Kotlin Coroutines Channels и Actor‑модель

Пытаюсь лучше понять работу Kotlin Coroutines. Беру небольшую тему про Kotlin Coroutines и пытаюсь разобраться и написать шпаргалку (максимально кратко и лаконично). Сегодня поговорим про Каналы (Channel) и паттерн Actor.

В предыдущих частях я писал, что обычные suspend‑функции возвращают результат только один раз. Но что делать, если у нас есть непрерывный поток данных, который асинхронно генерируется в одной корутине, а обрабатываться должен в другой (или даже в нескольких)? Нам нужна потокобезопасная «труба». В мире корутин этой трубой является Channel.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • ❤ 1
Post #4409 315
DroidGauge - Local-first регрессионное тестирование Android-приложений

DroidGauge — это инструмент командной строки, ориентированный на локальную работу, для воспроизводимых измерений производительности приложений Android. Он не требует root-доступа, APK-файла на устройстве, облачных сервисов или внешних ресурсов для создания отчетов. Он выявляет регрессии производительности и энергопотребления Android локально с помощью одной команды adb и готового автономного отчета.

Возможности:

• Сбор показателей CPU, PSS-памяти, рывков при отрисовке кадров, батареи, температуры и сетевой активности отдельных приложений — если соответствующие данные доступны в используемой версии Android.
• Устойчивый сбор данных: недоступные команды и поля отмечаются как отсутствующие метрики, а не приводят к прерыванию всего запуска.
• Стабильный JSON-формат schema_version: 1 со средним значением, p50, p95, минимумом, максимумом и изменением от первого до последнего измерения.
• Адаптивные HTML-отчёты в тёмной теме со встроенными SVG-графиками, без CDN, JavaScript, внешних шрифтов и дополнительных файлов.
• A/B-сравнение с учётом направления изменения (improved, regressed, stable) и детерминированными выводами на основе правил.
• Проверка в CI с кодом выхода 2 при обнаружении настроенных регрессий.
• Не собираются логи, списки приложений, содержимое экрана или другие персональные данные.

DroidGauge на GitHub: https://github.com/RuizheGu0/droidgauge
Платформа: Android
⭐️: 4

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
  • 👍 1
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →