AppFiles - Mobile Development – Telegram
AppFiles - Mobile Development
2.13K subscribers
2.76K photos
38 videos
11 files
3.69K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
📺 Видео и подкасты за неделю на @AppFiles

Дивный мир Swift Concurrency
(iOS Ru) Задачи с собеседований: Leetcode — Недостающее число
(iOS Ru) Why The Composable Architecture is Overrated
(iOS En) Animated Async Button With Custom Spinner Using SwiftUI
(iOS En) Master SwiftUI Layout With EASY Spacing And Padding
(iOS En) ChatGPT Pro for iOS Devs: HONEST Review
(iOS En) Create Custom Tab Bars in SwiftUI – An Alternative to Default Tabs
(iOS En) VisionOS Style Menus for iOS Using SwiftUI
(And Ru) Кастомные лейауты в Jetpack Compose
(And En) Full 2025 Kotlin Crash Course For Beginners
(And En) Create Boilerplate Files With ONE Click With Multi-File Templates In Android Studio
(And En) Mastering UI Events and States in Jetpack Compose
(And En) Parsing XML namespaces and trying not to lose our minds
(Dev Ru) Javanoscript для бэкенда – отличная идея: Node.js, NPM, Typenoscript
(Dev En) Building MCP with Kotlin: Claude Desktop Controls My Smart Home Lights

Что было год назад:

(iOS Ru) Разработка под Apple Vision Pro
(iOS Ru) Как встроить в TextField индикатор загрузки и кастомную View
(And Ru) Мапим данные из domain в ui модуль в многомодульном проекте
(Crs Ru) Рецепт приготовления кроссплатформенного мобильного видеоредактора
(Dev Ru) Собеседование по System Design: проектируем клон Авито
(Dev Ru) Демистифицируем машинное обучение – из разработчика в ML-инженеры
(Dev Ru) Программисты не нужны
Please open Telegram to view this post
VIEW IN TELEGRAM
Создаём многомодульную библиотеку на Android: как же собрать fat-aar?

В Android-разработке могут возникать сценарии, когда нам нужно собрать один aar из нескольких модулей.

Однажды нам в Сравни потребовалось создать SDK для наших партнёров — на основе уже существующего проекта. Сделать это хотелось без радикальных изменений в проекте и излишнего раскрытия деталей его устройства.

Задача понятная, но нетривиальная в реализации. Google до сих пор не предоставляет полноценного инструмента для создания fat-aar; к opensource-решениям также много вопросов.

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

О том, как мы к этому подступились и к чему пришли, рассказываем под катом.

Статья: https://habr.com/ru/companies/sravni/articles/892416/
Платформа: Android
10 упражнений от боли в спине, которые помогут программистам

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

Статья: https://apptractor.ru/info/articles/10-uprazhneniy-dlya-predotvrascheniya-boley-v-spine-kotorye-pomogut-programmistam.html
Платформа: здоровье
3
AestheticText - модификатор SwiftUI, который сжимает текст по горизонтали настолько, насколько это возможно без переносов, то есть делает каждую строку максимально близкой по ширине. Это реализовано с помощью a single-view макета, который измеряет свое содержимое с помощью двоичного поиска, чтобы найти наименьшую возможную ширину (с заданным уровнем точности), которая не влияет на высоту.

AestheticText на GitHub: https://github.com/kylebshr/AestheticText
Платформа: iOS
⭐️: 86
👍1
Основы цветовой системы Material3 для Android-разработчиков

Material3 — это последняя итерация Material Design, с динамическим тематическим оформлением, обновленными компонентами и многим другим. Однако сам этот фреймворк может быть слишком подавляющим с его более чем 200 различными цветовыми вариантами и десятками страниц документации.

Хорошо, что на самом деле все не так сложно, и он может значительно облегчить жизнь разработчикам.

Статья: https://apptractor.ru/info/articles/material3-colors.html
Платформа: Android
1👍1
«Давайте просто…»: системные идеи, которые звучат хорошо, но почти никогда не работают

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

• Давайте просто сделаем возможность подключения
• Давайте просто добавим API
• Давайте абстрагируем это еще раз
• Давайте сделаем это асинхронным
• Давайте просто добавим средства контроля доступа позже
• Давайте просто синхронизируем данные
• Давайте сделаем это кроссплатформенным
• Давайте просто сбежим в нативный код

Статья: https://apptractor.ru/info/articles/davayte-prosto-sistemnye-idei.html
Платформа: разработка
1
Scratchify - это легкий и настраиваемый SDK для скретч-карт, созданный с использованием Jetpack Compose Multiplatform (поддерживает Android и iOS). Он позволяет создавать интерактивные скретч-поверхности, на которых пользователи могут соскрести верхний слой, чтобы открыть скрытый под ней контент. Идеально подходит для поощрений, скидок, сюрпризов и элементов геймификации в вашем приложении.

Scratchify на GitHub: https://github.com/gsrathoreniks/scratchify/
Платформа: Android
⭐️: 23
1
Хакнуть Qt: как мы запускали Picture-in-Picture в навигаторе 2ГИС

В Android-приложение 2ГИС мы добавили новый режим PiP (Picture-in-Picture, или «картинка в картинке»). С PiP наши пользователи смогут следить за маршрутом в маленьком плавающем окне на основном экране. Например, когда нужно быстро прочитать сообщение или включить подкаст и при этом сохранять фокус на навигации. Режим PiP — это не просто «приятная мелочь», а функциональность, которая подстраивается под новые требования пользователей навигатора.

В этом посте поделюсь, как решал несколько трудностей, которые встретились при разработке этой функции.

Статья: https://habr.com/ru/companies/2gis/articles/881446/
Платформа: Android
Сценарии использования ServerSocket

Если бы оба участника обмена данными были Android‑приложениями, мы могли бы использовать стандартные механизмы IPC, такие как Intent для отправки сообщений, ContentProvider для доступа к данным или Binder для более сложных взаимодействий. Но в нашем случае одна из сторон — браузер, в котором работает веб‑приложение. Браузер не имеет доступа к этим механизмам, так как работает в своем песочном окружении и не может напрямую взаимодействовать с компонентами Android.

Именно поэтому ServerSocket становится удобным решением, позволяя Android‑приложению создать локальный сервер, к которому браузер может подключаться как к обычному веб‑серверу. Это дает возможность гибко передавать данные между приложением и сайтом, обходя ограничения стандартных средств IPC.

Статья: https://habr.com/ru/companies/tbank/articles/893890/
Платформа: Android
1
This media is not supported in your browser
VIEW IN TELEGRAM
ttyd - это простой инструмент командной строки для шаринга терминала через Интернет. Поддерживает macOS, Linux, FreeBSD/OpenBSD, OpenWrt и Windows.

ttyd на GitHub: https://github.com/tsl0922/ttyd
Платформа: разработка
⭐️: 8.7K
👍1
Настраиваем работу с iOS-проектами в Zed

Zed — это высокопроизводительный многопользовательский редактор кода. Сегодня я хочу поделиться тем, как я настроил Zed для своего любимого языка программирования Swift. Вместо исчерпывающего обзора самого Zed (возможно, это тема для другой статьи), эта статья посвящена практическим соображениям и практическим шагам по оптимизации вашего опыта программирования на Swift с помощью Zed. Давайте же погрузимся.

Статья: https://apptractor.ru/info/articles/zed-swift.html
Платформа: iOS
👍2
Как эффективно работать со SwiftUI в продакшене? Внедрение в существующие проекты, тестирование, производительность, архитектура — вопросов по-прежнему много. Как сделать так, чтобы всё работало?

Новый сезон онлайн-конференции Podlodka iOS Crew (31 марта – 4 апреля) будет посвящен SwiftUI.
Глубокие доклады, технические разборы и реальные кейсы от опытных разработчиков. Сессии идут утром и вечером, можно совмещать с работой.

💡 Где печется SwiftUI — Георгий Остроброд (JigSpace, Latook Software) объяснит, как связаны SwiftUI и Metal, и покажет магию визуальных эффектов.

🛠 Как макросы изменили навигацию — Михаил Рубанов (Dodo Engineering) покажет, как макросы упрощают код, помогают объединять SwiftUI и UIKit и создают удобную навигацию, которую легко тестировать.

🏗 Архитектурные паттерны в SwiftUI — Борис Бугор (Aiphoria.AI) сравнит MVVM, Redux и TCA, чтобы выбрать лучший подход к управлению состоянием.

🔄 Из SwiftUI в UIKit и обратно — Дмитрий Куркин (Xymatic) разберёт грамотную интеграцию этих фреймворков без хаков.

Конференция сосредоточена на практической пользе – всё, что узнаете, можно сразу применять в работе.

👉 Билеты и подробности: https://podlodka.io/ioscrew 🎟

А наш промокод apptractor15 дает скидку в 500р🥳
Step By Step - это геймифицированное приложение-счетчик шагов, объединяющее фитнес с историей. Оно преобразует реальные шаги в очки энергии, которые позволяют развивать сюжет, мотивируя пользователей оставаться активными, погружаясь в интерактивные текстовые RPG-приключения.

Step By Step на GitHub: https://github.com/Great-Visions-Code/Step-by-Step
Платформа: iOS
⭐️: 7
Расследуем дело асинхронного программирования с Леонидом Каневским

Количество гайдов по Modern Concurrency в Swift все увеличивается, тема актуальна для разработчиков любого уровня. Я предлагаю вам ламповую экскурсию в историю асинхронного программирования. Можно относиться к этому как к расследованию нераскрытого дела. Эта статья не станет настольным справочником, но будет интересным обзором истоков концепции. Заваривайте чай или кофе, устраивайтесь поудобнее и давайте начнем!

Статья: https://habr.com/ru/companies/clevertec/articles/892348/
Платформа: iOS
Как мы следим за качеством unit-тестов

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

Но для того чтобы получить максимальную пользу от тестов, важно писать их правильно. В этой статье мы обсудим best practices, применяемые командой СБЕРа для написания тестов, и рассмотрим подходы для повышения их эффективности.

Статья: https://habr.com/ru/companies/sberbank/articles/893914/
Платформа: Android/тестирование
Как 40 строк кода ускорили End to End тесты на iOS более чем на 50%

С учетом того, что у нас в iOS около 30 тысяч юнит-тестов и почти 1 тысяча сквозных тестов (и это число растет), ускорение нашего E2E-пакета стало первоочередной задачей, поскольку на его выполнение уходит значительное количество времени. В этом посте мы расскажем о том, как мы ускорили наши тесты на 50% с помощью небольшого, целенаправленного изменения.

Статья: https://apptractor.ru/info/articles/40-end-to-end-50.html
Платформа: iOS/тестирование
👍2
MCP Kotlin SDK - Kotlin-реализация Model Context Protocol (MCP), предоставляющая клиентские и серверные возможности для интеграции с LLM.

Model Context Protocol дает возможность приложениям предоставлять контекст для LLM стандартизированным способом, отделяя проблемы предоставления контекста от фактического взаимодействия с LLM. Этот Kotlin SDK реализует полную спецификацию MCP, что позволяет легко:

• Создавать MCP-клиентов, которые могут подключаться к любому MCP-серверу
• Создавать MCP-серверы, предоставляющие ресурсы, промпты и инструменты.
• Использовать стандартные транспорты, такие как stdio, SSE и WebSocket
• Обрабатывать все сообщения протокола MCP и события жизненного цикла

MCP Kotlin SDK на GitHub: https://github.com/modelcontextprotocol/kotlin-sdk
Платформа: Android
⭐️: 359
🔥1
Как работать с Custom Layout в Jetpack Compose

Сегодня я расскажу про кастомные Layout в Jetpack Compose. Они пригодятся, например, если вы разрабатываете свою дизайн-систему или хотите использовать сложные лейауты, которые есть во View-системах, но ещё не появились в вашей версии Jetpack Compose.

Если вы привыкли к кастомным View, то работа с кастомными Layout в Compose может показаться немного непривычной, но на самом деле, как мы увидим далее — там больше общего, чем кажется на первый взгляд.

Статья: https://habr.com/ru/companies/avito/articles/894432/
Платформа: Android
Как я «взломал» популярное приложение и добыл корпоративный токен OpenAI

Если OpenAI-токен попадет в руки злоумышленника, это может привести к серьезным последствиям: несанкционированный доступ к платным API, утечка конфиденциальных данных, подделка запросов от имени компании и внезапные финансовые потери из-за неконтролируемого расхода средств. (цитата chatGPT).

Статья: https://habr.com/ru/articles/894412/
Платформа: разработка/безопасность
Топ-7 утечек памяти Android и как их избежать

• Статический контекст: классическая ловушка
• Внутренние классы и лямбды: молчаливые хранители
• Зомби потоки и корутины
• Забытые слушатели: фантомные наблюдатели
• Спагетти из синглтонов
• View вампиры: UI-компоненты, которые не хотят умирать
• Ошибки с растровыми изображениями и монстры состояний

+ Ваш набор инструментов для борьбы с утечками 2025

Статья: https://apptractor.ru/info/articles/top-7-utechek-pamyati-android-i-kak-ih-izbezhat.html
Платформа: Android
Blocks - крошечный клон Minecraft на C и GLSL с использованием нового SDL3 GPU API.

Фичи:

• Процедурная генерация мира
• Параллельная загрузка чанков
• Блоки и растения
• Прозрачность (ограниченная)
• Отложенный рендеринг
• Направленные тени
• SSAO
• Затенение глубины воды
• Постоянные миры

Blocks на GitHub: https://github.com/jsoulier/blocks
Платформа: разработка
⭐️: 105
2