AppFiles - Mobile Development – Telegram
AppFiles - Mobile Development
2.13K subscribers
2.76K photos
38 videos
11 files
3.7K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
FinalRibbon.webm
112.3 KB
Оборачиваем любой Composable красивой ленточкой

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

Статья: https://apptractor.ru/info/articles/oborachivaem-lyuboy-composable-krasivoy-lentochkoy.html
Платформа: Android
Использование ИИ и Cursor для локализации каталогов строк Xcode

Каталоги строк Xcode отлично подходят для локализации, но по сравнению со старыми файлами .strings затрудняют добавление новых языков. Давайте посмотрим, как экспортировать и импортировать языки каталога строк, а также как использовать Cursor для перевода приложения на новые языки с помощью искусственного интеллекта.

Статья: https://apptractor.ru/info/articles/ispolzovanie-ii-i-cursor-dlya-lokalizatsii-katalogov-strok-xcode.html
Платформа: iOS
👍3
Кэширование фреймворков — популярный метод, позволяющий сократить время сборки во многих крупных проектах. Некоторые из наиболее известных инструментов в этой категории — cocoapods-binary-cache, Rugby и XCRemoteCache. Rugby и cocoapods-binary-cache специально разработаны для проектов на базе CocoaPods, а XCRemoteCache подходит для более общей структуры проектов. Однако все три инструмента имеют одно и то же ограничение: отсутствие поддержки пакетов SPM/Swift.

Инструмент xccache призван восполнить этот пробел. Долгосрочная цель этой инициативы — сделать его универсальным инструментом кэширования для iOS-проектов, включая структуры на базе CocoaPods. Инструмент управляет специальным пакетом umbrella для работы с кэшированными зависимостями в проекте. В случае попадания в кэш он заменяет исходную зависимость (с исходным кодом) на соответствующую предварительно собранную зависимость.

Xccache на GitHub: https://github.com/trinhngocthuyen/xccache
Платформа: iOS
⭐️: 45
1👍1
Что нового в SwiftUI после WWDC25

Всемирная конференция разработчиков 2025 уже идет, и это идеальное время для изучения самых значительных изменений и дополнений к фреймворку SwiftUI. Давайте узнаем обо всех новых интересных функциях, которые Apple приготовила для нас в этом году.

Статья: https://apptractor.ru/info/articles/chto-novogo-v-swiftui-posle-wwdc25.html
Платформа: iOS
Поддержка приложения для Android - это большой труд

Почему количество Android-приложений на Google Play стремительно сокращается? Автор, ведущий хобби-проект MusicSync, объясняет это очевидными, но часто недооцененными причинами:

1. Java → Kotlin
• Старые Java‑проекты сталкиваются с несовместимостью, особенно если зависимости используют корутины или Jetpack Compose — они доступны только на Kotlin

2. Ломающее обновления от Google
• Переход MediaPlayer → ExoPlayer V1 → ExoPlayer V2 → media3 без обратной совместимости.
• Google Auth библиотека сломала вход на API ≤ 26.
• SDK версии устаревают, UI‑гайдлайны меняются, поддержка старых Android прекращается

3. Старые сторонние библиотеки больше не поддерживаются
• Picasso, Glide, OkHttp, EventBus, RateThisApp — некоторые из них заброшены, другие требуют миграции или устраивают ломку API

4. Версии и апгрейды на каждом шагу
• Нужно постоянно поддерживать minSdk, targetSdk, Gradle, Android Studio, версии библиотек… и всё это связано между собой

5. Принудительные обновления
• Google требует обновляться не только в коде, но и в архитектуре, инструментах, структуре проекта.

⚠️Итог: поддержка Android‑приложения — это постоянно растущие временные затраты и технический долг. Возможно, для хобби‑проектов будет разумнее выбрать веб‑UI, где изменения не так объёмно влияют на экосистему.

Статья: https://ashishb.net/programming/maintaining-android-app/
Платформа: Android
2👍1
Animate.compose - мощная библиотека анимаций Kotlin Multiplatform для Jetpack Compose с более чем 90 готовыми к использованию анимациями.

Фичи: более 90 готовых анимаций, простой API, на основе ключевых кадров — плавная, естественная анимация с плавными переходами, поддержка Android, iOS, Desktop, и Web, быстродействующая, настраиваемая, с интерактивной игровой площадкой для тестирования.

Animate.compose на GitHub
: https://github.com/nomanr/animate-compose
Платформа: Android/кроссплатформа
⭐️: 91
10 правил Билла Аткинсона по созданию более человечных интерфейсов

Каждый раз, когда вы перетаскиваете вектор или выделяете область в Figma, вы опираетесь на идеи Билла Аткинсона, легендарного инженера Apple, который скончался в прошлый четверг. В Figma мы испытываем огромную благодарность Аткинсону, чье убеждение в том, что сложные творческие инструменты должны быть интуитивно понятными, оказало непосредственное влияние на нашу миссию. Когда наши пользователи манипулируют векторной графикой в режиме реального времени, они опираются на QuickDraw, графический движок Аткинсона, который сделал возможным визуальный интерфейс Mac. Когда они сотрудничают командами, они пользуются преимуществами MacPaint, первого интуитивного растрового редактора, который демократизировал инструменты дизайна. Когда они проектируют интерфейсы, они обязаны HyperCard, революционному инструменту, который позволяет непрограммистам создавать интерактивное программное обеспечение.

1. Проектируйте с учетом ограничений, а не смиряйтесь с ними
2. Создавайте инструменты, которые демократизируют творчество
3. Сделайте интерфейсы незаменимыми
4. Ставьте под сомнение «очевидные» решения
5. Оптимизируйте для удовольствия, а не только для функциональности
6. Разрабатывайте с учетом конечного результата
7. Скрывайте сложность за простотой
8. Кодируйте для человеческого восприятия, а не против него
9. Создавайте инструменты, которые обучают на практике
10. Создавайте платформы, а не просто продукты

Статья: https://apptractor.ru/info/articles/10-pravil-billa-atkinsona-po-sozdaniyu-bolee-chelovechnyh-interfeysov.html
Платформа: дизайн
👍2
Что нового в UIKit после WWDC25

2019 год стал годом, когда Apple представила SwiftUI. В то время отклики пришли быстро, и они были, ну, немного сенсационными. «UIKit мертв», «Он устарел!», «Теперь бесполезен!»… список можно продолжать. Но вот мы на 25-ом даб-дабе, и в нем анонсировано еще больше улучшений UIKit.

UIKit по-прежнему является фреймворком, поддерживающим iOS, и если вы заглянете под капот достаточно далеко… он поддерживает и SwiftUI. По традиции, давайте посмотрим, что Купертино и друзья™️ приготовили для нас в этом году.

Статья: https://apptractor.ru/info/articles/chto-novogo-v-uikit-posle-wwdc25.html
Платформа: iOS
AppFiles - Mobile Development
Поддержка приложения для Android - это большой труд Почему количество Android-приложений на Google Play стремительно сокращается? Автор, ведущий хобби-проект MusicSync, объясняет это очевидными, но часто недооцененными причинами: 1. Java → Kotlin • Старые…
Как правильно считать шаги на Android: полное руководство для разработчика от сенсоров до Health Connect

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

Статья: https://habr.com/ru/articles/918908/
Платформа: Android
3
ProgressWebViewController - WebViewController, реализованный с помощью WKWebView, с прогресс-баром в панели навигации. WebViewController — это веб-браузер, похожий на Safari. Можно кастомизировать кнопки, просматривать локальные страницы, изменять user agent, поддерживает специальные URL вроде телефонов и App Store и прочее.

ProgressWebViewController на GitHub: https://github.com/kf99916/ProgressWebViewController
Платформа: iOS
⭐️: 86
👍2
Я обогнал Google?

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

Статья: https://habr.com/ru/articles/918562/
Платформа: Android
🤷‍♂1🤔1
Повторяю стекломорфизм в Android на AGSL шейдерах (лучше бы я этого не делал)

Всё новое - это забытое старое? Как бы да... но нет. Я прочёл десятки комментариев о том, что подобное уже было в прошивках китайских смартфонов, таких как Сяоми или чё там ещё у Китая. На самом деле то, что показали в бета версии iOS - не только не встречалось в Android нигде ранее, но и не появится в Android ближайшее время.

Если вы приглядитесь внимательно - этот стеклянный материал вообще не так прост, как это может показаться на первый взгляд. Это - не размытие. Мы видим искажения изображения под "стеклом", а на самом "стекле" видим отражения того, что находится рядом. Более того, вокруг "стекла" есть небольшой контур отражение света, который меняется в зависимости от положения устройства.

Ну ладно. Челлендж - повторить что-то подобное в Android. Не берусь говорить, что это получится так же хорошо. Да и что получится вообще хоть что-нибудь...

Статья: https://habr.com/ru/articles/918030/
Платформа: Android
👍2
Используем MetricKit: что на самом деле делает ваше приложение на устройствах пользователей

Представьте себе следующую ситуацию: ваше приложение безупречно запускается во время разработки, с блеском проходит все бета-тесты и получает одобрение для App Store. Но как только оно попадает в руки пользователей... начинается хаос. Появляются сбои, замедления и жалобы на потребление энергии. Звучит знакомо?

Представляем MetricKit — супергерой мира Apple для мониторинга производительности. Представленный на WWDC 2019, этот фреймворк на базе Swift собирает реальные данные о производительности прямо с устройств пользователей.

С MetricKit вы больше не будете действовать вслепую после запуска. Вы получите подробный отчет о том, как ваше приложение ведет себя в производственной среде.

Статья: https://apptractor.ru/info/articles/metrickit.html
Платформа: iOS
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
FigX - это практичный CLI инструмент для импорта ресурсов дизайна из Figma в вашу кодовую базу. Создан для разработчиков, которые ценят явный контроль и воспроизводимость.

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

⚡️ Быстро: FigX экспортирует и преобразует ресурсы из Figma значительно быстрее, чем figma-export, и на порядок быстрее, чем делать это вручную — единственным ограничением скорости здесь является ограничение скорости REST API Figma 😅

⚖️ Правильно: результат импорта ресурсов в ваш проект точно отражает то, что определено в конфигурации FigX — не больше и не меньше.

🛡 Надежно: импорт ресурсов через FigX дает одинаковый результат на любой машине и любой ОС. Невоспроизводимые результаты могут возникать только из-за изменений, внесенных дизайнерами в Figma, а не из-за разработчиков или инструмента.

♻️ Кэширование: сетевые запросы минимизированы. Извлекаются только измененные ресурсы. Кэш переносим между машинами, что делает его идеальным для конвейеров CI и автоматизированных рабочих процессов.

FigX на GitHub: https://github.com/tonykolomeytsev/figx
Платформа: Android
⭐️: 14
Функциональное программирование в Android. Знакомство с парадигмой

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

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

Статья: https://habr.com/ru/companies/dododev/articles/917222/
Платформа: Android
Кроссплатформенный опыт Surf с Flutter Web

Flutter — удобный кроссплатформенный мобильный фреймворк, который позволяет разрабатывать классные приложения для телефонов. Но про другие платформы, которые поддерживаются Flutter, известно достаточно мало. И речь сейчас про Flutter Web.

Статья: https://habr.com/ru/companies/surfstudio/articles/916840/
Платформа: кроссплатформа
От массивных представлений SwiftUI до повторно используемых компонентов: Root MVVM подход к модульным интерфейсам

Большие SwiftUI-вьюшки, перегруженные логикой и данными, — один из самых распространённых антипаттернов в проектах начинающих (и не только) разработчиков. Они:

• сложны в поддержке,
• плохо тестируются,
• часто ломают Xcode Previews,
• мешают переиспользованию кода

Что делать? Разделите представления на два типа:

• Content views — отвечают только за UI. Получают простые типы (String, URL, Int) и ничего не знают о бизнес-логике.
• Root views — “склеивают” UI и модель, управляют состоянием, ViewModel'ями, сетевыми запросами и навигацией.

Такой подход:

• проще тестировать,
• удобнее переиспользовать,
• легче просматривать в Preview без моков и магии

И главное — не каждая вьюшка нуждается в ViewModel. Это миф. Только root view взаимодействует с моделью, контент-вью — просто отображает.

Статья: https://matteomanferdini.com/swiftui-massive-reusable-views/
Платформа: iOS
👍3
StructuredQueries - эта библиотека от Point-Free предоставляет набор инструментов, которые позволяют вам писать типобезопасные, выразительные и компонуемые SQL-выражения с использованием Swift. Она может помочь вам обнаружить простые ошибки при написании ваших запросов, такие как опечатки в именах столбцов или сравнение двух разных типов данных. Просто присоединив макросы к типам, представляющим схему вашей базы данных, вы получаете мгновенный доступ к широкому набору API для построения запросов, от простых до самых сложных.
Reminder
.select {
($0.priority,
$0.noscript.groupConcat())
}
.where { !$0.isCompleted }
.group(by: \.priority)
.order { $0.priority.desc() }
// => [(Int?, String)]

StructuredQueries — это не ORM или новый язык запросов, который вам нужно изучать: его API разработаны для чтения, близкого к SQL, который он генерирует, хотя они часто более лаконичны и всегда безопаснее.

StructuredQueries на GitHub: https://github.com/pointfreeco/swift-structured-queries
Платформа: iOS
⭐️: 219
1
Не хотите поговорить о Kotlin Contracts?

За время собеседований я заметил одну любопытную вещь: даже опытные котлиноводы частенько не в курсе такой мощной фичи, как Kotlin Contracts. Этой серией статей я хочу простым человеческим языком показать, зачем нужны Contracts, как их использовать на практике и как они работают внутри.

Статья: https://habr.com/ru/companies/alfa/articles/916536/
Платформа: Android
Инструмент с открытым исходным кодом для ускорения запуска iOS-приложений

Sentry совместно с Emerge Tools открыли исходный код ключевого компонента своего инструмента Launch Booster — теперь он доступен как Swift‑пакет под названием FaultOrdering. Этот инструмент помогает ускорить запуск iOS‑приложений за счёт генерации order‑файлов, которые оптимизируют расположение кода в бинарнике. В результате уменьшается количество обращений к памяти при cold start и достигается заметное ускорение запуска — по данным авторов, до 20%.

Особенность FaultOrdering в том, что для его использования не нужно вносить изменения в код приложения. Сбор данных происходит через встроенный отладчик, который ставит брейкпоинты на ключевые функции и отслеживает их выполнение во время UI‑тестов. Итоговый order‑файл автоматически прикрепляется к результатам теста и может быть применён в процессе сборки приложения.

Инструмент легко встраивается в CI/CD и позволяет получать прирост производительности практически «из коробки». Он особенно полезен на этапах релиза, когда критична каждая секунда времени запуска.

Sentry обещает, что это только начало серии open-source решений от команды Emerge Tools. Судя по всему, оптимизация старта приложений станет проще и доступнее для широкого круга iOS‑разработчиков.

Статья: https://blog.sentry.io/open-source-tool-speed-up-ios-app-launch/
Платформа: iOS
Мой перевод статьи: https://apptractor.ru/info/articles/faultordering.html
👍5
Чему я научился, проведя реверсинжиниринг собственного приложения для Android

Автор провёл интересный эксперимент: скачал и декомпилировал собственное Android-приложение, чтобы посмотреть, что увидит злоумышленник. В процессе он нашёл несколько серьёзных проблем.

Во-первых, в коде остались захардкоденые ключи Firebase, что делает их уязвимыми для утечки. Во-вторых, в strings.xml лежали конфиденциальные строки и флаги, которые не предназначались для пользователей. Также в коде остались методы для тестирования и отладки вроде bypassLoginForQA() — они не вызывались, но полностью сохранились в сборке. В папке assets оказались тестовые токены и мок-данные, которые могли бы дать много информации о внутреннем API. Манифест содержал лишние разрешения, в том числе на доступ к SMS и камере, хотя эти функции не использовались. И наконец, классы и методы не были обфусцированы — их названия ясно указывали на структуру приложения.

После ревизии автор включил обфускацию через ProGuard, убрал чувствительные данные и разрешения, очистил манифест и удалил отладочные инструменты.

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

Статья: https://medium.com/@ravinnpawar/things-i-learned-from-reverse-engineering-my-own-android-app-a11fd2a0eb23
Платформа: Android
2