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

При разработке и тестировании приложений порой требуется заглянуть под капот - проанализировать HTTP-трафик или проверить кэш данных в базе данных. Ранее для этих целей мы использовали Inspektify и Delight SQL Viewer. Но в какой-то момент нам понадобился еще и удобный доступ к логам приложения и тащить ещё одно отдельное решение не хотелось. Был нужен один инструмент, который объединит всё самое необходимое в одном месте. Так появился Kick — расширяемый модульный набор инструментов, позволяющий разработчикам и тестировщикам легко инспектировать приложение.

Статья: https://habr.com/ru/articles/932992/
Платформа: разработка
👍1
Я сделал $100K на iOS-приложении. Apple забрала 30%. Остальное ушло на исправление ошибок и выгорание.

100 тысяч долларов дохода от приложения — это звучит заманчиво в твите.

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

Я рад, что сделал это. Но я бы не назвал это лёгкими деньгами.

Если вы планируете запустить что-то самостоятельно, убедитесь, что вы готовы не только разрабатывать, но и поддерживать, чинить, общаться с пользователями и улучшать.

Вот это и есть настоящая работа. И вот где настоящие затраты.

Статья: https://apptractor.ru/info/articles/ya-sdelal-100k-na-ios-prilozhenii-apple-zabrala-30-ostalnoe-ushlo-na-ispravlenie-oshibok-i-vygoranie.html
Платформа: инди-разработка
👍1
PotentCodables - мощный набор реализаций и расширений для Codable

PotentCodables предоставляет стандартные энкодеры и декодеры для фреймворка Swift Codable. Кроме того, все кодировщики и декодировщики предоставляют расширенные возможности для упрощения и повышения эффективности работы с форматами данных.

Фреймворк призван решить четыре основные проблемы, связанные с системой Swift Codable:

• Разрешить декодирование и/или кодирование значений неизвестной структуры (например, любого закодированного значения)
• Поддержка кодирования/декодирования полиморфных типов с сохранением возможности реализации Codable в Swift
• Снижение сложности и объёма кода, необходимого для реализации и тестирования новых форматов сериализации
• Предоставить библиотеку полнофункциональных реализаций популярных форматов сериализации

PotentCodables на GitHub: https://github.com/outfoxx/PotentCodables
Платформа: iOS
⭐️: 77
👍2
Избегайте ошибок SwiftUI с ViewModel

Когда я впервые перешёл с UIKit на SwiftUI, одной из самых неприятных ошибок, с которыми я столкнулся, была следующая:

Моя ViewModel постоянно неожиданно ресетилась.

Казалось, это происходит случайно, пока я не понял разницу между @StateObject и @ObservedObject.

Статья: https://apptractor.ru/info/articles/izbegayte-oshibok-swiftui-s-viewmodel.html
Платформа: iOS
👍2
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/
Платформа: разработка