AppFiles - Mobile Development
前往频道在 Telegram
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
显示更多2 169
订阅者
+224 小时
无数据7 天
+830 天
帖子存档
Библиотека Jetpack Navigation 3 стала стабильной
Jetpack Navigation 3 стал стабильным в версии 1.0. Используйте библиотеку в своих приложениях уже сегодня. Например, JetBrains уже использует её в своём приложении KotlinConf.
Navigation 3 — это новая навигационная библиотека, полностью разработанная для поддержки состояний Jetpack Compose. Она предоставляет полный контроль над стеком переходов, помогает сохранять состояние навигации и позволяет легко создавать адаптивные макеты (например, list-detail). У JetBrains даже есть кроссплатформенная версия.
Подробнее: https://apptractor.ru/info/news/jetpack-navigation-3-stab.html
Платформа: Android
Delete Button Micro Interaction - кнопка удаления с таймером
Delete Button Micro Interaction - кнопка с микровзаимодействием на SwiftUI.
Delete Button на GitHub: https://github.com/georgecartridge/DeleteButtonMicroInteraction
Платформа: iOS
⭐️: 16
AppFiles: код, инструменты, практики, производительность
Хитрости отладки SwiftUI, о которых никто не говорит
Автор показывает, как простые инструменты — вроде
print() в body или наблюдателей didSet — помогают понять, когда именно происходит перерисовка вью и корректно ли обновляется состояние. Такие минималистичные вставки дают быстрый инсайт: что именно вызывает лишние рендеры или почему UI не реагирует на изменения @State. Отдельный акцент сделан на том, что многие проблемы связаны с неправильным использованием @State и непониманием того, как SwiftUI работает под капотом. Поэтому автор рекомендует не стесняться логировать всё, что кажется подозрительным — это даёт результат быстрее, чем сразу менять архитектуру. Отличный набор практических подсказок, особенно если вы регулярно ловите странное поведение UI.
Статья: https://medium.com/ios-lab/the-swiftui-debugging-tricks-no-one-talks-about-fdddc0cc35c7
Платформа: iOS
AppFiles: код, инструменты, практики, производительностьОсновы MockK
По сути, MockK — это «фреймворк для мок-объектов» в Kotlin. Это инструмент, позволяющий создавать и управлять «поддельными» версиями объектов (так называемыми мок-объектами), чтобы изолировать и тестировать наш код.
Но это скучное определение.
Отличительной чертой MockK является то, что он был создан с нуля разработчиками Kotlin для Kotlin. Это не просто библиотека Java, вроде Mockito, с «дружественной к Kotlin» оболочкой. Он была разработан, чтобы охватывать язык, а не просто мириться с ним.
Это фундаментальное отличие и делает фреймворк таким «волшебным». Это не просто утилита для тестирования. Это демонстрация идиоматичности дизайна Kotlin. Он использует лучшие возможности языка, такие как мощные DSL, функции расширения и первоклассную поддержку корутин, чтобы создать API, который ощущается не как инструмент, а как естественное расширение самого Kotlin.
Статья: https://apptractor.ru/info/articles/osnovy-mockk.html
Платформа: Android/тестирование
AppFiles: код, инструменты, практики, производительность
Почему ваша ViewModel технически нестабильна — и почему Compose это не волнует
Знаете ли вы, что почти все ViewModel нестабильны? Когда мы впервые изучаем Compose, нас учат использовать стабильные классы, а не нестабильные.
Но ViewModel нестабильны. Так почему же никто ничего не говорит, когда мы используем нестабильные ViewModel?
Статья: https://apptractor.ru/info/articles/viewmodel-nestabilna.html
Платформа: Android
AppFiles: код, инструменты, практики, производительность
Grocery Genius - список покупок для Android
Grocery Genius — бесплатное, настраиваемое приложение для составления списков покупок с современным дизайном, функциями автозаполнения, возможностью работы офлайн и богатым функционалом.
Технологический стек:
• Jetpack Compose для пользовательского интерфейса с одним Activity и без фрагментов
• База данных Room для локального хранения данных
• Retrofit для работы с REST API
• Preferences DataStore для хранения простых данных в формате «ключ-значение»
• Корутины и потоки Kotlin для асинхронных запросов
• Work Manager для синхронизации данных в фоновом режиме
• Moshi для декодирования JSON-файлов в объекты Kotlin
• Coil для производительной загрузки изображений из файлов
• RecyclerView для списков с функцией перетаскивания
• Шаблон MVI
• Архитектура CLEAN с уровнем данных и представления
Grocery Genius на GitHub: https://github.com/DanielRendox/GroceryGenius
Платформа: Android
⭐️: 122
Вопрос с собеседования, на котором сыпятся 90% iOS-разработчиков (даже Senior-ы)
Вот классическая версия вопроса на собеседовании:
class MyViewController: UIViewController {
var completion: (() -> Void)?
override func viewDidLoad() {
super.viewDidLoad()
completion = {
self.doSomething()
}
}
func doSomething() {
print("Doing something")
}
deinit {
print("MyViewController deinitialized")
}
}
Интервьюер спрашивает: «Почему MyViewController может никогда не быть деалоцирован?»
В этот момент 90% кандидатов отвечают:
«Вам следует использовать weak self».
Неверно.
Не потому, что этот ответ неверный, а потому, что он неполный. Этот вопрос не о том, как исправить. Он о том, как обосновать свой ответ.
Статья: https://apptractor.ru/info/articles/vopros-s-sobesedovaniya-na-kotorom-sypyatsya-90-ios-razrabotchikov-dazhe-senior-y.html
Платформа: iOS/SwiftXcodeProjectCLI - управление проектами Xcode из командной строки
XcodeProjectCLI - быстрый и лёгкий CLI инструмент для управления проектами Xcode, полностью написанный на Swift. Легко интегрируйте его в свой рабочий процесс разработки или автоматизируйте сложные задачи рефакторинга всего несколькими командами.
OVERVIEW: XcodeProjectCLI
USAGE: xcp <subcommand>
OPTIONS:
--version Show the version.
-h, --help Show help information.
TARGET SUBCOMMANDS:
list-targets List project targets.
set-target Set target for existing file.
GROUP SUBCOMMANDS:
add-group Add group.
delete-group Delete group.
move-group Move group.
rename-group Rename group.
FILE SUBCOMMANDS:
add-file Add file to specified targets.
delete-file Delete file.
move-file Move file.
rename-file Rename file.
BUILD SETTINGS SUBCOMMANDS:
get-build-setting Get build setting.
set-build-setting Set build setting.
ASSETS SUBCOMMANDS:
add-image-asset Add image asset.
add-data-asset Add data asset.
add-color-asset Add color asset.
list-assets List all assets.
move-asset Move asset.
delete-asset Delete asset.
See 'xcp help <subcommand>' for detailed help.
XcodeProjectCLI на GitHub: https://github.com/wojciech-kulik/XcodeProjectCLI
Платформа: iOS
⭐️: 91Два года с Duit — история взросления фреймворка
Если кратко — за год проект "перерос сам себя". Фреймворк стал более архитектурно чистым, гибким и устойчивым. Он стал более стройным и простым на первый взгляд и на порядок более сложным "под капотом".
В обиход разработки вошло много новых подходов: выработаны принципы тестирования проекта и обеспечения его качества, опробованы в "боевых" условиях AI-инструменты для кодинга и "разбавления одиночества" (я так называю AI-ревьюеры). А также свой вклад в проект внесло два человека!
Это был длинный, тяжелый, но невероятно интересный год. Давайте посмотрим на него вместе!
Статья: https://habr.com/ru/articles/963884/
Платформа: кроссплатформа/Flutter
AppFiles: код, инструменты, практики, производительность
Как не сойти с ума с Grafana Unified Alerting: настраиваем алерт и разбираем все грабли
Если вы только начинаете разбираться с Unified Alerting — надеюсь, эта статья сэкономит вам несколько часов жизни, пару бессмысленных “почему Slack пустой?” и одну-две нервные клетки.
Статья: https://habr.com/ru/articles/966902/
Платформа: Android
AppFiles: код, инструменты, практики, производительность
LibrePods - все функции AirPods на Android
LibrePods открывает эксклюзивные функции AirPods от Apple на устройствах сторонних производителей. Получите доступ к режимам шумоподавления, адаптивной прозрачности, обнаружению ушей, слуховому аппарату, настраиваемому режиму прозрачности, состоянию аккумулятора и многому другому — всем премиум-функциям, за которые вы заплатили, но которые Apple ограничивла своей экосистемой.
В настоящее время для использования LibrePods на Android необходимо устройство с root-доступом и Xposed. Это связано с ошибкой в Bluetooth-стеке Android.
LibrePods на GitHub: https://github.com/kavishdevar/librepods
Платформа: Android
⭐️: 3.2K
Rust в Android: двигайтесь быстро и исправляйте вещи
Google публикует отчёт, что благодаря внедрению языка Rust в платформу Android система стала не только безопаснее, но и разработка ускорилась. В 2025-м доля уязвимостей, связанных с безопасностью памяти, впервые опустилась ниже 20% от общего количества.
• Rust-код показывает примерно 1000× меньшую плотность уязвимостей безопасности памяти по сравнению с кодом на C/C++
• Время на code review для Rust-изменений — приблизительно на 25% меньше, чем для C++
• Частота откатов для Rust — примерно в 4 раза ниже, чем для C++ при средних и больших изменениях
• Rust активно внедряется не только в ядро Android, но и в драйверы ядра, прошивки, а также в приложения Google
Если вы занимаетесь мобильной разработкой на Android, особенно на уровне нативных компонентов, драйверов или системных библиотек, — сейчас отличное время обратить внимание на Rust. Он даёт выигрыш в безопасности и скорости разработки, а не просто дополнительную нагрузку. Даже если ваша зона ответственности — только Java/Kotlin-слой, всё равно полезно понимать, что нижний стек платформы активно эволюционирует.
Статья: https://security.googleblog.com/2025/11/rust-in-android-move-fast-fix-things.html
Платформа: Android
Как ускорить WebView в Android и доказать это цифрами
Мы перестали на глазок гадать, быстро ли грузится WebView.
Теперь у нас есть:
•
WebViewPreloader — чтобы подогреть WebView заранее;
• WebViewReadyDetector — чтобы честно понимать момент отображения контента;
• CoreComposeWebView — чтобы экраны не думали про всё это вообще;
• TIME_TO_VISUAL_READY_MS — одна цифра, которой можно объяснить и разработчику, и аналитику, и продакту, что именно мы улучшили.
А главное — у нас появились цифры, которые показывают, что WebView-пререндер — это не костыль, а вложение в UX и, как следствие, в бизнес.
Статья: https://habr.com/ru/articles/965866/
Платформа: Android📺 Видео и подкасты за неделю @AppFiles
•
(iOS En) Location OnBoarding Animation Using SwiftUI
• (iOS En) Please stop making this Swift mistake
• (iOS En) Using SwiftUI Foundation Models Transcripts to build a Chatbot
• (iOS En) Monetizing Apps With SwiftUI - Tip Jar
• (iOS En) Android developer verification walkthrough
• (And En) Now in Android: 122 – Android Studio updates, Android 16 beta feature, and more
• (And En) Building Androidify: an AI-powered Android experience
• (And En) More customization in Material 3: the path to expressive apps
• (And En) Building adaptive apps for Android
• (And En) Building intelligent Android apps with Gemini
• (And En) What's new in Android Studio's AI Agent
• (And En) Building for TV and cars with Compose
• (And En) All Types of Sliders In Material3 Expressive Explained
• (And En) The 5 Coolest Android Studio Hacks In 5 Minutes
• (And En) Gradle Tutorial: Task Types (for Build Engineers)
• (And En) Gradle Tutorial: Build Lifecycle (for Build Engineers)
• (Crs Ru) Как закалялся код — история большой оптимизации
• (Crs Ru) Flutter везде, и даже в чайнике
• (Crs Ru) WhiteLabel App на Flutter. Один код — тысяча лиц
• (Crs Ru) Как Flutter преобразует графический слой микроядерной ОС
• (Crs Ru) Многомодульность на Flutter. Переезжаем с монолита
• (Crs Ru) Перевод OpenHarmony на статический язык и рантайм
• (Crs En) Liquid Glass effect is now available in Compose Multiplatform
• (Dev Ru) Калибровки в бигтехе: как оценивать сотрудников
• (Dev Ru) Надя Зуева — стартап в Дубае, AI в моде, инвестиции и жизнь фаундера
• (Dev Ru) IT рынок перегрет. Удаленка vs Работа в офисе. Сколько стоит содержать офис?
• (Dev En) Discrete Mathematics Course for Beginners
Прошлогодние видео:
• (Dev Ru) Как начинающему программисту получить первый оффер
• (Dev Ru) Релокация в США, часть 1: Безопасность, оружие, визы и медицина
• (Dev Ru) А/В-тесты на коленкеКак на Хабре каждый раз хоронят Flutter
Представьте, что вы Flutter-разработчик. Вы заходите на Хабр. В комменты статьи про Flutter. И там опять: «Flutter уже не развивается давно, нет 3д», «Dart — зачем нужен этот новый странный язык», «Google закроет проект, там в Индии всех разрабов уволили, они уже на кладбище». И это каждый. Божий. День.
Вот что интересно: пока на Хабре хоронят Flutter, 30% всех новых iOS-приложений пишутся на нём. BMW делает на Flutter приложение для своих машин. Google Pay работает на Flutter. Credit Agricole Bank переписал на него банковский апп на миллион пользователей — и поднялся с 10-го на 3-е место в рейтинге. Но на Хабре Flutter, конечно, мёртв. Как и в прошлом году. И позапрошлом.
Статья: https://habr.com/ru/articles/965848/
Платформа: кроссплатформа
Flutter — везде (и даже в чайнике). Часть 1
В этой статье хочу продолжить рассказывать о фреймворке: какие платформы он поддерживает, в чем его преимущества (и как сделать прошивку своего чайника).
Статья: https://habr.com/ru/companies/friflex/articles/966152/
Платформа: кроссплатформа
QmBlurView - эффекты размытия
QmBlurView — это библиотека, предлагающая различные эффекты размытия для UI компонентов Android.
Фичи: всего есть 7 разных блюров, минимальная версия Android 5.0, быстрая работа, механизм автоматической очистки, предотвращающий утечки памяти.
QmBlurView на GitHub: https://github.com/QmDeve/QmBlurView
Платформа: Android
⭐️: 73
Флаги функций в Swift
Почти в каждом проекте, над которым я работаю, есть как минимум три конфигурации сборки: Debug, TestFlight и App Store. Эти конфигурации различаются не только настройками сборки, но и функциональностью. В этой статье мы узнаем, как реализовать флаги функций (фичефлаги) в Swift, которые позволяют включать и отключать определённые функции при определённых условиях.
Статья: https://apptractor.ru/info/articles/flagi-funktsiy-v-swift.html
Платформа: iOS
Я нашел причину №1 фризов в вашем приложении, и вот доказательства
Многие люди спрашивают меня, почему я ненавижу SharedPreferences, а на моей работе некоторые даже спорят со мной, что SharedPreferences - это хорошая штука и что они вообще не приводят ни к каким проблемам. Но из моего шестилетнего опыта разработки и более чем 15 проектов я знаю, что SharedPreferences буквально являются причиной номер один ANR во многих популярных приложениях и сторонних фреймворках.
У вас всегда будут ANR из-за них, что бы вы ни делали (нет, edit не помогает!). И в этом посте я раскрою, почему вы должны убрать SharedPreferences из вашего проекта как можно скорее.
Статья: https://nek12.dev/blog/ru/why-sharedpreferences-cause-anrs-in-android-apps
Платформа: Android
SwiftUI-Adapter: поддерживаем новые модификаторы SwiftUI на старых версиях iOS
Сегодня хочу представить вам свою библиотеку - SwiftUI-Adapter, которая избавит вас от головной боли при работе с новыми модификаторами SwiftUI. Недавно я наткнулся на удобную Android-библиотеку, которая упрощает работу с разными версиями API и подумал: «Почему бы не сделать что-то подобное для SwiftUI?». После этого родилась идея разработать инструмент, который избавит вас от бесконечных проверок available и сделает код чище.
Статья: https://habr.com/ru/articles/965732/
Платформа: iOS
现已上线!2025 年 Telegram 研究 — 年度关键洞察 
