AppFiles - Mobile Development
Відкрити в Telegram
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Показати більше2 166
Підписники
+124 години
+17 днів
+930 день
Архів дописів
Android UI-тесты с Maestro без тяжелой инфраструктуры
Maestro в Android-проекте: mock flavor, базовые сценарии и локальный прогон UI-тестов через Git pre-push без тяжелой инфраструктуры.
Статья: https://www.codingpas.ru/posts/android-ui-tests-maestro-pre-push/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Все не так с Codable
Опыт нашей команды в работе над производительностью показал, что оптимизации базовых технологий и компонентов намного ценнее точечных оптимизаций. Точечные оптимизации очень хрупкие: немного изменится граф инициализации, последовательность выполнения некоторых функций, добавится новый аргумент в конструктор — и все, точечная оптимизация уже не работает или неактуальна.
А такие базовые компоненты, как
JSONDecoder/Encoder, используются в iOS-проектах повсеместно, и ускорение их работы дает ощутимое влияние на общую производительность приложений.
Статья: https://habr.com/ru/companies/tbank/articles/977694/
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительностьSnowdrop - простая работа с сетью
Snowdrop — типобезопасный, простой в использовании фреймворк на основе Swift Macros, созданный для того, чтобы вы могли с легкостью создавать и поддерживать сложные сетевые запросы.
Функции:
• Создание типобезопасных сервисов с помощью макроса @Service
• Поддержка различных типов методов запроса (например, @GET, @POST, @PUT, @DELETE, @PATCH, @CONNECT, @HEAD, @OPTIONS и т.п.)
• Пиннинг SSL/сертификатов
• Перехватчики
• Возможность создания мок-объектов
Snowdrop на GitHub: https://github.com/neothXT/Snowdrop
Платформа: iOS
⭐️: 67
Ускорение CI сборок в Xcode с кэшированием слотов
Я прошел через множество трудностей, чтобы прийти к этому, и нигде не был описан подход, который я в итоге выбрал. Я подозреваю, что это связано с тем, что относительно немногие используют собственную инфраструктуру CI на macOS, что является обязательным требованием для этой конфигурации.
Далее следует полный технический анализ решения, которое я в итоге реализовал, которое я называю кэшированием с подогревом слотов.
Статья: https://apptractor.ru/info/articles/uskorenie-ci-sborok-v-xcode-s-keshirovaniem-slotov.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Repost from Mobile Development by AppTractor
🦸♀️ "Станьте инженером, использующим искусственный интеллект" - обучающий курс JetBrains и Nebius
В сотрудничестве с облачной платформой Nebius AI компания JetBrains запустила серию из десяти бесплатных мини-курсов для разработчиков, демонстрирующих, как интегрировать ИИ в рабочий процесс, чтобы повысить производительность.
Всего на платформе есть 10 курсов и один Live-урок:
• Техники промптинга
• Программирование с ИИ-агентом
• Теория агентского рабочего процесса
• Обзор ИИ-инструментов для разработчиков
• ИИ-агенты как ваша команда
• Создание собственного ИИ-агента
• ИИ в QA
• Введение в ИИ для DevOps
• Легальные риски использования ИИ для программирования
• Создание приложения с ИИ с нуля
• Лабораторная ИИ разработки
Внутри 25 практических задач, выпускной проект. Предполагаемое время на все - около 20 часов. Все бесплатно. Также есть план за $500, который включает более сложную программу обучения и в итоге позволяет получить сертификат.
Android Gradle Graph Plugin - мониторинг зависимостей проекта
Gradle плагин поможет оптимизировать модули в больших многомодульных Android-проектах. Он показывает лишние зависимости в модулях, подскажет, какие модули лучше переделать в котлин модуль, сгенерирует граф зависимостей и метрики.
Плагин был одним из инструментов для ускорения сборки. Подробнее об опыте ускорения сборки проекта 1Fit можете узнать в докладе.
Android Gradle Graph Plugin на GitHub: https://github.com/Anelkad/gradle-portal-verification-PENLI5B8
Платформа: Android
⭐️: 17
Улучшение доступности в Android-приложениях
В этом руководстве вы узнаете, как используя инструменты Android создавать приложения, доступные для всех. Обеспечение корректного описания контента, удобных сенсорных областей и читаемого цветового контраста — это простые шаги, которые сделают наше приложение более доступным и удовлетворят потребности каждого пользователя.
Статья: https://apptractor.ru/info/articles/uluchshenie-dostupnosti-v-android-prilozheniyah.html
Платформа: Android
Cupertino - локальный сканер документации Apple и сервер MCP
Cupertino - инструмент для сканирования, индексирования и предоставления документации Apple для разработчиков агентам искусственного интеллекта через протокол контекста модели (MCP).
Cupertino — это локальная, структурированная, готовая к использованию с ИИ система документации для платформ Apple. Она:
• Сканирует документацию разработчиков Apple, Swift.org, предложения Swift Evolution, рекомендации по проектированию пользовательского интерфейса, устаревшие руководства Apple Archive и метаданные пакетов Swift
• Индексирует всё в быструю, доступную для поиска базу данных SQLite FTS5 с рейтингом BM25
• Предоставляет документацию агентам ИИ, таким как Claude, через протокол контекста модели (MCP)
• Обеспечивает автономный доступ к более чем 302 424 страницам документации для 307 фреймворков
Зачем это нужно?
• Больше никаких галлюцинаций: агенты ИИ получают точную и актуальную документацию по API Apple
• Автономная разработка: работайте с полной документацией без доступа к интернету
• Детерминированный поиск: один и тот же запрос всегда возвращает одинаковые результаты
• Локальный контроль: управляйте своей документацией, проверяйте базу данных, создавайте сценарии рабочих процессов
• Дизайн, ориентированный на ИИ: создан специально для интеграции с агентами ИИ через MCP
Cupertino на GitHub: https://github.com/mihaelamj/cupertino
Платформа: iOS
⭐️: 105
Я уменьшил iOS-приложение с 200 до 8 МБ: побочные эффекты, которых я не ожидал
Уменьшить размер приложения с 200 до 8 МБ — легко.
Жить с последствиями — вот это нелегко.
Это история о том, как я слишком много оптимизировал, слишком поздно это понял и случайно создал один из самых запутанных кошмаров отладки в своей карьере.
Статья: https://apptractor.ru/info/articles/200-8.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Создание приложения с меню на Flutter, которое не занимает много памяти
Расскажу вам в этой статье, как я снизил потребление памяти моего macOS-приложения на Flutter более чем на 90%. Это потребовало неожиданно много усилий и включало создание собственного хоста для Flutter, разработку пользовательского плагина для перетаскивания и отладку кучи кода на Rust.
Статья: https://habr.com/ru/companies/piter/articles/976000/
Платформа: кроссплатформа
ComposeGuard - обнаружение нарушений правил и лучших практик Jetpack Compose
ComposeGuard — это плагин для IntelliJ/Android Studio, который обеспечивает обнаружение нарушений лучших практик Compose в режиме реального времени во время написания кода. Он анализирует ваши компонуемые функции и выделяет проблемы на основе документации по правилам Compose.
Вместо того чтобы ждать проверок линтера во время сборки или проблем в рантайме, вы получаете мгновенную обратную связь прямо в вашей IDE с визуальными индикаторами, быстрыми исправлениями и подробными объяснениями.
ComposeGuard на GitHub: https://github.com/AndroidPoet/compose-guard
Платформа: Android
⭐️: 17
9 типичных ошибок в Kotlin Flow, которые вы, вероятно, совершаете.
Автор делится своим опытом, собранным в ходе код-ревью реальных Android-проектов. Он отмечает, что, несмотря на всю мощь Kotlin Flow, разработчики часто сталкиваются с неочевидным поведением, которое может приводить к тихой отмене работы, повторному выполнению ресурсоемких операций или неожиданным проблемам с жизненным циклом. В статье подробно рассматриваются девять распространенных ошибок, каждая из которых сопровождается примерами плохого и хорошего кода и краткими практическими правилами, применимыми в реальной разработке.
Статья: https://medium.com/@af2905g/9-kotlin-flow-mistakes-youre-probably-making-c946ad750452
Платформа: Android
📺 Видео и подкасты за неделю
•
(iOS Ru) Разбор кода: iOS-приложение для медитации на Swift
• (iOS En) SwiftUI Animated Tab Icons - Symbol Effects Tab Bar
• (iOS En) RichText Notes App - AttributedStrings and SwiftData
• (iOS En) Interactive Map Carousel | MapKit | Map Animations | SwiftUI
• (And Ru) Как сделать приложение за 10 минут? | FlowMVI Часть 1 - Часть 2 - Часть 3
• (And XR) The Android Show | XR Edition
• (And XR) Getting started developing on AI Glasses
• (And XR) What's new in the Android XR SDK for Unity
• (And XR) Designing interfaces for wired XR glasses
• (And XR) Designing audio experiences on AI Glasses
• (And XR) XR Journey: From Snapdragon Spaces to Android XR
• (And XR) Design best practices for display AI Glasses
• (And XR) What's new in the Jetpack XR SDK for immersive experiences
• (And En) Bring your own model - Android Developers Backstage
• (And En) Bottom Nav With Multiple Back Stacks In Navigation3
• (And En) Nested Nav Graphs & Shared ViewModels With Navigation3
• (And En) FaceCut App - Create Beautiful Portraits in minutes
• (Crs En) Why iOS Devs Struggle with KMP (and How to Fix It)
• (Dev Ru) Заменит ли AI разработчика
• (Dev Ru) SWE-агенты — Пишем код, LLM, автономный ИИ
• (Dev Ru) Open Source: альтруизм или скрытая выгода?
• (Dev Ru) Как внедрить ИИ в разработку и подружиться с безопасниками
• (Dev Ru) Как выявлять баги до первой строчки кода: опыт внедрения тест-анализа и тест-дизайна
• (Dev Ru) Как мы делаем больше 10 релизов в день без регресса
Прошлогодние видео:
• (And Ru) Полный разбор Kotlin Delegated Property
• (Crs Ru) BA x Flutter: взаимодействие отделов, запуск кроссплатформы и почему хорошее ТЗ — бич креативности
• (Dev Ru) Карьера и лидерство в IT
• (Dev Ru) Вся правда о грейдах, ревью и промоушенах
• (Dev Ru) Искусство создания антихрупкого APIXcodeProj - работа с проектами Xcode
XcodeProj — это библиотека от Tuist, написанная на Swift, для анализа и работы с файлами проектов Xcode. С ее помощью можно писать скрипты и автоматизировать задачи в проекте. Например, можно создать скрипт, который будет синхронизировать ключ с версией проекта с текущим тегом в Git, представляющим версию проекта.
XcodeProj на GitHub: https://github.com/tuist/XcodeProj
Платформа: iOS
⭐️: 2.2K
RemoteCompose: другая парадигма SDUI в Jetpack Compose
RemoteCompose всё ещё находится в разработке AndroidX и официально пока не опубликован, однако концепция очень многообещающая.
Сервер перехватывает (capture) любой макет Jetpack Compose и выдает его в компактном сериализованном формате. Это своего рода «скриншот» вашего пользовательского интерфейса, только вместо пикселей вы захватываете фактические инструкции отрисовки. Этот полученный документ содержит всё необходимое для воссоздания пользовательского интерфейса: фигуры, цвета, текст, изображения, анимацию и даже интерактивные области касания. На стороне сервера пишется стандартный код Compose. Не нужно изучать новый DSL (Domain-Specific Language), поддерживать схему JSON или осваивать язык шаблонов. Если вы можете написать это на Compose, вы можете захватить это с помощью RemoteCompose.
В приложении работает простой (платформенный) плеер, который управляет показом и взаимодействием с этим ByteArray. Клиентскому устройству не нужны ваши композабл функции, ваши модели представления или ваша бизнес-логика — ему нужны только байты документа и проигрыватель.
Статья: https://apptractor.ru/info/news/remotecompose.html
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Таким образом, преобразуя макеты Compose в переносимый формат документа, RemoteCompose обеспечивает управляемый сервером пользовательский интерфейс, а значит мгновенное A/B-тестирование, обновление контента в реальном времени и кроссплатформенную согласованность, сохраняя при этом производительность нативного рендеринга. Фреймворк справляется со сложностью сериализации, передачи и рендеринга, позволяя вам сосредоточиться на проектировании превосходного пользовательского опыта.
Flutter MethodChannel: как подружить Dart с нативным Android (и iOS)
Сегодня поговорим о том, как Flutter-приложению выйти за пределы чисто Dart-мирка и воспользоваться возможностями родной платформы, например, вызвать API Android или iOS напрямую. Например, есть какая-нибудь классная фича в Android SDK, а в Flutter её нет. Как быть? Ответ — писать собственный плагин и использовать MethodChannel.
Статья: https://habr.com/ru/companies/otus/articles/970094/
Платформа: кроссплатформа
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Awesome Jetpack Compose Animations - коллекция анимаций Jetpack Compose
Awesome Jetpack Compose Animations - организованная коллекция (24 штуки) классных анимаций для кнопок, карточек, изображений и многого другого — идеально подходит для улучшения ваших приложений и проектов.
Awesome Jetpack Compose Animations на GitHub: https://github.com/Swapnil-J-Patil/Delightful_Animations
Платформа: Android
⭐️: 13
Уроки, извлеченные из собеседования по Swift
Некоторое время назад я проходил собеседование в команде разработчиков UI-фреймворка на SwiftUI в крупной компании-поставщике платформ. Поскольку я работал со SwiftUI с момента его выпуска, я был очень рад этой возможности. Но после многих лет работы в качестве независимого разработчика это было моё первое настоящее техническое собеседование за долгое время.
Спойлер: меня не взяли. Но я кое-чему научился в области алгоритмов Swift и тому, как подходить к техническим собеседованиям.
Статья: https://apptractor.ru/info/articles/uroki-izvlechennye-iz-sobesedovaniya-po-swift.html
Платформа: iOS
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Создание кастомного Toolbar с Jetpack Compose. Подробный разбор всех попыток и решений
Сегодня предлагаю разобрать путь создания кастомного тулбара от первой кривой реализации до оптимизированного решения.
И главная проблема, которую надо решить при создании этого компонента это центрирование title и subtitle. Эта проблема возникает потому что у нас может быть тулбар с разным количеством иконок по обе стороны от заголовка, текстом и иконками или только с title. И если ширина иконок у нас стандартна (44 dp), и достаточно просто умножить эту ширину на количество иконок справа, чтобы понять свободное пространство для title и subtitle, то с текстом с одной или с двух сторон всё намного сложнее, так как мы не можем заранее вычислить ширину этого текста, а значит не можем правильно центрировать и задать ширину title и subtitle.
В этой статье я расскажу, как я решил этот вопрос.
Статья: https://habr.com/ru/companies/psb/articles/974368/
Платформа: Android
👨🦯➡️ AppFiles: код, инструменты, практики, производительность
Вже доступно! Дослідження Telegram за 2025 — головні інсайти року 
