AppFiles - Mobile Development – Telegram
AppFiles - Mobile Development
2.13K subscribers
2.77K photos
38 videos
11 files
3.7K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Повторяю стекломорфизм в 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
Внедрение ИИ в ваше приложение: используем Foundation модели Apple

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

Статья: https://apptractor.ru/info/articles/foundation-models.html
Платформа: iOS
👍3
Feeder - открытое приложение для чтения лент новостей (RSS/Atom/JSONFeed) для Android, созданная еще в 2014 году и до сих пор обновляемая для соответствия новым технологиям. С Feeder вы можете читать последние новости и сообщения с ваших любимых сайтов. Feeder можно использовать бесплатно, он работает локально на вашем устройстве. Ваши данные на 100% конфиденциальны.

Feeder на GitHub: https://github.com/spacecowboy/Feeder
Платформа: Android
⭐️: 2.1K
📺 Видео и подкасты за неделю на @AppFiles

(iOS Ru) Как перевезти 250+ SPM модулей из динамики в статику и не сойти с ума
(iOS Ru) Пагинация: от идеи до реализации
(iOS Ru) Стратегии ускорения старта на практике
(iOS En) AlarmKit - Live Activities
(iOS En) Interactive Snippets - App Intents
(iOS En) Swift 6.2: Apple has listened to developer feedback!
(iOS En) Gradient Generator using On-Device Intelligence - FoundationModels
(iOS En) What's New in SwiftUI - WWDC 2025
(And Ru) Адаптация мобильного приложения под ТВ-платформы
(And Ru) Баттл codegen-инструментов от разработчиков дизайн-систем
(And Ru) История, принципы и концепции библиотеки навигации Decompose
(And Ru) Что нового в Android 16 для разработчиков и пользователей
(And Ru) Как ускоряют Android-приложения в Яндексе: интервью с инженером
(And En) Now in Android: 118 –What’s new in Android development at Google I/O 2025 (part 2)
(And En) Navigating the future with Jetpack Navigation 3 - Core Concepts
(And En) Bot to the future: Two years later
(And En) Build a mobile app using the Home APIs on Android
(And En) Beginner's Crash Course to the New Navigation 3 Library (Android & KMP)
(And En) Kotlin Coroutine Gotchas
(And En) Kotlin Coroutines - Debugging Tools Overview
(And En) Single-Threaded Coroutines in Kotlin
(And En) Let's try implementing Nested Navigation with the New Navigation 3 Library
(Crs Ru) Firebase + KMP: Разрушаем мифы и создаем гибкие решения
(Crs Ru) Duit – как создать эффективный BDUI-фреймворк для Flutter
(Crs Ru) Аудит безопасности мобильных приложений
(Crs En) Full Guide to Material3 Theming in Compose Multiplatform
(Dev Ru) Как ускорить карьеру в ИТ? Перенимаем мировой опыт: от Гарварда и Стэнфорда до Кремниевой долины
(Dev Ru) Легаси. Оптимизации. Обфускация. Героическая борьба с Minecraft
(Dev Ru) Алгоритмы на собеседовании: ритуал или необходимость?
(Dev Ru) Как не сойти с ума от FOMO из-за AI
(Dsg En) How to Make Apple's Liquid Glass Effect In Figma

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

(iOS Ru) iOS-приложения под защитой Apple! Или нет?
(And Ru) Как избавиться от рекурсии, или Как мой код попал в Google
(And Ru) Микширование аудиопотоков в Android
(And Ru) Как мы победили техдолг в проекте Android RuStore
(Crs Ru) Опыт внедрения Kotlin и Compose Multiplatform в продакшн-решение
(Dev Ru) Как решать задачи на Leetcode
(Dev Ru) Как устроен сетевой код в играх
Please open Telegram to view this post
VIEW IN TELEGRAM
Создание фракталов в Kotlin и Jetpack Compose

Автор рассказывает о создании Android‑приложения, которое сгенерирует и визуализирует фрактал Мандельброта с возможностью плавного масштабирования и панорамирования на любом уровне детализации — ограниченным лишь точностью типа Double. Он начинает с объяснения математической основы: фрактал строится по простой рекуррентной формуле. Далее автор подробно показывает, как в Jetpack Compose реализовать саму отрисовку. Используется компонент Canvas и рендеринг по пикселям. Для расчётов применяются корутины Kotlin, чтобы разбить задачу на параллельные участки и избежать блокировки UI. Благодаря этому генерация остаётся отзывчивой даже при глубоком зуме .

Особое внимание уделяется взаимодействию с пользователем: применяется Modifier для обработки жестов, таких как масштабирование двумя пальцами и перемещение. Это позволяет динамически изменять центр и уровень масштабирования фрактала прямо на экране. Кроме того, обсуждаются вопросы производительности: оптимизация обхода пикселей, управление максимальным числом итераций и адаптация к возможным точностным ограничениям типа Double .

В заключительной части автор подчёркивает, что, несмотря на кажущуюся простоту формулы, эффективная отрисовка фракталов — привычная задача для десктопов — в мобильных условиях требует продуманного архитектурного подхода. И Jetpack Compose в связке с Kotlin‑корутинами позволяет получить плавную, визуально сложную визуализацию даже на смартфоне .

Статья — отличное руководство для тех, кто хочет совместить математическую визуализацию с современной Android‑архитектурой, научиться организовывать асинхронную отрисовку и работать с жестами в Compose.

Статья: https://proandroiddev.com/generating-fractals-in-kotlin-with-jetpack-compose-c94bf37b39da (как читать M)
Платформа: Android
Полное руководство по фреймворку Foundation Models

Подробный обзор нового фреймворка Foundation Models от Apple, представленного на WWDC 2025. Этот инструмент позволяет запускать LLM прямо на устройствах Apple — без отправки данных в облако, с высокой производительностью и сохранением приватности.

Автор статьи описывает простейший пример: с помощью макроса #Playground, SwiftUI и LanguageModelSession достаточно нескольких строк, чтобы отправить запрос модели — например, «перечисли штаты США» — и получить ответ. Затем демонстрируется потоковая генерация, позволяющая ускорить реакцию интерфейса за счёт отображения частичного результата по мере его поступления.

Одним из ключевых достоинств фреймворка является guided generation — возможность описания своих структур (Swift‑структуры и перечисления с аннотациями @Generable и @Guide) и получения от модели строго типизированного ответа. В примере предлагается рецепт с ингредиентами и объёмами, упорядоченными в иерархии, доступной напрямую в коде.

Дальше автор показывает применение в SwiftUI‑приложении: выбор ингредиентов, отправка промпта, асинхронная генерация списка рецептов через поток, отображение и сохранение результата с помощью SwiftData. Кроме того, затрагивается тема инструментов — tools. Поясняется, как создать кастомный RecipeTool, зарегистрировать его в LanguageModelSession, чтобы модель могла при необходимости сама вызвать API и получить данные извне.

Отдельно рассказывается о производительности: рекомендуется заранее прогревать модель с помощью session.prewarm(), проектировать структуры без лишних свойств, учитывать лимит токенов (4096) и строить инструкции на английском за лучшую стабильность.

В заключении подчёркивается, что Foundation Models — это новый этап on‑device AI от Apple: генерация текстов, структурированные данные, инструменты, сохранение и SwiftUI‑интеграция — всё работает локально. При этом автор обещает обновлять статью по мере расширения фреймворка и ссылается на курс и репозиторий с примерами.

Статья: https://azamsharp.com/2025/06/18/the-ultimate-guide-to-the-foundation-models-framework.html
Платформа: iOS
👍5
VLCKit — универсальная мультимедийная библиотека для любых задач воспроизведения аудио и видео на macOS, iOS и tvO. VLCUI - обертка этой библиотеки для SwiftUI. Поддерживает воспроизведение, активную потоковую передачу и обмен медиафайлами.

VLCUI на GitHub: https://github.com/LePips/VLCUI
Платформа: iOS
⭐️: 50
👍1
Настраиваем CI/CD Android-проекта, часть 1. Начало

Если коротко - моя главная мотивация написания "еще одной статьи про CI/CD на Android" - помочь себе и другим, закрыть свои потребности при работе с CI/CD. К тому же, на мой взгляд, каждая статья на эту тему получается разной - ведь задачи у всех разные.

Статья: https://habr.com/ru/companies/scanny/articles/918364/
Платформа: Android
FinalTextOnPath.webm
632.6 KB
Анимация текста вдоль траектории в Jetpack Compose

В этой статье мы научимся рисовать текст по траектории (path) внутри холста Compose. Это можно использовать для создания причудливой графики или анимации строки текста.

Статья: https://apptractor.ru/info/articles/animatsiya-teksta-vdol-traektorii-v-jetpack-compose.html
Платформа: Android
Трехмерные графики в SwiftUI: новый уровень визуализации данных

Apple сделала тихую, но значимую ставку на 3D-графики в SwiftUI — и это не просто эффектная фича, а потенциальный поворотный момент для data-driven интерфейсов.

В статье подробно разобран свежий API, появившийся в iOS 26 - Chart3D. Теперь вы можете буквально “вытянуть” ось Z из привычных Charts, и получить интерактивные объемные визуализации.

Что важно:

🎛 Chart3DStack позволяет настраивать глубину, перспективу, тени и анимации без танцев с SceneKit.
📊 Уровень интеграции с существующим Charts API — бесшовный. Используются те же модификаторы (.foregroundStyle, .annotation, .chartXAxis и пр.), просто добавляется третье измерение.
🧠 Поддерживается VoiceOver и dynamic type — 3D не в ущерб доступности.

Зачем это:

• Улучшенная читаемость сложных данных (например, при сравнении категорий по времени и регионам).
• Вау-эффект в аналитических дашбордах и BI-решениях прямо на iOS.
• Возможность нативной замены WebGL/Unity-решений в корпоративных приложениях.

Если вы делаете продукт с данными — не игнорируйте эту новинку. 3D-графики в SwiftUI уже production-ready. Apple закладывает этим фундамент для spatial computing и VisionOS. Начать экспериментировать стоит уже сегодня, пока конкуренты не обогнали.

Статья: https://swiftshorts.com/2025/06/19/swiftui-3d-charts-add-a-whole-new-dimension-to-your-data/
Платформа: iOS
Any Distance выложили в Open Source

Дэниел Кунц открыл код Any Distance, приложения, выигравшего Apple Design Award в 2023 году.
Сегодня я открываю исходный код Any Distance, приложения для фитнес-трекера, над которым я работал вместе с несколькими другими людьми почти 5 лет. Any Distance начинался как способ поделиться красивой графикой ваших тренировок в социальных сетях. В конечном итоге он превратился в венчурный стартап, нацеленный на свержение Strava. Хотя мы так и не приблизились к этой цели или даже к соответствию продукта рынку (на мой взгляд), в итоге мы создали много интересного программного обеспечения, которым я до сих пор горжусь.

Я провел много времени, экспериментируя с различными комбинациями SwiftUI, UIKit и Metal, чтобы сделать Any Distance максимально красивым и производительным. Многое из того, что мы сделали, до сих пор не было воспроизведено (насколько мне известно). Я не буду утверждать, что все, что мы сделали, — это лучший способ что-то сделать. Но этого оказалось достаточно, чтобы получить премию Apple Design Award.

Any Distance на GitHub: https://github.com/Any-Distance/any-distance-ios
Платформа: iOS
⭐️: 595