AppFiles - Mobile Development
2.15K subscribers
2.92K photos
40 videos
11 files
3.87K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Под капотом Android Automotive: Что такое VHAL и почему это сердце машины

В прошлой статье мы запустили эмулятор и убедились, что Android Automotive OS (AAOS) — это не просто зеркало вашего телефона. Это самостоятельная экосистема. Но пока мы запускали только стандартные медиа-плееры, мы скользили по поверхности.

Настоящая магия начинается там, где софт встречается с «железом».

В телефоне у вас есть стандартный набор датчиков: GPS, акселерометр, гироскоп. В современном автомобиле таких датчиков тысячи: от давления в шинах и температуры масла до угла поворота руля и статуса каждой двери. Как Android-разработчику получить доступ к этому океану данных? Не будем же мы тянуть провода к OBDII разъему?

Конечно, нет. Для этого Google построила мощный мост, по которому мы сегодня и пройдемся. Добро пожаловать в мир Car API и VHAL.

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

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

HealthQL - язык запросов, похожий на SQL, для Apple HealthKit. Запрашивайте данные о своем здоровье, используя привычный синтаксис SQL или типобезопасный DSL Swift.

SELECT avg(value), min(value), max(value)
FROM heart_rate
WHERE date > today() - 7d
GROUP BY day


Фичи:

• Синтаксис, похожий на SQL — Запрашивайте HealthKit с помощью привычных операторов SELECT, FROM, WHERE, GROUP BY, ORDER BY, LIMIT
• Типобезопасный Swift DSL — Гибкий API для программного построения запросов
• Поддержка React Native/Expo — Используйте HealthQL в приложениях React Native с полной поддержкой типов TypeScript
• 33 типа данных — Частота сердечных сокращений, шаги, калории, VO2 max, плавание и многое другое
• 5 типов данных категорий — Анализ сна, головная боль, усталость, аппетит, менструации
• Тренировки и сеансы сна — Запрос данных об упражнениях и агрегированных показателей сна
• Функции работы с датами — today(), start_of_week(), start_of_month(), start_of_year()
• Агрегации — SUM, AVG, MIN, MAX, COUNT с поддержкой GROUP BY
• Полная поддержка предикатов — Все операторы сравнения, AND, IS NULL, IS NOT NULL

HealthQL на GitHubhttps://github.com/glisom/HealthQL
Платформа: iOS
⭐️: 22

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1
This media is not supported in your browser
VIEW IN TELEGRAM
Profile page как в TikTok/Instagram на UIKit (iOS 15+)

Если вам когда-нибудь приходила задача сделать страницу профиля как в популярных социальных сетях, то вы понимаете всю боль верстки такого дизайна на SwiftUI — особенно для версий iOS ниже 16. Готовые решения не гуглятся, полностью рабочих репозиториев нет, ИИ ещё не умеют в такие комплексные задачи, а Telegram скрывает похожий лэйаут за внутренними библиотеками. Давайте разбираться, что тут можно придумать.

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

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

В этой статье я расскажу то, о чём не спрашивают на собесeдованиях и не рассказывают на курсах по Android-разработке — о неявной особенности Android, которая влияет на деградацию производительности и приводит к невоспроизводимым ANR в вашем приложении.

Поделюсь исследованием производительности SharedPreferences, расскажу об их работе в главном потоке и как это связано с потерями кадров при открытии новой Activity, а также детально рассмотрю одну из самых известных альтернатив Datastore.

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

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

Dagger/Hilt генерирует DI‑классы, Room генерирует DAO и сущности, Moshi генерирует JSON и т.д. Это экономит тонны времени. Но долгие годы для Kotlin‑проектов приходилось использовать KAPT — Kotlin Annotation Processing, прослойку для совместимости с Java‑аннотациями.

KAPT работал, но имел свои минусы. Он генерирует Java‑стабы из Kotlin‑кода и прогоняет стандартный Java Annotation Processor. Эта махинация замедляет компиляцию: сначала компилятор Kotlin должен переварить ваши исходники в промежуточные Java‑классы, потом снова всё это компилировать. Плюс, KAPT порой криво понимал Kotlin фичи, потому что мыслил категориями Java.

И вот появился Kotlin Symbol Processing (KSP). Это библиотека, которая позволяет писать процессоры напрямую для Kotlin. Обещают до 2х ускорения сборки по сравнению с KAPT, полную поддержку всех фич языка и мультиплатформенность.

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

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

Эта статья - финальный аккорд в нашей трилогии об архитектуре. Мы уже научились наводить порядок внутри экрана с помощью MVVM и управлять потоками переходов через Coordinator. Но остался один неудобный вопрос: кто создаст все эти зависимости? Если ваш Координатор превратился в свалку из десятка сервисов, которые он просто пробрасывает дальше, значит, пришло время внедрить Factory. Вы узнаете, как разделить создание объектов и управление ими, почему глобальные DI-контейнеры - это яд замедленного действия, и как построить систему, где каждый компонент получает только то, что ему нужно, не зная лишнего.

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

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

Вы используете ИИ для повышения производительности. Так почему же вы чувствуете себя более измотанным, чем когда-либо? Парадокс, с которым приходится сталкиваться каждому инженеру.

Статья: https://apptractor.ru/info/articles/ustalost-ot-ii-eto-realnost-i-nikto-ob-etom-ne-govorit.html
Платформа: искусственный интеллект

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

Phonograph Plus - легкий, разработанный в соответствии с принципами Material Design, локальный музыкальный плеер для Android. В настоящее время является независимым форком Phonograph, поскольку его поддержка прекращена (он перестал быть активным после 2020 года и был заархивирован в 2023 году), и находится в разработке и поддержке с 2021 года.

Phonograph Plus на GitHub: https://github.com/chr56/Phonograph_Plus
Платформа: Android
⭐️: 627

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

Разбираться во внутренностях AirDrop - это как препарировать фокус иллюзиониста: на сцене всё бесшовно, а за кулисами - вспотевшие инженеры пытаются заставить два разных радиомодуля не конфликтовать за общую антенну. Прочитав этот текст, вы поймете, как Apple фактически создала свой стек протоколов на базе стандартного железа, почему Bluetooth Low Energy - это «швейцар», а Wi-Fi - «грузчик», и как индустрия наконец-то пришла к единому стандарту передачи данных, который не заставляет владельцев Android чувствовать себя лишними на этом празднике жизни.

Когда вы в сотый раз кидаете мем другу через AirDrop, вы вряд ли задумываетесь, что в этот момент ваш iPhone совершает сложнейший технологический пируэт. На бумаге всё просто: два устройства соединяются и передают файл. В реальности же мы имеем дело с кастомным стеком Apple Wireless Direct Link (AWDL), который годами был «вещью в себе». Но к 2026 году правила игры изменились: магия стала открытой.

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

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

Kotlin не замедляет работу вашего Android-приложения. Замедляете его вы сами. Не из-за больших ошибок. Не из-за неудачных архитектурных решений.

Из-за крошечных, элегантных, «лучших практик», которые незаметно расходуют ресурсы процессора, памяти и кадров.

Вот 10 из них.

Статья: https://apptractor.ru/info/articles/10-oshibok-v-kotlin-kotorye-nezametno-uhudshayut-proizvoditelnost.html
Платформа: Android

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

TUIkit - фреймворк, похожий на SwiftUI, для создания пользовательских терминальных интерфейсов на Swift: без ncurses, без зависимостей от C, только чистый Swift.

TUIkit позволяет создавать приложения, используя тот же декларативный синтаксис, который вы уже знаете из SwiftUI. Определяйте свой пользовательский интерфейс с помощью View, создавайте представления с помощью VStack, HStack и ZStack, стилизуйте текст с помощью модификаторов, таких как .bold() и .foregroundColor(.red), и запускайте все это в терминале.

TUIkit на GitHub: https://github.com/phranck/TUIkit
Платформа: iOS
⭐️: 69

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

Overlay окна удобны, когда вам нужен пользовательский интерфейс, который располагается поверх всего остального. Вспомните о глобальных всплывающих уведомлениях, сетевых баннерах, строках состояния вызова, плавающих панелях отладки или контекстном меню, которое вы хотите отображать независимо от основной иерархии представлений.

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

PassThroughWindow решает эту проблему. Он позволяет вашему наложению быть видимым и интерактивным там, где это важно (само всплывающее уведомление), но все остальное передается вниз, в окна под ним.

Это особенно полезно, когда вы отображаете всплывающие уведомления в отдельном окне: всплывающему уведомлению нужны касания (закрытие, кнопка действия), но остальная часть экрана должна оставаться полностью работоспособной.

Статья: https://apptractor.ru/info/articles/passthroughwindow-v-ios-26-nalozhennoe-okno-kotoroe-ne-perehvatyvaet-zhesty.html
Платформа: iOS

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

ChipTextField - редактируемые и настраиваемые чипы для Compose Multiplatform. Есть несколько видов дизайна, поддержка Material 3, аватаров, отмечаемых чипов. 

ChipTextField на GitHub: https://github.com/dokar3/ChipTextField
Платформа: Android/кроссплатформа
⭐️: 106

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Heavy Artillery: Как гарантированно разбудить Samsung и Xiaomi на Android 14 без Firebase (FCM)

ERRATA сегодня — это не сырой прототип, а система версии v1.0 Production Ready, готовая к реальной работе "в поле".

За интерфейсом приложения на Kotlin стоит надежная, хоть и невидимая пользователю инфраструктура:

• Свой сервер (Node.js + SQLite), который занимается только валидацией лицензий и не хранит пользовательские данные.
• Telegram-бот (Telegraf), через который реализован безопасный магазин и активация ключей. Это позволяет не зависеть от биллинга сторов и сохранять прямой контакт с пользователями.

Построен суверенный "цифровой сейф", который не зависит от Google, зарубежных облаков и капризов вендоров телефонов.

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

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

JavaScriptKit - Swift-фреймворк для взаимодействия с JavaScript через WebAssembly. Он предоставляет удобный способ взаимодействия с JavaScript из кода Swift, скомпилированного в WebAssembly. Он позволяет разработчикам Swift:

• Получать доступ к объектам и функциям JavaScript
• Создавать замыкания, которые можно вызывать из JavaScript
• Преобразовывать типы данных между Swift и JavaScript
• Использовать промисы JavaScript с async/await в Swift
• Работать с многопоточностью

JavaScriptKit на GitHub: https://github.com/swiftwasm/JavaScriptKit
Платформа: iOS
⭐️: 850

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

(iOS En) SwiftUI foundations: Build great apps with SwiftUI | Meet with Apple
(iOS En) Toolbar Header Scroll Animation Effects Using SwiftUI
(iOS En) Xcode 26.3 - Agentic Coding with Free OpenAI Account
(iOS En) Sharing App Data with Uniform Type Identifiers and ShareSheets
(iOS En) Complex UI Animation: New Xcode's OnBoarding Animation Effect Using SwiftUI
(And Ru) А это понадобится после собеседования?
(And En) What Really Is Structured Concurrency In Kotlin? - Android Coding Interview Q&A
(And En) Custom Video Player In Jetpack Compose On Android (Media3 Library)
(And En) API Design at Google: Building Android Libraries
(And En) Return... in Expression Bodies?!
(And En) No more get() calls in your Koin Module!
(Crs En) Apple authentication with Firebase - Kotlin Multiplatform (CMP) Android/iOS Tutorial
(Dev Ru) ИИ ломает высшее образование? Где учиться на программиста
(Mrk Ru) ASO в 2025–2026: алгоритмы, AI, UA vs ASO и Apple Search Ads

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

(iOS Ru) Переход с UIKit на SwiftUI — разработка трекера тренировок с нуля
(iOS Ru) Навигация в SwiftUI
(And Ru) Опасности в Android: уязвимости и защитные меры
(And Ru) Как мы создавали дизайн-систему на Jetpack Compose
(And Ru) Как мы автоматизировали генерацию Baseline Profile
(Dev Ru) Верхнеуровневый обзор архитектуры CI/CD мобильного приложения
(Dev Ru) Как затащить новую технологию
(Dev Ru) Как увольнять людей?

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

Сегодня мы с радостью объявляем о выпуске Flutter 3.41, что знаменует собой важную веху на нашем совместном пути! Это захватывающее время для разработчиков; этот релиз отражает наше стремление расширить возможности нашего сообщества в формировании направления развития Flutter. Благодаря 868 коммитам от 145 уникальных участников, Flutter 3.41 обеспечивает дополнительную прозрачность и модульность, что еще больше улучшает опыт внесения вклада в Flutter.

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

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

Часто можно увидеть такую картину: разработчик влюбляется в концепт из Dribbble, тратит два дня на реализацию сложнейшей цепочки переходов, а потом удивляется, почему его iPhone 15 Pro начинает греться через пять минут использования приложения. Анимация - это всегда сделка с дьяволом (железом). Вопрос лишь в том, насколько выгодный курс обмена вы сможете выторговать.

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

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

DevAnalyzer — это кроссплатформенное настольное приложение, созданное с использованием Compose Multiplatform и Kotlin Multiplatform (KMP).

• Анализатор проектов — анализирует модули проекта, конфигурации Gradle, примененные плагины, зависимости и связанные файлы сборки.
• Очистка сборки — сканирует проекты Android Studio на наличие папок сборки во всех модулях и позволяет выборочно удалять их для освобождения дискового пространства.
• Анализатор хранилища — сканирует SDK, данные IDE, кэши Gradle и каталоги библиотек для визуализации общего использования хранилища.
• Настройки — настраивает пользовательские пути для Android SDK, домашнего каталога Gradle, Kotlin Native и расположения IDE.

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

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

DevAnalyzer на GitHub: https://github.com/Coding-Meet/DevAnalyzer
Платформа: Android/кроссплатформа
⭐️: 84

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

Этот опыт заставил меня иначе взглянуть на мобильную разработку.

Во-первых, мобильные приложения больше нельзя воспринимать как «тонкий UI-слой». В высокорисковых доменах вроде финансов клиент — это часть распределённой системы.

Во-вторых, управление состоянием — это не вопрос вкуса в архитектуре. Это требование корректности.

В-третьих, конкурентность — не продвинутая тема «на вырост». Это обязательная база.

В-четвёртых, производительность — это не про плавные анимации. Это про устойчивость под нагрузкой.

И наконец, точность имеет значение. В трейдинге ошибка округления — это не косметический баг. Это реальные деньги.

Статья: https://apptractor.ru/info/articles/sobesedovanie-v-zerodha-eti-voprosy-polnostyu-izmenili-moe-predstavlenie-o-mobilnoy-razrabotke.html
Платформа: iOS

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