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

Представьте: вы создали приложение, которое работает ровно тогда, когда у пользователя есть интернет. Нет интернета? Поздравляю, у вас мёртвое приложение и куча недовольных пользователей. Ну или курьер, который стоит как дурак и не может выполнять свою работу, потому что приложение зависло. Бизнес стоит, а вы сидите и ждёте, что всё само решится (нет).

Если хотите перестать выглядеть полными профанами и дать юзерам что-то, что не падает при первом же обрыве связи — welcome to local-first apps. Здесь всё про то, чтобы сделать локальную базу, а синхронизация — это такая себе приятная бонусная функция, а не священный грааль.

Статья: https://habr.com/ru/articles/935798/
Платформа: кроссплатформа
Proxy-паттерн в Android

Как Android-разработчики, мы постоянно сталкиваемся со сложными в обработке объектами. Представьте себе загрузку огромного изображения высокого разрешения — это медленно и потребляет много памяти. Или как насчёт функции, которая должна быть доступна только премиум-пользователям? Вам нужен способ проверки прав доступа перед запуском кода.

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

Статья: https://trricho.medium.com/the-proxy-pattern-in-kotlin-androids-smart-placeholder-b94b7d22b27f (как читать ©)
Платформа: Android
Лучший способ создания компонентов SwiftUI: @ViewConfigurable

SwiftUI делает настройку представлений лёгкой — пока вы не создадите собственные повторно используемые компоненты. Мы создали макрос для решения этой проблемы.

Статья: https://apptractor.ru/info/articles/viewconfigurable.html
Платформа: iOS
Scrcpy-GUI - графический интерфейс для Scrcpy

Scrcpy-GUI — это понятный графический пользовательский интерфейс, созданный на основе .NET MAUI, для взаимодействия со scrcpy. Scrcpy — это утилита командной строки, позволяющая транслировать и управлять Android-устройством на ПК.

С Scrcpy-GUI вы можете:

• Легко генерировать сложные аргументы командной строки scrcpy, не тратя время на изучение официальной документации.
• Получить полный контроль над виртуальными дисплеями, включая возможность запускать приложения.
• Сохранять и управлять сочетаниями клавиш для ваших любимых команд с возможностью локальной загрузки их на ПК.
• Подключаться устройства по беспроводной сети одним щелчком мыши — без лишних хлопот.
• Транслировать видео с нескольких устройств Android одновременно без лишних усилий.

Scrcpy-GUI на GitHub: https://github.com/GeorgeEnglezos/Scrcpy-GUI
Платформа: Android
⭐️: 156
BroadcastReceiver уходит. Что ждёт нас в 2025 году?

BroadcastReceiver долгое время был неотъемлемой частью Android для обработки событий и фоновых задач, но сегодня становится всё менее актуальным. Современные ограничения Android — режим Doze, новые требования к безопасности и оптимизация батареи — делают BroadcastReceiver ненадёжным инструментом для обычных фоновых задач: события перестают приходить, синхронизация срабатывает не у всех пользователей, а поддержку приходится постоянно дорабатывать после каждого обновления ОС.

Вместо «уставшего» BroadcastReceiver стоит использовать WorkManager для надежных, периодических фоновых операций — он устойчив к Doze, оптимизирует заряд, не теряет задачи после перезагрузки и работает на всех актуальных версиях Android. Для долговременных, заметных пользователю процессов лучше подойдет ForegroundService, для внутренних событий — SharedFlow или EventBus, а для push-уведомлений — FCM. Новая эпоха Android требует выбирать инструмент под задачу, а не надеяться на универсальность старых решений.

Статья: https://medium.com/@vaibhav.shakya786/broadcastreceiver-is-tired-heres-what-s-next-in-2025-0f047589aeb5
Платформа: Android
🤡1
Снепшот-тестирование в iOS: полное руководство для UIKit и SwiftUI

В мире iOS-разработки визуальные ошибки могут легко проскользнуть мимо обычных unit-тестов, особенно если проект поддерживает как UIKit, так и SwiftUI. Snapshot-тестирование — это мощный инструмент, который автоматически фиксирует и сравнивает внешний вид ваших компонентов во всех состояниях и на всех устройствах. Такой подход помогает мгновенно выявлять регрессии — например, «исчезнувшую» кнопку на iPad или некорректное отображение текста в тёмной теме — ещё на стадии CI/CD, прежде чем баги попадут к пользователям.

Грамотно организованные snapshot-тесты позволяют проверять UI-компоненты с разными параметрами и средами, а интеграция с инструментами, вроде ViewInspector в SwiftUI, делает проверку более гибкой и надёжной. Благодаря автоматическим тестам и удобному хранению эталонных изображений команда может оперативно реагировать на изменения, согласовывать внешний вид с дизайнерами и поддерживать качество приложения на высоте. В 2025 году snapshot-тестирование становится стандартом для визуального контроля и причиной, по которой пользователи видят только корректно работающий, красивый интерфейс.

Статья: https://swift-pal.com/ios-snapshot-testing-complete-guide-for-uikit-and-swiftui-apps-817af4136896 (как читать ©)
Платформа: iOS
Создание тепловой карты пульса на маршруте с помощью SwiftUI + HealthKit

Большинство беговых приложений показывают среднюю частоту пульса. «Молодец, пульс был 148 ударов в минуту». Отлично. Но где во время пробежки у вас начались проблемы? Где ваше тело было перегружено?

Вот о чём этот пост: как превратить плоскую статистику в полноцветное повествование. Мы создаём тепловую карту на базе MapKit, используя данные пульса HealthKit, и синхронизируем их с вашим GPS-маршрутом, чтобы точно показать, где вы отдыхали (синий), а где были на грани потери сознания (красным).

Статья: https://apptractor.ru/info/articles/sozdanie-teplovoy-karty-pulsa-na-marshrute-s-pomoschyu-swiftui-healthkit.html
Платформа: iOS
1
TAO Bubbles: элегантные и настраиваемые подсказки для ваших Jetpack Compose приложений

Каждый Android-разработчик сталкивается с задачей обучения пользователей новым функциям или помощи в навигации по интерфейсу. Традиционные всплывающие окна или сообщения могут быть навязчивыми. Конечно же есть способ элегантно подсвечивать элементы UI и предоставлять контекстную помощь. Встречайте TAO Bubbles – легковесную библиотеку для Jetpack Compose, созданную для отображения настраиваемых "пузырей", "подсказок" или "тултипов", которые могут указывать на конкретные UI-компоненты.TAO Bubbles прекрасно подходит для создания пошаговых руководств, демонстрации новых возможностей или предоставления контекстно-зависимой справки прямо в вашем приложении.

Статья: https://habr.com/ru/articles/936122/
Платформа: Android
SwiftyRemoteConfig - простая работа с Firebase Remote Config

SwiftyRemoteConfig делает Firebase Remote Config приятным в использовании, сочетая выразительный API Swift с преимуществами статической типизации. 

SwiftyRemoteConfig на GitHub: https://github.com/fumito-ito/SwiftyRemoteConfig
Платформа: iOS
⭐️: 17
Взлом приложения Tea: разбираем нелепый исходный код

Этого «взлома» не должно было быть. Приложение Tea — не результат работы плохого ИИ, а вопиющая халатность разработчика, вероятно, одного, с очень небольшим опытом, которому нельзя было позволять публиковать такое приложение без надзора. Приложение не было «взломано», оно добровольно опубликовало конфиденциальную персональную информацию.

Статья: https://apptractor.ru/info/articles/vzlom-tea.html
Платформа: Android/безопасность
👍1👎1
Что нового в UIKit

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

Самое интересное:

• Liquid Glass — теперь UIKit даёт больше инструментов для создания “стеклянных” и прозрачных интерфейсов с помощью UIGlassEffect, настройкой интерактивности, собственного цвета и новых кнопочных конфигураций.
• Работа с цветом: HDR-цвета, новые инициализаторы, свойство linearExposure и даже добавленные слайдеры HDR Boost в цветовых пикерах.
• Новые возможности для UIButton: добавлены стеклянные конфигурации, появилась удобная настройка переходов для символов (UISymbolContentTransition).
• Углы и формы: UICornerConfiguration и UICornerRadius позволяют настраивать радиусы каждого угла, делать капсулы и даже адаптировать углы к форме экрана.
• Кнопки в панелях: теперь есть группировка, бэйджи, опция делить фон между кнопками или скрывать Liquid Glass на отдельных кнопках, новый стиль prominent, и поддержка Writing Tools в системных кнопках.
• Контекстные и главные меню: UIKit теперь умеет собирать меню из элементов по фокусу, а новый UIMainMenuSystem позволяет гибко управлять главным меню на iPad — удалять группы, подменять элементы или настраивать стиль Find и Replace прямо через конфиги.
• Обработка скролла: UIScrollEdgeEffect и UIScrollEdgeElementContainerInteraction дают доступ к новым визуальным эффектам на краях скроллов, которые раньше были доступны только системным навбарам и тулбарам.
• Работа с навигацией: Большое обновление UINavigationBarAppearance (появились subtitleTextAttributes и largeSubtitleTextAttributes), интерактивное возвращение с любого края экрана и новые свойства для мелких деталей.

Меньшие, но приятные нововведения:

• Deprecation методов UIApplicationDelegate в пользу UISceneDelegate и UIWindowSceneDelegate.
• Новый API для UIDocumentBrowserAction, добавлена настройка показа изображения только для контекстного меню vs. навбара.
• Новые возможности для UIScrollView: Look to Scroll (прокрутка взглядом в visionOS), новые параметры edgeEffect.
• Изменения в UIModalPresentationStyle (formSheet теперь и на tvOS).
• Табличные и групповые элементы меню с поведением Repeat (повторяемые действия для горячих клавиш).
• Новые возможности создания сцен для Assistive Access.

Этот UIKit — шаг в сторону большего визуального богатства, глубокой кастомизации и гибкости не только для iOS, но и для iPad, tvOS, visionOS. Если вы ещё не пробовали стеклянные эффекты, настраиваемые углы, или не обновили свои панели навигации — самое время открыть Xcode и поэкспериментировать!

Статья: https://sebvidal.com/blog/whats-new-in-uikit-26/
Платформа: iOS
Jetpack Compose 1.9: главное из свежего релиза

В августе 2025 у Jetpack Compose вышло обновление 1.9 — и это достойный апдейт для всех, кто разрабатывает UI на Android! Кратко делюсь основными новшествами и фишками, которые теперь доступны разработчикам.

Основные обновления:

• Модификаторы dropShadow и innerShadow
Теперь можно просто добавлять красивые тени к любым компонентам. dropShadow() рисует тень позади элемента, а innerShadow() — “впадину” внутри формы. Настраивается радиус, цвет, прозрачность и spread, что даёт простор для экспериментов со сложным визуальным слоем.

• 2D scroll и Scrollable2D
Наконец-то поддерживается двухмерная прокрутка — идеально для реализации таблиц, масштабируемых изображений или любых интерактивных областей, которые нужно перемещать по осям X и Y одновременно. Nested scroll тоже поддерживается!

• Новые методы для контроля видимости
Появились onVisibilityChanged и onFirstVisible: теперь можно запускать действия, когда элементы появляются на экране (например, автоматически включать видео или логировать показы). Можно задавать минимальную долю видимости или время до срабатывания.

• Расширенные текстовые трансформации
В BasicTextField теперь можно применять стили к тексту прямо в трансформации вывода — например, выделять цветом отдельные символы (полезно для форматирования телефонов, банковских карт и пр.).

• Lazy Layout и scroll performance
Все блоки LazyLayout стали стабильными, а прокрутка и префетчинг (LazyLayoutCacheWindow) заметно ускорены — теперь сами списки и grid работают быстрее, с возможностью кастомизации предзагрузки элементов.

Важные улучшения для разработчиков:

• Более информативные stack traces
Новая экспериментальная API делает локацию крэша понятной — увидите не только свой код, но и имена composable-компонентов прямо в трассировке (включать стоит только для debug).

• Новая библиотека аннотаций
@Stable, @Immutable и @StableMarker теперь доступны как runtime-аннотации — удобно, когда хочется использовать эти метки без зависимости от Compose runtime.

Jetpack Compose продолжает быстро эволюционировать: новые визуальные эффекты, гибкая кастомизация, ускорение списка, расширенные возможности для адаптивных UI — всё это уже в стабильной версии. Оцените dropShadow, поиграйте с двухмерным скроллом или попробуйте новые возможности форматирования текста — впечатления точно будут!

Статья: https://android-developers.googleblog.com/2025/08/whats-new-in-jetpack-compose-august-25-release.html
Платформа: Android
XCalendar - клон Google Calendar на Compose Multiplatform

XCalendar - современное кроссплатформенное приложение-календарь, созданное с использованием Kotlin Multiplatform и Compose Multiplatform, с поддержкой нескольких представлений календаря (день, неделя, месяц и т.п.), управлением событиями и интеграцией праздников.

Архитектура: Compose Multiplatform (Jetpack Compose), Kotlin Multiplatform, Room Database с SQLite, Koin, Ktor, Kotlin Flow + StateFlow, Compose Navigation, Gradle с Kotlin DSL.

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

(iOS Ru) Расширяем iOS-разработку с помощью AI
(iOS En) New Toolbar APIs in iOS 26
(iOS En) SwiftUI Circular Wheel Picker (This is ScrollView!) - Custom Picker
(iOS En) User OnBoarding Tutorial Animations Using SwiftUI
(And Ru) Жертва IT-школы, или как вас не научат ничему за большие деньги
(And En) Advanced shared elements with shape morphing
(And En) Autofill in Compose
(And En) Models & Mappers With Presentation/Domain/Data - In-Depth Guide
(And En) 47 Refactorings in 45 minutes
(And En) Building immersive VR apps for Meta Quest with Jetpack Compose 
(And En) Context-sensitive resolution
(And En) The story of Gradle
(Crs Ru) Будущее Flutter, тушение пожаров и Flutter Dev Podcast
(Crs En) One Codebase, Three Platforms: X's Experience with Kotlin Multiplatform
(Crs En) Flutter framework code review: BuildContext & Element
(Dev Ru) Разработка на iOS и KMP, и жизнь на полной скорости
(Dev Ru) Как цифровая доступность улучшит ваш продукт и, возможно, вас
(Dev Ru) Что хочет CPO: как выжить разработчику в продуктовой команде
(Dev Ru) Можно ли доверять AI?
(Dev En) Kickstarting AI Agent Development in Kotlin With Koog
(Dev En) DevSecOps Course for Beginners – API Security
(Mrk Ru) ASO прила летит в космос. Х22 за месяц. От 0 до 3000$ MRR

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

(And Ru) ByteWeaver. Инструментирование байт-кода во имя великого блага
(Crs Ru) Почему вам не нужен Kotlin Multiplatform
(Crs Ru) Создание indoor-карты здания во Flutter
(Dev Ru) 30 вопросов команде и себе — техника и практика формулировка хороших вопросов
(Dev Ru) Как пользоваться DivKit
Please open Telegram to view this post
VIEW IN TELEGRAM
Заменит ли WSA эмулятор Android Studio?

Встроенный в Android Studio эмулятор позволяет создавать resizable эмулятор. Но пользоваться им мне показалось не очень удобным. Кроме того, если вы страдаете от нехватки ОЗУ, пользоваться встроенным эмулятором становиться трудно. В моём случае имеем машину с 8 Гб оперативной памяти на борту, и работа эмулятора сопровождается постоянными фризами и зависаниями.

Однако недавно я нашёл решение — Windows Subsystem For Android (WSA). И несмотря на то, что поддержка проекта совсем скоро прекращается, всё работает довольно стабильно.

Статья: https://habr.com/ru/articles/937310/
Платформа: Android
Quick RSS - приложение для чтения RSS

Quick RSS — это простая в использовании, конфиденциальная и интуитивно понятное приложение для чтения RSS-лент.

Quick RSS на GitHub: https://github.com/jaywcjlove/quick-rss
Платформа: iOS
⭐️: 242
Все, что я знаю о хорошем системном дизайне

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

• Минимизируйте количество компонентов, особенно хранение состояния.
• Один сервис пишет в базу, остальные работают через API или события.
• Читайте с реплик, пишите — на мастер; индексация и грамотные запросы — ключ к скорости.
• Долгие операции — в фоновую очередь, быстрые — прямо пользователю.
• Кэшируйте только то, что невозможно оптимизировать другими способами.
• Не злоупотребляйте событиями — проще API-запрос.
• Фокус на “горячих путях” — самые критичные точки.
• Логи и метрики нужны всегда, особенно для ошибок и редких случаев.
• Учитывайте сбои: идемпотентность, ретраи, правильное поведение при падении.

Главное — стабильность и предсказуемость, а не “эффектные” архитектурные решения.

Статья: https://www.seangoedecke.com/good-system-design/
Платформа: разработка
WordMasterKMP - клон Wordle на KMP

WordMasterKMP - приложение на Kotlin Multiplatform, вдохновлённое игрой Wordle, а также примерами Word Master и Wordle-solver. Основная логика/состояние игры включены в общий код KMP, а поверх этого реализованы клиенты для iOS (SwiftUI), Android (Jetpack Compose) и десктопов (Compose for Desktop).

WordMasterKMP на GitHub: https://github.com/joreilly/WordMasterKMP
Платформа: Android/кроссплатформа
⭐️: 78
👍1
Интеграционное тестирование на Android: практическое руководство с Hilt, Compose и Room

В статье рассказывается о важности интеграционного тестирования для Android-приложений, которое часто недооценивают в пользу юнит-тестов. Автор приводит пример собственного проекта DogBreed App, чтобы показать, как интеграционные тесты позволяют убедиться, что вся архитектура приложения — экраны, ViewModel, репозитории и источники данных — корректно взаимодействуют между собой. Особое внимание уделяется способу реализации: приложение построено на Kotlin, Jetpack Compose и Hilt, с чистой архитектурой и делением на три слоя (UI, доменный и слой данных). Для интеграционного теста используются фейковые реализации сервисов и вспомогательная, база данных в памяти Room, что позволяет менять стандартные зависимости на тестовые внутрь DI-фреймворка — в примере через Hilt и аннотацию @TestInstallIn.

Статья: https://proandroiddev.com/integration-testing-on-android-a-practical-guide-with-hilt-compose-room-73d49e243001
Платформа: Android
1👍1
Реализация продвинутого преобразования речи в текст в вашем приложении SwiftUI

Apple недавно внедрила функцию преобразования речи в текст во многие свои приложения, включая «Заметки» и «Диктофон», что отражает более широкий переход к голосовому вводу как основному методу. В связи с этим Apple выпустила новый SpeechAnalyzer API, использующий более быструю и эффективную модель, специально настроенную для обработки длинных аудиозаписей и речи отдаленных говорящих.

К концу этого руководства вы научитесь получать доступ к аудиобуферу микрофона, а затем предоставлять его новому классу SpeechAnalyzer для обработки и преобразования в текст.

Статья: https://www.createwithswift.com/implementing-advanced-speech-to-text-in-your-swiftui-app/
Платформа: iOS
👍1
SwiftUI в 2025: забудьте MVVM

На дворе 2025 год, а мне всё ещё задают один и тот же вопрос: «Где ваши ViewModel?» Каждый раз, когда я делюсь своим мнением или кодом своих открытых проектов, таких как клиент BlueSky IcySky или даже приложение Medium для iOS, разработчики удивляются, видя чистые, простые представления без единой ViewModel.

Позвольте мне прояснить: вам не нужны ViewModel в SwiftUI.

Никогда не были нужны.

И никогда не будут нужны.

Статья: https://apptractor.ru/info/articles/swiftui-v-2025-zabudte-mvvm.html
Платформа: iOS
👍4👎3🖕1