AppFiles - Mobile Development
رفتن به کانال در Telegram
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
نمایش بیشتر2 173
مشترکین
اطلاعاتی وجود ندارد24 ساعت
-17 روز
-830 روز
آرشیو پست ها
Архитектура Android переходит от Event-Driven UI к State-Driven UI
Состояние — это то, за чем UI наблюдает постоянно. События или эффекты — это то, что UI должен обработать только один раз. Такой подход давно распространён в архитектурах MVVM и MVI. Однако если посмотреть на актуальные рекомендации Android-разработки по событиям UI, Google предлагает пересмотреть саму эту модель.
Статья: https://apptractor.ru/info/articles/arhitektura-android-perehodit-ot-event-driven-ui-k-state-driven-ui.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
JS-инъекция для iOS-тестов: как подружить WKWebView и XCTest
Мы пишем UI-тесты для Ozon Банка, и примерно каждый второй экран — с WebView. Оферты, платёжные формы, веб-флоу — всё это рендерится внутри WKWebView. И здесь XCTest оказывается почти бессилен.
Статья: https://habr.com/ru/companies/ozonbank/articles/1016596/
Платформа: iOS/тестирование
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
DI без рефлексии и бойлерплейта: магия KSP в действии
KoGen Di родился из реальной боли в многомодульной разработке — и с тех пор заметно подрос: компиляционная валидация графа, изоляция по модулям, поддержка
Fragment/ComponentActivity, а недавно — и собственный typed Gradle-плагин. Я уже перевёл на него несколько своих рабочих проектов, и количество рутинного DI-кода в них сократилось в разы. Раньше в открытом доступе было только демо-приложение; теперь открыт весь проект целиком — рантайм, KSP-процессор и Gradle-плагин.
Статья: https://habr.com/ru/articles/1070880/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительностьКак мы научили XCUITest тапать в контролы на глубине 136 уровней вложенности
У нас есть server-driven UI экран, наш BDUI, про движок которого была отдельная статья. Дерево вьюх у него настолько глубокое, что любое обращение теста к элементам падало. Причём двумя разными способами, и оба — не из-за кода, а из-за жёстких лимитов внутри самого фреймворка автоматизации.
В итоге мы научились читать дерево произвольной глубины и тапать/вводить текст в поля, которые лежат глубже ~60 уровней AX-дерева, где публичный XCUITest бессилен. Далее я буду фокусироваться на общей технике для XCUITest, а не на внутреннем устройстве нашего движка. Так что статья пригодится, даже если у вас никакого BDUI нет, а просто есть очень глубокий экран.
Статья: https://habr.com/ru/companies/cian/articles/1071034/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
SurfaceForge - отражающие поверхности, реагирующие на наклон устройства
SurfaceForge - поверхности, реагирующие на наклон устройства. Сделано на SwiftUI + Metal.
SurfaceForge на GitHub: https://github.com/AetherMaker/surface-forge
Платформа: iOS/Android
⭐️: 24
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Почему ваше приложение выглядит дёшево (и дело не в цветах)
Я видел достаточно таких случаев, чтобы сразу узнать закономерность. Разработчик сделал действительно красивое приложение, но пропустил те самые 200 миллисекунд после того, как палец касается стекла. А ведь именно эту часть приложения пользователь буквально ощущает.
Он хотел, чтобы я раскритиковал цвета.
Но цвета вообще не были проблемой.
Давайте разберёмся.
Статья: https://apptractor.ru/info/articles/pochemu-vashe-prilozhenie-vyglyadit-dyoshevo-i-delo-ne-v-tsvetah.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Как мы перенесли ответственность за поддержку мапперов моделей на KSP
Я Android-разработчик в компании Workmate, и сегодня хочу рассказать о том, как мы избавились от самой нудной части своей работы - ручной поддержки мапперов моделей - и как перенесли эту ответственность на KSP.
Каждый разработчик, работавший с проектом, где одни модели мапятся в другие, знает эту боль: добавил поле в модель и пошёл обновлять десятки мапперов вручную. Переименовал параметр - компилятор взрывается ошибками, и ты снова правишь код руками. Мапперы - это “мёртвая зона”: они пишутся механически, но при этом легко ломаются и не приносят никакой ценности бизнесу.
Мы решили избавиться от этой рутины раз и навсегда и сделали библиотеку - генератор кода маппинга на основе KSP. В этой статье я расскажу, как мы пришли к такому решению, как устроена библиотека изнутри и с какими подводными камнями столкнулись.
Статья: https://habr.com/ru/articles/1069866/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Bridge - фоновый рантайм для Android, который переживает завершение процесса и умеет объяснять своё состояние
Bridge — это среда выполнения фоновых задач Android, построенная непосредственно на основе собственных примитивов платформы: журнала событий с возможностью добавления данных, диспетчеризации с мультиплексированием JobWorkItem, анализе причин завершения процесса с помощью
ApplicationExitInfo и измерения затрат с помощью HealthStats. Работа, прерванная из-за завершения процесса, возобновляется с того места, где она остановилась, и каждая отложенная или приостановленная задача может объяснить причину, опираясь на собственные отчеты платформы.
Bridge на GitHub: https://github.com/iamjosephmj/bridge
Платформа: Android
⭐️: 8
👨🦯➡️ AppFiles: код, инструменты, практики, производительностьОбработка исключений в Kotlin Coroutines
Пытаюсь лучше понять работу Kotlin Coroutines. Беру небольшую тему про Kotlin Coroutines и пытаюсь разобраться и написать шпаргалку (максимально кратко и лаконично). Сегодня про обработку ошибок.
Статья: https://habr.com/ru/articles/1070060/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
📺 Видео и подкасты за неделю
•
(iOS En) Apple Photos App Tab Bar Using SwiftUI
• (iOS En) What's New in Xcode 27
• (iOS En) Stacked Glass Toasts Using SwiftUI
• (iOS En) Balancing High and Low-Level Programming in Swift
• (And En) What AI Gets Wrong About Android...
• (And En) If you don't type code yourself, you're falling behind.
• (And En) The place where leaking abstraction, data races and security vulnerabilities all meet
• (And En) What’s New in Kotlin 2.4
• (And En) Kotlin Performance Tracing on Android: From Coroutines to Reality
• (And En) Flow with Exposed: Life Finds a Way
• (And En) Koin + Kotlin Compiler = ♥️
• (And En) 5 Experimental Kotlin Features You Don't Want to Miss
• (And En) Multiple ViewModel Architecture in Jetpack Compose
• (Crs En) Kotlin/Wasm: Finally, the missing piece for a full stack Kotlin webapp!
• (Dev Ru) Заказываем кофе с помощью AI
• (Dev Ru) От вайбкодера к контекст-инженеру
• (Dev Ru) Вся магия Laravel — PHP, архитектура и highload
• (Dev En) Python for Engineers & Robotics – Master NumPy, Pandas, and ChatGPT Automation
Прошлогодние видео:
• (iOS Ru) Расширяем iOS-разработку с помощью AI
• (And Ru) ByteWeaver. Инструментирование байт-кода во имя великого блага
• (Crs Ru) Разработка на iOS и KMP, и жизнь на полной скорости
• (Crs Ru) Почему вам не нужен Kotlin Multiplatform
• (Crs Ru) Создание indoor-карты здания во Flutter
• (Dev Ru) 30 вопросов команде и себе — техника и практика формулировка хороших вопросов
👨🦯➡️ AppFiles: код, инструменты, практики, производительностьFud AI - трекер калорий для iOS и Android
Fud AI - открытый privacy-first трекер калорий для iOS и Android. Позволяет делать снимки или импортировать до 10 фотографий еды с возможностью добавления заметок, сканировать штрихкоды, спрашивать у своего ИИ-тренера, как достичь цели, озвучивать свой обед или использовать Siri Shortcuts на iOS для записи еды и веса. Нужно использовать собственный ключ для работы с ИИ, зато никаких учетных записей, облачной синхронизации, отслеживания или рекламы — совершенно бесплатно.
В версии для iOS используется SwiftUI, в Android - Kotlin + Jetpack Compose. Плюс есть маркетинговый сайт и готовое описание для магазинов.
Fud AI на GitHub: https://github.com/apoorvdarshan/fud-ai
Платформа: iOS/Android
⭐️: 337
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Xcode 27, похоже, меняет правила игры
Проведя с этой бета-версией достаточно времени, могу без преувеличения сказать: Xcode 27 выглядит как самое продуманное обновление инструмента за последние годы. Оно не просто добавляет новые функции. Оно пересматривает базовые предположения о том, как разработчики действительно работают, и перестраивает среду вокруг более удачных решений.
Это всё ещё бета-версия, поэтому до финального выпуска многое может измениться. Но уже сейчас всё выглядит на удивление цельно и определённо заслуживает обсуждения.
Вот что особенно привлекло моё внимание.
Статья: https://apptractor.ru/info/articles/xcode-27-pohozhe-menyaet-pravila-igry.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
9 лет Android-разработки, 3 месяца без работы - как выбраться из тупика?
Разработчик с более чем девятилетним опытом Android-разработки пожаловался на Reddit, что уже три месяца не может найти новую работу и начинает сомневаться, хочет ли вообще оставаться в мобильной разработке. Обсуждение быстро превратилось в довольно показательный срез состояния рынка Android-разработчиков в 2026 году: в комментариях появились специалисты с 5, 9, 12 и даже 14 годами опыта, которые месяцами не могут найти работу, почти не получают интервью или начинают переучиваться на backend, web и AI.
• Что случилось с автором
• «Ты не разучился программировать, ты просто заржавел»
• Android-вакансий действительно стало меньше
• Возможно, проблема не только в Android
• Android слишком узкая специализация?
• Куда уходят Android-разработчики
• AI не обязательно конкурент Android — он может стать его продолжением
• Появилась проблема «гиперспециализированных» вакансий
• Senior-интервью тоже вызывают раздражение
• Flutter тоже не выглядит очевидным спасением
• «Всё уже написано»
• Три месяца теперь воспринимаются почти как нормальный срок
• Что в итоге советует сообщество
Статья: https://apptractor.ru/info/articles/9-let-android-razrabotki-3-mesyatsa-bez-raboty-kak-vybratsya-iz-tupika.html
Платформа: Android/карьера
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Pose - автоматическая генерация превью для Composable
Экосистема предварительного просмотра Compose отлично справляется с обработкой предварительных просмотров (Showkase, Paparazzi, Roborazzi, плагин Google для скриншот-тестирования), но не имеет механизма их генерации на этапе сборки.
Pose автоматически генерирует
@Previewдля функций Jetpack Compose из вашего @Composable кода во время сборки, детерминированно, автономно, без LLM. Аннотируете, собираете, готово.
Pose на GitHub: https://github.com/AkshayChordiya/Pose
Платформа: Android
⭐️: 29
👨🦯➡️ AppFiles: код, инструменты, практики, производительностьНаше Android-приложение написано на Swift
Уже не вызывают удивление iOS-приложения, написанные на Kotlin или даже Kotlin/Compose. А вот Polymarket, крупнейший сервис пари и предсказаний в мире, сделал свое Androi-приложение с использованием Swift. Внутри приложения работает почти 170 000 строк промышленного Swift-кода: модели, сетевой слой, бизнес-логика и более 120 моделей представления. Тот же самый код используется в приложении для iOS. Одна кодовая база — два приложения. Как они это сделали, что сломалось по дороге и почему разработчики повторили бы этот путь снова - в статье.
Статья: https://apptractor.ru/info/articles/nashe-android-prilozhenie-napisano-na-swift.html
Платформа: кроссплатформа
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Пет-проекты джунов (Android)
На собеседовании часто хотят видеть свой личный пет-проект. Проект, в котором человек самостоятельно придумал идею, организовал код, спроектировал архитектуру и наступил на свои собственные грабли. Ведь именно самостоятельная разработка — от локальной базы данных до UI — дает самый мощный буст в навыках (особенно, когда одно и то же приложение переписал 3 раза =)). Поэтому у автора этой статьи появилось желание помочь начинающим разработчикам. Он собрал идеи для пет-проектов, которые личня бы оценил =), а также подобрал актуальные инструменты и бесплатные API для их реализации.
Статья: https://habr.com/ru/articles/1068942/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Neon Vision Editor - редактор Markdown на Swift
Neon Vision Editor - нативный редактор для Markdown, заметок и кода на macOS, iPhone, iPad и Apple Vision Pro. Минималистичный дизайн. Быстрое редактирование, быстрый доступ к файлам, отсутствие лишних компонентов IDE.
Элементы архитектуры:
•
EditorViewModel — единая точка оркестрации, с которой взаимодействует интерфейс для каждого окна или сцены.
• Сериализованные команды вкладок отделяют вкладку интерфейса от ресурса документа, который она представляет, сохраняя для каждого документа положение курсора и состояние области просмотра при асинхронной загрузке и обновлениях.
• Открытые локальные документы используют события NSFilePresenter, а также ограниченные проверки метаданных и содержимого. Неизменённые буферы обновляются на месте; для изменённых предлагаются варианты Keep Local, Reload from Disk или Compare.
• Нативные бриджи редактора управляют созданием объектов TextKit/UIKit и прокруткой. SwiftUI отвечает за размещение областей интерфейса, включая обёрнутый вариант разделения исходного текста и предпросмотра в macOS.
• Доступ к файлам, разбор, сравнение различий, структурированные снепшоты и другая тяжёлая работа выполняются вне главного актора; изменения состояния интерфейса возвращаются в @MainActor.
• Оболочки для отдельных платформ остаются минимальными. visionOS использует тот же редактор семейства UIKit, адаптируя только представление под пространственные интерфейсы.
• Удалённые сеансы включаются только по желанию пользователя; macOS отвечает за SSH и размещение посредника соединений, а iPhone, iPad и Apple Vision Pro подключаются в качестве клиентов.
• Сборки для App Store не содержат механизма автоматического обновления. Отдельная версия для прямого распространения на macOS подключает Sparkle и использует подписанный канал обновлений, размещённый на GitHub Pages.
• Конфиденциальные учётные данные и закладки SSH-ключей хранятся в Keychain через SecureTokenStore, а не в обычных настройках.
Neon Vision Editor на GitHub: https://github.com/h3pdesign/Neon-Vision-Editor
Платформа: iOS
⭐️: 368
👨🦯➡️ AppFiles: код, инструменты, практики, производительностьКонцентрические кнопки с использованием нового API SwiftUI в iOS 27
SwiftUI для iOS, iPadOS и macOS 27 (далее я буду сокращать до *OS 27) приносит множество новых дополнений. Одно из таких дополнений, которое меня особенно заинтересовало, — это возможность считывать значение свойства
concentricCornerRadii для GeometryProxy. Я чувствовал, что это может стать способом создания действительно концентрической формы кнопки. С момента появления концентричности углов я с нетерпением ждал появления специального ButtonBorderShape, учитывающего углы. До сих пор каждое обновление меня разочаровывало. Даже в *OS 27 SwiftUI по-прежнему не хватает полноценной формы, но теперь у нас есть возможность создать собственное решение, которое интегрируется в стандартные API SwiftUI, максимально скрывая нашу собственную реализацию.
Статья: https://apptractor.ru/info/articles/kontsentricheskie-knopki-s-ispolzovaniem-novogo-api-swiftui-v-ios-27.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительностьШпаргалка: Structured Concurrency и отмена корутин
Что будет, если запустить тяжелую фоновую обработку данных, а пользователь закроет экран? Если мы не контролируем этот процесс, потоки продолжат работу, сжигая батарею, процессорное время и создавая утечки памяти. Для решения этой проблемы в Kotlin Coroutines применяется концепция Structured Concurrency.
Статья: https://habr.com/ru/articles/1068314/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Showcase Layout Compose - подсветка UI
Showcase Layout Compose создает красивые анимированные эффекты подсветки для ваших интерфейсов. С поддержкой нескольких платформ и двумя различными вариантами для демонстрации:
• ShowcaseLayout: Классическое полноэкранное наложение с вырезами
• TargetShowcaseLayout: Современная целевая подсветка с настраиваемыми формами
Showcase Layout Compose на GitHub: https://github.com/tahaak67/ShowcaseLayoutCompose
Платформа: Android/кроссплатформа
⭐️: 124
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
