AppFiles - Mobile Development
2.17K subscribers
3.23K photos
44 videos
13 files
4.23K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Mugshot - скриншот-тесты на основе превью Compose

Вы, вероятно, уже создали @Preview для большинства своих экранов. Mugshot — это библиотека для тестирования на основе скриншотов, которая превращает каждый такой превью-экран в тест: достаточно добавить аннотацию @Mugshot и один раз записать эталонное изображение (golden image), после чего сборка будет падать при любом изменении экрана. Рендеринг экранов происходит в JVM с использованием layoutlib — того же движка, который обеспечивает работу превью в Android Studio, — поэтому тесты выполняются как обычные unit-тесты на любой машине, способной собрать ваше приложение.

Почему стоит Mugshot:

• Не нужно писать отдельные классы тестов или поддерживать актуальность списка экранов. Процессор KSP находит все превью с аннотацией и генерирует тесты автоматически: добавление превью приводит к созданию скриншота, а удаление — к его исчезновению.
• Библиотека работает в модулях Kotlin Multiplatform. Превью в commonMain подхватываются так же, как и любые другие, а ресурсы Compose Multiplatform (включая stringResource) корректно отображаются на эталонных изображениях.
• Это быстро. В приложении из 30 модулей с 7176 скриншотами Mugshot выполнил проверку за 58 секунд. Paparazzi потребовалось 89 секунд, а решение Google (Compose Preview Screenshot Testing) завершилось с ошибкой нехватки памяти при стандартных настройках. Подробности и репозиторий для самостоятельного запуска теста доступны в бенчмарке.
• Библиотека не создает проблем при настройке Gradle. Тесты со скриншотами выполняются в отдельной задаче и отдельном процессе JVM, поэтому они не конфликтуют с Robolectric, а плагин Gradle поддерживает кэширование конфигурации.

Mugshot на GitHub: https://github.com/TRazDev/Mugshot
Платформа: Android
⭐️: 305

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

Kotlin ADK позволяет определять поведение агента, оркестрацию и использование инструментов непосредственно в коде. По словам разработчиков, он обеспечивает точный контроль и гибкость, а также поддерживает отладку, версионирование и развёртывание как локально, так и в облаке.

Агенты на ADK Kotlin могут работать на Android либо полностью локально на устройстве — без API-ключа и без подключения к сети во время выполнения модели, — либо через облако. Локальный вариант предназначен для сценариев, где важны офлайн-работа, низкая задержка или конфиденциальность.

Новость: https://apptractor.ru/info/news/google-vypustil-agent-development-kit-dlya-kotlin.html
Платформа: Android/Kotlin

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Почему спидтест говорит «всё хорошо», а игра лагает: как я построил Latency Dashboard и научил пинг не врать

Это третья статья про NetDiag+ — iOS-утилиту сетевой диагностики, которую я пишу один. В первой было про ICMP-сокеты без entitlements и traceroute, во второй — про MTR, Path MTU и детект блокировок по SNI. Сегодня — про инструмент, который отвечает на вопрос «почему лагает», и про баг в самом пинге, который я нашёл только потому, что положил рядом с телефоном ноутбук.

Спойлер: правильно измерить RTT на телефоне сложнее, чем отправить. Отправить — это sendto(). Измерить — семь раундов на устройстве, пять дефектов и один латентный баг, живший в приложении с версии 1.0.

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

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

9 сентября 2026 года Apple показала iPhone Duo — свой первый складной iPhone. Внешний экран 5.4″, внутренний 7.6″ в раскрытом виде, поставка с iOS 27.1, старт продаж 23 октября. Для пользователя история про железо и «самый тонкий iPhone». Для нас с вами история в другом: часть допущений, зашитых в iPhone-приложения с 2007 года, перестала быть правдой.

Экранов теперь больше одного. Экран может менять форму прямо во время работы приложения. Safe area больше не симметрична. А «только портрет» означает совсем не то, что вы привыкли под этим понимать.

Хорошая новость: если вы уже делали адаптивную вёрстку по-человечески ради iPad, здесь работы на один вечер. Если приложение хардкодит размеры экрана и ветвится по ориентации — придётся засучить рукава.

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

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

SwiftTUI — это фреймворк для создания пользовательских интерфейсов в терминале на macOS, Linux и Windows. Вы описываете представления (View) с использованием @State, стеков, контролов, фокуса, жестов и анимации — применяя декларативную модель, доказавшую свою эффективность в SwiftUI, — а фреймворк берет на себя задачи по компоновке, обработке ввода, отрисовке и взаимодействию с самим терминалом.

SwiftTUI на GitHub: https://github.com/SwiftTUI/swift-tui
Платформа: iOS
⭐️: 178

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

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

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

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

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

Мы разрабатывали другой проект, и поначалу для него был написан минимальный чат на CodeIgniter 4 с Vanilla JS и CSS плюс WebSocket‑сервер на Go. Затем стало очевидно, что такой чат слабоват, а для проекта, ориентированного на бизнес‑среду (B2B), еще и недостаточно безопасен. Тогда мы начали внедрять шифрование. Постепенно улучшали код, дорабатывали архитектуру и в какой‑то момент решили выделить мессенджер в самостоятельный проект — заодно хотелось получить реальный опыт в мобильной разработке. А потом просто увлеклись.

Статья: https://habr.com/ru/articles/1085446/
Платформа: кроссплатформа

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

Адаптивная разработка — это естественный способ, с помощью которого современные Android-приложения масштабируются под большие дисплеи, новые положения устройств и появляющиеся форм-факторы. Если ваше приложение уже использует адаптивные макеты, оно практически готово к Googlebook. Опираясь на существующую базу адаптивного UI, классы размеров окон и поддержку нескольких способов ввода, можно предоставить полностью оптимизированный опыт.

Статья: https://apptractor.ru/info/articles/perenesite-svoi-prilozheniya-na-googlebook-s-pomoschyu-adaptivnoy-razrabotki.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
AppFiles - Mobile Development
Перенесите свои приложения на Googlebook с помощью адаптивной разработки Адаптивная разработка — это естественный способ, с помощью которого современные Android-приложения масштабируются под большие дисплеи, новые положения устройств и появляющиеся форм-факторы.…
LastWave - клиент YouTube Music нового поколения

LastWave — это современное нативное Android-приложение для прослушивания музыки, использующее обширный каталог YouTube Music и созданное для тех, кто ценит умные рекомендации, динамичную визуализацию и удобное отслеживание истории прослушиваний. Приложение, разработанное с использованием дизайна Material 3 Expressive, предлагает комфортное воспроизведение музыки без рекламы, генератор умных плейлистов на базе ИИ, синхронизированные тексты песен (караоке) в реальном времени и встроенный скробблер Last.fm, отслеживающий прослушивание треков в ваших любимых музыкальных сервисах.

Технологический стек и архитектура:

• Язык и UI: 100% Kotlin + Jetpack Compose (Material 3 Expressive)
• Аудиодвижок: AndroidX Media3 ExoPlayer с элементами управления воспроизведением на экране блокировки и интеграцией с Android Auto
• Каталог потокового вещания: движок YouTube Music с использованием высокоэффективного аудиокодека Opus
• Скробблинг и отслеживание: API Last.fm и нативное отслеживание медиасессий ОС
• Система отображения текстов: синхронизация текста с точностью до миллисекунд (LRCLIB)
• Архитектура: MVVM + Clean Architecture, Room DB, Jetpack DataStore, Dagger Hilt, Coroutines и Flow

LastWave на GitHub: https://github.com/Clash-Projects/LastWave-Native
Платформа: Android
⭐️: 735

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

• (iOS En) Vertical Segmented Control Like iPhone Duo Using SwiftUI
• (iOS En) New SwiftUI APIs for iPhone Duo
• (iOS En) SwiftUI Alerts & Confirmation Dialogs in iOS 27
• (And En) My Local AI Coding Workflow (Hardware, Setup, Implementation)
• (And En) Kotlin's Name-Based Destructuring
• (Crs En) Swift Export: Where We Stand
• (Crs En) Building AI‑Powered Web Apps in Kotlin/Wasm
• (Dev Ru) Математики останутся без работы? — AI, Навье–Стокс, Lean, OpenAI
• (Dev Ru) Сопротивление ИИ: как сеньор-разработчик внедрил то, против чего был сам
• (Dev En) Jev in Action: AI Matched My Resume to 747 Jobs in 10 Seconds
• (Dev En) TimescaleDB Course – PostgreSQL for Time-Series Data

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

• (iOS Ru) Ускоряем SwiftUI с Observable
• (iOS Ru) Как укротить виджеты в супераппе?
• (iOS Ru) UICollectionViewLayout с самого начала
• (iOS Ru) UITableView с различными типами ячеек
• (And Ru) Роболектрик-скриншот-тесты на платформе Android
• (And Ru) Поймай меня, если сможешь: как обнаружить Root и Frida
• (And Ru) Размер имеет значение: как измерить и уменьшить вес Android-приложения
• (And Ru) Установка Android-приложений от доисторических времен до наших дней
• (Crs Ru) React Native перевернул игру
• (Crs Ru) Темная сторона изолятов в Dart

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

Когда я только начала разбираться, как опубликовать приложение в Google Play из России, у меня довольно быстро появилось ощущение, что я занимаюсь чем‑то если не запрещённым, то как минимум подозрительным. Почти везде логика была примерно одинаковой: из России вроде бы можно, но желательно иметь иностранную карту, иностранный адрес, иностранный номер телефона, жить где‑нибудь в Сербии, Грузии или Казахстане и, по возможности, вообще перестать быть российским разработчиком.

Очень обнадёживающе.

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

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