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

Новый подход улучшает сокращение ресурсов за счёт полной интеграции с существующим конвейером оптимизации кода. В новом подходе R8 одновременно оптимизирует как код, так и ссылки на ресурсы, гарантируя, что все ресурсы, на которые ссылается исключительно неиспользуемый код, идентифицируются как неиспользуемые и затем удаляются. Это полностью устраняет необходимость в безусловных правилах сохранения (unconditional keep rules), генерируемых AAPT2 (инструментом упаковки ресурсов для Android), и предоставляет гораздо более детальную и точную информацию для удаления неиспользуемого кода и ресурсов.

Статья: https://apptractor.ru/info/articles/povyshenie-proizvoditelnosti-prilozheniya-za-schet-luchshego-sokrascheniya-resursov.html
Платформа: Android
1
Translate Genie - генерация переводов в задаче Gradle

Translate Genie - мощная библиотека для Android, которая автоматически генерирует переводы для всех ваших строковых ресурсов с помощью простой задачи Gradle. 

Фичи: 

• Автоматический перевод: переводит строки, массивы строк и формы множественного числа из файла strings.xml по умолчанию
• Различные типы ресурсов: поддерживает элементы <string>, <string-array> и <plurals>
• Настраиваемость: простая конфигурация параметров перевода на основе JSON
• Поддержка нескольких проектов: автоматическая обработка всех проектов в сборке Gradle
• Умная обработка: атрибуты, комментарии и структура XML, экранирование специальных символов
• Восстановление после ошибок: обработка продолжается даже при сбое отдельных переводов.
• Безопасность: использует безопасный парсинг XML для предотвращения XXE-атак

Translate Genie на GitHub: https://github.com/sarimmehdi/Translate-Genie
Платформа: Android
⭐️: 2
👍2
Compose + Koin + Jetpack Navigation: что мы поняли за 2 года

Сегодня поделюсь нашим опытом развития архитектуры приложения на Jetpack Compose: с какими ограничениями мы столкнулись, как укротили навигацию от Google и какими молитвами всё это подружили с Koin. В начале мы затронем структуру модулей, затем обсудим скоупы в Koin для многомодульных проектов, и завершим это все библиотекой Jetpack Navigation.

Статья: https://habr.com/ru/companies/wildberries/articles/939526/
Платформа: Android
🔥2
Media Picker - настраиваемый медиа пикер на SwiftUI

Media Picker - кастомный медиа пикер на SwiftUI с  возможностью съемки. Функции: выбор фото и видео, один или несколько файлов, полноэкранный режим, Live photo превью и съемка, полная настройка.

Media Picker на GitHub: https://github.com/exyte/MediaPicker
Платформа: iOS
⭐️: 410
👍1
OuterTune - музыкальный плеер для Android

OuterTune - музыкальный плеер для Android в Material 3. Умеет проигрывать музыку с YouTube Music и локальные файлы (MP3, OGG, FLAC и т.п.), получать и синхронизировать слова песен, нормализовать аудио, использовать аудио-эффекты, поддерживать Android Auto.

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

(iOS En) Sticky Header For List View - SwiftUI
(iOS En) Notification OnBoarding Animation Using SwiftUI
(iOS En) iOS 26 Lock Screen Carousel With Reflection Effect Using SwiftUI
(And Ru) 20 секретов Android, спрятанных в настройках разработчика
(And En) How to migrate to 16 KB pages
(And En) Is Google going even more downhill with Android? - No more side-loading of Android apps
(And En) Dependencies and Kotlin Native
(And En) Code Quality at Scale: Future Proof Your Android Codebase with KtLint and Detekt
(And En) The Life and Death of a Kotlin Native Object
(And En) Get inspiration and learn from the Best - Patterns for Success
(And En) Create custom CI/CD metrics: Analyzing build performance with Develocity Analytics
(Crs En) Two Years with Kotlin Multiplatform: From Zero to 55% Shared Code
(Dev Ru) SQLite. Невероятно быстро
(Dev Ru) IT рынок умер
(Dev Ru) Какие угрозы несет AI — AI Safety, AGI, AI Alignment
(Dev Ru) Управление изменениями
(Dev En) Learn to Build with Gemini Nano-Banana (Gemini 2.5 Flash Image)
(Dev En) Godot Game Development for Beginners
(Mrk En) Как найти ключевые слова, которые действительно сработают

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

(iOS Ru) Эволюция презентационных паттернов SwiftUI
(And Ru) «Ленивый граф», или Как мы оптимизировали старт приложения
(And Ru) В сетях сетевого слоя
(Crs Ru) Многомодульное приложение на Flutter
(Dev Ru) Junior-разработчики — обучение программированию, тестовое задание
Please open Telegram to view this post
VIEW IN TELEGRAM
Стратегии определения области действия компонентов: профессиональное управление зависимостями

В статье рассматриваются стратегии определения области видимости компонентов (component scoping) в разработке программного обеспечения, что является ключевым аспектом управления зависимостями. Автор сравнивает этот процесс с организацией работы ресторана: как шеф-повара не заставляют варить кофе, так и в приложении дорогостоящие объекты, вроде подключения к базе данных или сетевого клиента, не должны создаваться заново для каждой мелкой задачи. Определение области видимости помогает установить жизненный цикл зависимости, её доступность и правила создания/уничтожения, что напрямую влияет на производительность, использование памяти и тестируемость приложения.

Статья: https://blog.stackademic.com/component-scoping-strategies-managing-dependencies-like-a-pro-8f51324e9c91 (как читать ©)
Платформа: Android
2
Scout - ведение логов в CloudKit

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

Scout предлагает бесшовную интеграцию с CloudKit, позволяя вам легко хранить и управлять логами в облаке. Используя CloudKit, вы можете:

• Централизовать хранение: хранить журналы с нескольких устройств и приложений в одном централизованном месте
• Получать доступ в режиме реального времени: получать доступ к журналам в режиме реального времени из любой точки мира, обеспечивая оперативный мониторинг производительности и проблем ваших приложений
• Масштабировать логи: использовать масштабируемость CloudKit для обработки больших объемов данных журналов без ущерба для производительности
• Сделать логи безопасными: обеспечить безопасное хранение и передачу ваших логов в соответствии со стандартами безопасности

Scout на GitHub: https://github.com/kasianov-mikhail/scout
Платформа: iOS
⭐️: 18
👍1
Циклы в Swift: скрытые трюки для повышения производительности, которые сделают ваш код в 10 раз быстрее

В начале своего пути в программировании я думал, что циклы — это просто… циклы. Знаете, те самые базовые for и while, которые изучают на первых уроках? Как же я ошибался.

Только когда я начал отлаживать кошмарное приложение, которое тратило больше трёх секунд на отрисовку простого списка, я понял, что система циклов Swift гораздо сложнее, чем показывают большинство руководств. Тот самый невинный цикл for-in, который я везде копировал? Да, он был узким местом.

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

Статья: https://apptractor.ru/info/articles/swift-loops.html
Платформа: iOS
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
SnapNotify - Snackbar для Jetpack Compose

SnapNotify - легковесная, потокобезопасная библиотека Snackbar для Jetpack Compose с предельно простой настройкой. Показывайте снекбары из любого места с красивой стилизацией, управлением очередью и опциональной интеграцией с Hilt. Полностью на Kotlin.

SnapNotify на GitHub: https://github.com/ivamsi/snapnotify
Платформа: Android
⭐️: 18
👍1
Превратите свои фотографии в миниатюрное волшебство с помощью Nano Banana

В статье разработчик Питер Фризе подробно описывает, как интегрировать новую модель генерации изображений от Google, известную как "Nano Banana" (официальное название gemini-2.5-flash-image-preview), в iOS-приложения. Автор объясняет, что с помощью Firebase AI Logic можно безопасно использовать возможности Gemini для создания и редактирования изображений прямо в приложении, не храня на устройстве пользователя API-ключи. В качестве примера он создает приложение для генерации миниатюрных диорам комнат, демонстрируя, как с помощью нескольких строк кода на Swift можно превращать текстовые описания и существующие фотографии в новые уникальные изображения.

Статья: https://peterfriese.dev/blog/2025/gemini-nano-banana-ios/
Платформа: iOS
👍1
Вопрос на 16 КБ: почему так важны изменения в памяти Android и как подготовить приложение

Годами Android управлял памятью блоками по 4 КБ. Но с появлением современных устройств с большим объёмом оперативной памяти это стало неэффективным. С 1 ноября 2025 года Google Play требует, чтобы все новые приложения и обновления для Android 15 (API 35) или выше были совместимы с этим новым размером страницы в 16 КБ.

Если ваше приложение полностью написано на Kotlin/Java, вы, вероятно, можете расслабиться. Но если ваше приложение использует нативный код (C/C++) — а вы удивитесь, как много таких приложений используют благодаря сторонним SDK, — вам нужно действовать прямо сейчас.

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

Статья: https://apptractor.ru/develop/16kb-question.html
Платформа: Android
👍1
StepsShare - трекер шагов на Compose Multiplatform

StepsShare - cовременное кроссплатформенное приложение для отслеживания шагов, созданное на Kotlin Multiplatform и Compose Multiplatform. Отслеживайте количество шагов за день, ставьте персональные цели и отслеживайте свой прогресс на устройствах Android и iOS.

Внутри, кроме KMP и CMP, Material Design 3 с анимациями, MVVM, Compose Navigation, локальное хранение данных в Room, Koin, Compose Charts, Kotlinx Serialization.

StepsShare на GitHubhttps://github.com/tamtom/StepsShare-oss
Платформа: кроссплатформа
⭐️: 78
👍1
Как я научил Jetpack Compose показывать рекомпозиции в реальном времени

Представьте, вы открываете пул‑реквест и взгляд цепляется за знакомые паттерны: нестабильный параметр в Composable‑функции, remember без ключа, применение трансформаций на Layout‑фазе. Сразу хочется написать комментарий‑лекцию о том, почему это ударит по производительности и почему лучше так не делать.

Вот только объяснения отнимают время и не всегда наглядно доносят суть проблемы. Особенно это актуально для новичков, которым сложно сопоставить абстракции с реальным поведением UI. А ведь для сложных асинхронных штук вроде RxJava или корутин есть визуализаторы — RxMarbles и FlowMarbles, а для самой частой головной боли в Compose до сих пор нет. Вот бы вместо стены текста просто кинуть ссылку со словами: «Смотри, вот что твой код делает на самом деле».

В этой статье я расскажу о разработке собственного приложения, которое в реальном времени визуализирует рекомпозиции. Чтобы заставить его работать, пришлось залезть под капот компилятора Kotlin и подружиться с его внутренними API: FIR и IR.

Статья: https://habr.com/ru/companies/yandex/articles/945276/
Платформа: Android
2
Как Swift Runtime влияет на производительность iOS-приложений

Для больших iOS-приложений, написанных на Swift, понимание работы Swift Runtime и его влияния на производительность — важный навыĸ разработчиĸов. Swift Runtime при исполнении ĸода отвечает за фундаментальные вещи языĸа Swift: управление памятью и систему типов в рантайме.

В статье сосредоточимся на механизмах приведения типов и создания generic-типов внутри Swift Runtime и рассмотрим один ĸонĸретный метод, ĸоторый является узĸим местом в производительности приложения. Разберем примеры ĸода, демонстрирующие, ĸогда и почему этот метод вызывается, ĸаĸово его влияние на отзывчивость приложения и ĸаĸие стратегии использовать для смягчения негативного воздействия.

Статья: https://habr.com/ru/companies/tbank/articles/947486/
Платформа: iOS
👍2
ImmutableData - простое управление состояниями для SwiftUI

ImmutableData - новый подход к архитектуре приложений для SwiftUI, основанный на более чем десятилетнем опыте работы с декларативными UI-фреймворками. Вдохновленная принципами Flux и Redux, архитектура использует современные возможности Swift, чтобы сделать ваш код чище, быстрее и проще для понимания. Вместо традиционного императивного и объектно-ориентированного программирования, авторы делают ставку на декларативное мышление, функциональный стиль и неизменяемые (immutable) данные. В основе всего — однонаправленный поток данных, который обеспечивает строгое разделение ответственности: действия декларируют, что произошло; слой состояния реагирует на эти действия, изменяя данные; а представления (views) — просто отображают обновлённое состояние.

Это строгое разделение позволяет избавиться от таких проблем, как двусторонняя привязка данных и "спагетти-код", вызванный изменяемыми объектами. Архитектура ImmutableData делает код надёжнее, его легче тестировать, а новичкам — проще в нём разобраться. Пакет предоставляет три основных модуля: ImmutableData для управления данными, ImmutableUI для работы с представлениями SwiftUI и AsyncSequenceTestUtils для тестирования. Чтобы начать, достаточно добавить пакет в свой проект через Swift Package Manager. Например, для простого счётчика вам нужно определить состояние, действия и редьюсер, а затем использовать @ImmutableUI.Selector и @ImmutableUI.Dispatcher, чтобы связать ваш UI с глобальным состоянием приложения. Это позволяет создавать масштабируемые и легко поддерживаемые приложения.

ImmutableData на GitHub: https://github.com/Swift-ImmutableData/ImmutableData
Платформа: iOS
⭐️: 37
🤔1
Андроид всё еще не готов к RAW-видео

Сегодня вам предстоит увлекательное путешествие по стыку технологий, кода и технических решений, которые и расскажут вам то, о чем адепты съемки мобильного RAW-видео предпочитают не говорить.

Я разберу лишь основные моменты, которые и убедили меня в том, что эффективная съемка RAW‑видео на Андроид на сегодняшний день невозможна без »костылей» и ухищрений. Костылей, которые нивелируют все те преимущества RAW, которые так жаждут получить на своих смартфонах видеографы. Ухищрений, которые по итогу делают менее ресурсоемкие форматы записи видео на смартфоне даже более эффективными и качественными, чем RAW.

Да, будет интересно!

Статья: https://habr.com/ru/articles/947578/
Платформа: Android
To Do - ведение дел на Jetpack Compose

To Do - простое приложение для ведения дел на Jetpack Compose с настраиваемыми темами Material Design 3.

To Do на GitHub: https://github.com/Super12138/ToDo
Платформа: Android
⭐️: 41
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
SwiftUI: Горизонтальный пикер/слайдер/линейка

Если стандартные слайдеры уже надоели, посмотрите, как создать кастомный горизонтальный Dial Picker — компонент, похожий на линейку или шкалу настройки.

В статье автор подробно разбирает создание такого элемента с нуля.

Статья: https://levelup.gitconnected.com/swiftui-horizontal-dial-picker-slider-ruler-8b3681fc9a00
Платформа: iOS

Поставь 👍, если хотите перевод на русский.
👍4
Все, что вы хотели знать о флагах в эмодзи (но не знали, что вам это нужно)

Допустим, вы создаете аналитическое приложение и вам нужен простой способ обозначить местоположение аналитического события. Если вы, как и я, подумали: «Да, флажки эмодзи — забавный способ показать страны», то наверняка сразу же начали создавать такой словарь

let emojiFlags = [
"AU": "🇦🇺",
"BE": "🇧🇪",
"BR": "🇧🇷",
"BS": "🇧🇸",
...
]

Но подождите. Оказывается, есть гораздо более простой способ сделать это (ну как «простой»… с программной точки зрения).

Статья: https://apptractor.ru/info/articles/vse-chto-vy-hoteli-znat-o-flagah-v-emodzi-no-ne-znali-chto-vam-eto-nuzhno.html
Платформа: iOS