AppFiles - Mobile Development
2.16K subscribers
3.03K photos
41 videos
12 files
4K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Создание адаптивных макетов в Jetpack Compose

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

Ваше приложение может работать на телефонах, планшетах, складных устройствах, ChromeOS, в режиме разделенного экрана и с изменяемым размером окон. Размер одного и того же устройства может меняться во время работы приложения. Складное устройство может открыться. Приложение для планшета может перейти в режим разделенного экрана. Телефон может повернуться.

Статья: https://apptractor.ru/info/articles/sozdanie-adaptivnyh-maketov-v-jetpack-compose.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Как DoorDash создал систему проверки кода на основе ИИ, к мнению которой инженеры действительно прислушиваются

Многие инженерные организации пытались прикрутить AI-ревьюеров к своим пул-реквестам. Слишком часто такие ревьюеры просто игнорируются. Комментарии многочисленные, рекомендации — слишком общие, и инженеры привыкают пролистывать их.

Мы хотели сделать что-то другое. Последние несколько месяцев мы постепенно разворачивали агента для code review внутри инженерной организации DoorDash. Ключевой проблемой в итоге оказалось внимание: помочь агенту сфокусироваться на тех частях изменений, которые действительно заслуживают пересмотра, и молчать, когда ему нечего полезного добавить.

Планка, которую мы для себя установили, была не в духе «находить проблемы». Критические вопросы были такими:

• Действительно ли инженеры меняют свой код, когда агент оставляет комментарий?
• Сохраняет ли он достаточный уровень доверия, чтобы команды продолжали держать его включённым?

Вот к чему мы пришли.

Статья: https://apptractor.ru/info/articles/kak-doordash-sozdal-sistemu-proverki-koda-na-osnove-ii-k-mneniyu-kotoroy-inzhenery-deystvitelno-prislushivayutsya.html
Платформа: разработка

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Actomaton - фреймворк для управления состоянием

Actomaton — это фреймворк для управления состоянием с использованием асинхронного подхода async/await и Actor на Swift, вдохновленный Elm и swift-composable-architecture.

Actomaton обеспечивает предсказуемый и потокобезопасный подход к управлению состоянием приложения и побочными эффектами в приложениях Swift.

Actomaton на GitHub: https://github.com/Actomaton/Actomaton
Платформа: iOS
⭐️: 262

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Код Telegram iOS — лучший в индустрии. Почему же он так лагает на флагманах?

Telegram — технически самый сложных мессенджер в мире. В iOS приложении 2.1M+ строк, 700+ модулей, 86% Swift, 13 лет кодовой базы, и мало ObjC — это колоссальный труд.

Но при этом приложение лагает на флагманах, AsyncDisplayKit открывает по 10 дублей окон разом(а это явно тормозит ARC), крэши на редактировании изображений стабильны годами.

Почему?

Потому что 86% кода написаны на Swift, но разработчики мыслят все еще в парадигме ООП.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1🤪41🔥1💯1
Переезд с XML на Jetpack Compose на проде: базовые классы, архитектура, сложности и готовые решения

Рано или поздно любая растущая кодовая база упирается в потолок своих архитектурных решений. У нас этот момент настал, когда количество экранов выросло до нескольких сотен и команда начала тратить больше времени на борьбу с неконсистентным состоянием UI. Классическая связка XML + ViewBinding + MVVM работала, но с каждым новым экраном мы всё острее чувствовали её ограничения: разрозненные StateFlow, дублирование кода во фрагментах, сложность переиспользования компонентов.

Нужно было что-то менять — пересмотреть сам подход к построению UI. Так мы начали миграцию на Jetpack Compose (который на момент начала перехода уже был стабильным и самодостаточным). Полтора года спустя, пройдя через рефакторинг базовых классов, переход с MVVM на MVI и постепенную замену содержимого всех фрагментов, мы получили стек, на котором разработка ускорилась, а баги, связанные с состоянием экрана, практически исчезли.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Как ошибка двухлетней давности привела к тому, что мое Flutter-приложение получило счет за ИИ на €3167

В апреле 2026 года моё Flutter-приложение было представлено на презентации Google Cloud Next’26 для разработчиков в Лас-Вегасе. Три недели спустя я обнаружил, что тот же проект заблокирован за злоупотребление, а за ночь с меня списали 3167 евро за использование Gemini Developer API.

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

Это история о том, как моя конфигурация Firebase привела к утечке данных.

Статья: https://apptractor.ru/info/articles/flutter-3167.html
Платформа: разработка

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Zenith - цифровое благополучие в Material Design 3 Expressive

Zenith — это умный цифровой помощник для поддержания благополучия на Android, созданный с использованием Material Design 3 Expressive. Он использует проактивные методы и мониторинг в реальном времени, чтобы помочь вам избавиться от привычки к бесконечному листанию социальных сетей с плавным и динамичным интерфейсом.

Основные функции:

• Режим защиты: Защищает от приложений, вызывающих привыкание, предоставляя паузы для осознанного использования и ограничивая количество использований за временной период.
• Целеустремленность: Помогает достигать целевых показателей времени использования для конкретных приложений (например, образовательных или приложений для повышения производительности).
• Задержка: Принудительно устанавливает временную задержку (например, 5-10 секунд) перед открытием защищенных приложений, давая мозгу время на переосмысление.
• Умное расписание: Автоматическая блокировка или разрешение приложений на основе заданного расписания.
• Экстренное использование: Система разблокировки с помощью удержания кнопки для экстренного использования при достижении лимитов, с ограниченной квотой.
• HUD сессии: Плавающее наложение, которое прозрачно отображает оставшееся время активной сессии приложения.
• Выразительный дизайн: Создан в соответствии с принципами Material Design 3 Expressive, отличается плавной анимацией и современным интерфейсом.

Zenith на GitHub: https://github.com/1372Slash/Zenith
Платформа: Android
⭐️: 64

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Про BDUI грабли на примере простого опросника, который не так прост, как кажется

Однажды у нас появилась задача, которая (на первый взгляд) выглядела очень простой: сделать опросник в приложении. На макетах всего лишь пара экранов, несколько вопросов, кнопка «Далее». Всё красиво, не сухо, с картинками у вариантов ответа и нормальной подачей, а не в формате «Заполните обязательные поля».

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Горячая перезагрузка AGSL-шейдеров без пересборки: пошаговое руководство для Compose

В этой статье вы изучите пример мыльного пузыря и точно определите, какие параметры можно настраивать врантайме, почему строка remember(SHADER_SRC) обеспечивает распространение изменений шейдера на запущенную программу, как спецификации анимации на стороне Kotlin сглаживают переходы при изменении числа и какие классы редактирования по-прежнему требуют полной пересборки.

Статья: https://apptractor.ru/info/articles/goryachaya-perezagruzka-agsl-sheyderov-bez-peresborki-poshagovoe-rukovodstvo-dlya-compose.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
VReader - ридер EPUB, PDF, TXT и Markdown для iOS

VReader — это современное приложение для чтения, разработанное для iPhone и iPad, полностью созданное с помощью ИИ (Claude Code + Codex CLI) при участии людей в определении требований и тестировании. Оно поддерживает форматы EPUB, AZW3/MOBI (Kindle), PDF, TXT и Markdown с аннотациями, полнотекстовым поиском, ИИ-помощником, синтезом речи, парсингом исходных данных книг и резервным копированием через WebDAV.

Стек: Swift 6, SwiftUI, SwiftData, EPUB через WKWebView, AZW3/MOBI через Foliate-js в WKWebView, PDF через PDFKit + PDFAnnotation, TXT через TextKit 1 (UITextView) + UITableView, Markdown через NSAttributedString, OpenAI для суммаризации, TTS через AVSpeechSynthesizer + облачный TTS. 

VReader на GitHub: https://github.com/lllyys/vreader
Платформа: iOS
⭐️: 11

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
📺 Видео и подкасты за неделю

Видео I/O и кейноут KotlinConf

(iOS En) Senior iOS Engineer Mock Interview - Spotify App System Design
(iOS En) Custom Glass Segmented Control Using SwiftUI
(iOS En) How to Add Search in a SwiftUI List with Async/Await and Debounce
(iOS En) Understanding Swift Result Builders - The Power Behind ViewBuilder
(iOS En) Flexible Liquid Glass Morphing Tab Bar to Bottom Bar Using SwiftUI
(I/O En) Google I/O 2026 Developer Keynote
(I/O En) Google I/O 2026 Developer Keynote 5-Minute recap
(I/O En) What's new in Android
(I/O En) Build custom design systems with Jetpack Compose's new Styles API
(I/O En) Make your UI adaptive with Android Studio's AI agent
(I/O En) Build beautiful, premium, adaptive apps with Material
(I/O En) Build adaptive layouts with Navigation 3
(I/O En) Deploy Android on-device AI with ML Kit GenAI and LiteRT-LM
(I/O En) The latest in Android XR
(I/O En) Supercharge Android media experiences with Jetpack Media3 and CameraX
(I/O En) What's new in Android development tools
(I/O En) What’s new in Google Play
(I/O En) Make Material your own
(I/O En) Engineering memory-performant Android apps
(I/O En) Build a modern note-taking app on Android
(I/O En) Build native Android experiences for web apps using WebView
(I/O En) Design and build desktop-class Android experiences
(I/O En) Extend your mobile app for AI glasses
(I/O En) Build adaptive widgets for cars, phones, watches, and more
(I/O En) Android accessibility updates
(And En) The 4 Types of Offline Caches On Android - Mobile System Design Basics
(And En) KotlinConf ’26 Keynote
(And En) Gotta use that returned value?
(Crs En) A New Default Project Structure for Kotlin Multiplatform

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

(iOS Ru) TOP 10 горячих клавиш для Xcode
(iOS Ru) Swift Plugins: ускоряем сборку проекта
(iOS Ru) Объединяем Combine и Swift Concurrency
(And Ru) Взлом и защита Android-приложений
(And Ru) Моментальный запуск: как VK Клипы работают с плейбэком видео на Android
(And Ru) Память в Android, утечки и OOM
(Crs Ru) Настраиваем навигацию во Flutter-приложении через AutoRoute
(And Ru) Проводим и проходим Mobile System Design-интервью

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM