AppFiles - Mobile Development
2.17K subscribers
3.2K photos
43 videos
13 files
4.2K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Наше Android-приложение написано на Swift

Уже не вызывают удивление iOS-приложения, написанные на Kotlin или даже Kotlin/Compose. А вот Polymarket, крупнейший сервис пари и предсказаний в мире, сделал свое Android-приложение с использованием Swift. Внутри приложения работает почти 170 000 строк промышленного Swift-кода: модели, сетевой слой, бизнес-логика и более 120 моделей представления. Тот же самый код используется в приложении для iOS. Одна кодовая база — два приложения. Как они это сделали, что сломалось по дороге и почему разработчики повторили бы этот путь снова - в статье.

Статья: https://apptractor.ru/info/articles/nashe-android-prilozhenie-napisano-na-swift.html
Платформа: кроссплатформа

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤‍🔥1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Pose - автоматическая генерация превью для Composable

Экосистема предварительного просмотра Compose отлично справляется с обработкой предварительных просмотров (Showkase, Paparazzi, Roborazzi, плагин Google для скриншот-тестирования), но не имеет механизма их генерации на этапе сборки.

Pose автоматически генерирует @Previewдля функций Jetpack Compose из вашего @Composable кода во время сборки, детерминированно, автономно, без LLM. Аннотируете, собираете, готово. 

Pose на GitHub: https://github.com/AkshayChordiya/Pose
Платформа: Android
⭐️: 29

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
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: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Xcode 27, похоже, меняет правила игры

Проведя с этой бета-версией достаточно времени, могу без преувеличения сказать: Xcode 27 выглядит как самое продуманное обновление инструмента за последние годы. Оно не просто добавляет новые функции. Оно пересматривает базовые предположения о том, как разработчики действительно работают, и перестраивает среду вокруг более удачных решений.

Это всё ещё бета-версия, поэтому до финального выпуска многое может измениться. Но уже сейчас всё выглядит на удивление цельно и определённо заслуживает обсуждения.

Вот что особенно привлекло моё внимание.

Статья: https://apptractor.ru/info/articles/xcode-27-pohozhe-menyaet-pravila-igry.html
Платформа: iOS

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

(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: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Обработка исключений в Kotlin Coroutines

Пытаюсь лучше понять работу Kotlin Coroutines. Беру небольшую тему про Kotlin Coroutines и пытаюсь разобраться и написать шпаргалку (максимально кратко и лаконично). Сегодня про обработку ошибок.

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

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
AppFiles - Mobile Development
Pose - автоматическая генерация превью для Composable Экосистема предварительного просмотра Compose отлично справляется с обработкой предварительных просмотров (Showkase, Paparazzi, Roborazzi, плагин Google для скриншот-тестирования), но не имеет механизма…
Bridge - фоновый рантайм для Android, который переживает завершение процесса и умеет объяснять своё состояние

Bridge — это среда выполнения фоновых задач Android, построенная непосредственно на основе собственных примитивов платформы: журнала событий с возможностью добавления данных, диспетчеризации с мультиплексированием JobWorkItem, анализе причин завершения процесса с помощью ApplicationExitInfo и измерения затрат с помощью HealthStats. Работа, прерванная из-за завершения процесса, возобновляется с того места, где она остановилась, и каждая отложенная или приостановленная задача может объяснить причину, опираясь на собственные отчеты платформы.

Bridge на GitHub: https://github.com/iamjosephmj/bridge
Платформа: Android
⭐️: 8

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

Я Android-разработчик в компании Workmate, и сегодня хочу рассказать о том, как мы избавились от самой нудной части своей работы - ручной поддержки мапперов моделей - и как перенесли эту ответственность на KSP.

Каждый разработчик, работавший с проектом, где одни модели мапятся в другие, знает эту боль: добавил поле в модель и пошёл обновлять десятки мапперов вручную. Переименовал параметр - компилятор взрывается ошибками, и ты снова правишь код руками. Мапперы - это “мёртвая зона”: они пишутся механически, но при этом легко ломаются и не приносят никакой ценности бизнесу.

Мы решили избавиться от этой рутины раз и навсегда и сделали библиотеку - генератор кода маппинга на основе KSP. В этой статье я расскажу, как мы пришли к такому решению, как устроена библиотека изнутри и с какими подводными камнями столкнулись.

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

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

Я видел достаточно таких случаев, чтобы сразу узнать закономерность. Разработчик сделал действительно красивое приложение, но пропустил те самые 200 миллисекунд после того, как палец касается стекла. А ведь именно эту часть приложения пользователь буквально ощущает.

Он хотел, чтобы я раскритиковал цвета.

Но цвета вообще не были проблемой.

Давайте разберёмся.

Статья: https://apptractor.ru/info/articles/pochemu-vashe-prilozhenie-vyglyadit-dyoshevo-i-delo-ne-v-tsvetah.html
Платформа: iOS

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
SurfaceForge - отражающие поверхности, реагирующие на наклон устройства

SurfaceForge - поверхности, реагирующие на наклон устройства. Сделано на SwiftUI + Metal. 

SurfaceForge на GitHub: https://github.com/AetherMaker/surface-forge
Платформа: iOS
⭐️: 24
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Как мы научили XCUITest тапать в контролы на глубине 136 уровней вложенности

У нас есть server-driven UI экран, наш BDUI, про движок которого была отдельная статья. Дерево вьюх у него настолько глубокое, что любое обращение теста к элементам падало. Причём двумя разными способами, и оба — не из-за кода, а из-за жёстких лимитов внутри самого фреймворка автоматизации.

В итоге мы научились читать дерево произвольной глубины и тапать/вводить текст в поля, которые лежат глубже ~60 уровней AX-дерева, где публичный XCUITest бессилен. Далее я буду фокусироваться на общей технике для XCUITest, а не на внутреннем устройстве нашего движка. Так что статья пригодится, даже если у вас никакого BDUI нет, а просто есть очень глубокий экран.

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

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

KoGen Di родился из реальной боли в многомодульной разработке — и с тех пор заметно подрос: компиляционная валидация графа, изоляция по модулям, поддержка Fragment/ComponentActivity, а недавно — и собственный typed Gradle-плагин. Я уже перевёл на него несколько своих рабочих проектов, и количество рутинного DI-кода в них сократилось в разы. Раньше в открытом доступе было только демо-приложение; теперь открыт весь проект целиком — рантайм, KSP-процессор и Gradle-плагин.

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

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

Мы пишем UI-тесты для Ozon Банка, и примерно каждый второй экран — с WebView. Оферты, платёжные формы, веб-флоу — всё это рендерится внутри WKWebView. И здесь XCTest оказывается почти бессилен.

Статья: https://habr.com/ru/companies/ozonbank/articles/1016596/
Платформа: iOS/тестирование

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Архитектура 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: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Android Skills — что выпустил Google и почему большинство разработчиков используют навыки неправильно

Вы, скорее всего, уже видели анонс. Android Skills запустили в апреле; реакция превзошла ожидания Google, а в начале августа команда Android Developer Relations опубликовала подробный материал, в котором объяснила философию проекта.

Большинство разработчиков восприняли это как обычное описание релиза.

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

Статья: https://apptractor.ru/info/articles/android-skills-chto-vypustil-google-i-pochemu-bolshinstvo-razrabotchikov-ispolzuyut-navyki-nepravilno.html
Платформа: Android

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

ZeroDroid — открытое Android-приложение, которое превращает смартфон в универсальный набор инструментов для анализа беспроводных сетей, радиосигналов, датчиков и безопасности. Проект объединяет 29 инструментов в пяти категориях: Wireless, RF & Signals, Sensors, Network и Security. Для работы используются аппаратные возможности самого телефона — Wi-Fi, Bluetooth и BLE, NFC, GPS, сотовый модем, магнитометр, барометр, микрофон, USB, UWB и ИК-порт, если они присутствуют в конкретном устройстве.

Среди наиболее интересных функций — анализатор Wi-Fi, BLE-сканер с просмотром GATT, инструменты NFC, Wi-Fi Direct и Wi-Fi Aware, анализ ультразвукового диапазона 18–24 кГц, работа с внешними SDR-приёмниками через USB OTG и мониторинг датчиков смартфона. Есть также GPS-трекер с информацией о GNSS-спутниках и записью NMEA, EMF Mapper на основе магнитометра, инспектор USB-устройств и анализатор сотовых вышек.

ZeroDroid написан на Kotlin с использованием Jetpack Compose и Material 3. Архитектура построена вокруг MVVM, StateFlow и Hilt, для локального хранения используется Room, для камеры — CameraX, а для распознавания QR-кодов — ML Kit и ZXing. Минимальная поддерживаемая версия — Android 8.0, хотя для полноценной работы современных Bluetooth и Wi-Fi API автор рекомендует более новые версии Android. Не все возможности доступны на каждом смартфоне: например, UWB, ИК-передатчик или барометр зависят от конкретного аппаратного оснащения.

ZeroDroid на GitHub: https://github.com/theabhishekchandra/ZeroDroid
Платформа: Android
⭐️: 22

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

Речь не о том, что у этих инженеров закончились мнения. Мнений у них по-прежнему хватает. Изменилось другое — куда эти мнения теперь направляются. Стало меньше замечаний на дизайн-ревью. Меньше возражений в архитектурных обсуждениях. Меньше тех моментов, когда человек с десятью годами производственного опыта говорит: подождите, я уже видел нечто подобное, и вот чем всё закончилось.

Встречи по-прежнему проходят. Решения по-прежнему принимаются. Но один конкретный вид трения стал почти незаметным. А это трение выполняло важную функцию.

Статья: https://apptractor.ru/info/articles/senior-inzhenery-zamolchali-i-vot-pochemu-eto-plohoy-znak.html
Платформа: разработка

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

Stitch — это лёгкая библиотека внедрения зависимостей (DI), вдохновлённая SwiftUI и обеспечивающая безопасность на этапе компиляции. Она позволяет описывать карту зависимостей без необходимости использовать инструменты генерации кода.

Безопасность Stitch на этапе компиляции даёт уверенность в корректности настройки: если проект компилируется, значит зависимости сконфигурированы правильно. В отличие от типичных контейнеров зависимостей, здесь не возникает ошибок в рантайме из-за того, что какая-либо зависимость не была зарегистрирована.

Для описания карты зависимостей Stitch использует новые макросы Swift 5.9+, что делает API более удобным, а для получения объектов из карты предоставляет соответствующие реализации @propertyWrapper.
Stitch предлагает следующие ключевые возможности:

1. Интеграция в жизненный цикл SwiftUI и привычный для SwiftUI стиль работы — использовать Stitch можно так же, как другие оболочки свойств SwiftUI.
2. Внедрение зависимостей через протоколы внутри представлений SwiftUI. Библиотека расширяет возможности ObservableObject, позволяя работать с протокольными типами и при этом корректно обновлять представления.
3. Доступ к Combine-издателям для свойств протокольных типов без необходимости добавлять в протокол переменные вида Publisher<Object, Never> и вручную проксировать их в реализации.

Stitch на GitHubhttps://github.com/entrhq/stitch
Платформа: iOS
⭐️: 19
 
👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
Подготовьте ваше приложение к более широким ограничениям объема памяти

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

В Android 17 ввели ограничения памяти для отдельных приложений, начав с устройств Pixel. Их задача — защитить общую отзывчивость системы от приложений, которые потребляют слишком много памяти и вызывают замедление всего устройства. В течение следующего года всё больше производителей начнут использовать ограничения памяти Android для приложений на устройствах с объёмом ОЗУ от 4 ГБ до 16 ГБ и более. Если приложение превысит эти лимиты, система замедлит его работу, а затем может завершить процесс. Поэтому уменьшение объёма потребляемой приложением памяти становится критически важным: это помогает избежать ограничения производительности со стороны ОС и сохранить плавный пользовательский опыт.

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

Статья: https://apptractor.ru/info/articles/podgotovte-vashe-prilozhenie-k-bolee-shirokim-ogranicheniyam-obema-pamyati.html
Платформа: Android

👨‍🦯‍➡️ AppFiles: код, инструменты, практики, производительность
Please open Telegram to view this post
VIEW IN TELEGRAM
1
Как Tinder сократил холодные старты на 47%, благодаря R8 Configuration Analyzer

Используя R8 Configuration Analyzer, Tinder смог найти и удалить непреднамеренные блокировки оптимизации. Результаты оказались заметными сразу:  холодные запуски сократились на 47%, размер загружаемого приложения уменьшился на 28,98% — до 61,5 МБ, а число заметных пользователю ANR снизилось на 28%.

Статья: https://apptractor.ru/info/articles/kak-tinder-sokratil-holodnye-starty-na-47-blagodarya-r8-configuration-analyzer.html
Платформа: Android

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