AppFiles - Mobile Development – Telegram
AppFiles - Mobile Development
2.13K subscribers
2.76K photos
38 videos
11 files
3.69K links
Библиотеки, обучающие статьи, курсы и видео для (мобильных) разработчиков. Если есть вопросы - пишите @lbogolubov.
Download Telegram
Настраиваем работу с 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
This media is not supported in your browser
VIEW IN TELEGRAM
Mocking Star - это мощный инструмент для имитации запросов, предназначенный для упрощения мокирования http-запросов, отладки работы с сетьюи использования UI-тестов для ваших приложений.

Ключевые особенности:

• Мокирвоание запросов: легко подделывайте запросы и тестируйте различные случаи с помощью сценариев
• Модификация запросов: модифицируйте перехваченные запросы, чтобы протестировать различные граничные случаи, что позволит вам оценить производительность приложения в различных условиях
• Поддержка отладки: используйте Mocking Star для отладки сетевых запросов на вашем mac
• Тестирование пользовательского интерфейса: интегрируйте Mocking Star в тесты пользовательского интерфейса, создавая надежную и контролируемую среду тестирования для проверки функциональности вашего мобильного приложения
• Плагины: пишите собственные плагины и расширяйте функциональность
• Клиенты для iOS и Android приложений

Mocking Star на GitHub: https://github.com/Trendyol/mockingstar
Платформа: тестирование
⭐️: 157
Видео и подкасты за неделю на @AppFiles

(iOS Ru) Исследуем мир фото и видео редакторов
(iOS Ru) Найди и исправь ошибки в коде — Задачи с собеседования
(iOS Ru) Запускаем приложения на своем iOS-симуляторе
(iOS Ru) Осторожно, Combine!
(iOS Ru) Позаботимся о памяти при использовании value-типов
(iOS Ru) Swift – больше, чем язык для iOS
(iOS En) Videos from Swift Heroes 2024
(iOS En) Staggered Animated View Using SwiftUI
(iOS En) Advanced SwiftUI Animations - PhaseAnimator
(iOS En) A case for Custom Bindings in SwiftUI: Essential Tips and Tricks
(iOS En) VoiceMemos Waveform Audio Scrubber Using SwiftUI - Waveform Visualization
(And Ru) Почему вам стоит включить Gradle Configuration Cache
(And Ru) Интеграция GeckoView в Dynamic Feature
(And Ru) Последнее слово в Android-навигации
(And En) Introduction to the SDK Runtime
(And En) How to Refactor Legacy Android Code With a Clear Step-By-Step Approach
(And En) Applying the Observer Pattern in Kotlin
(And En) Validating the chaos of RSS feeds with JetBrains’ Junie & some domain modeling sorcery
(Crs Ru) Kotlin не для Android
(Crs Ru) Как мы делали суперапп «Дилер онлайн», и что из этого получилось
(Crs Ru) Совместная работа Kotlin/Native GC и ARC в iOS
(Dev Ru) Правовой статус кода

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

(Crs Ru) Flutter Dev Podcast #45: Собеседования на позицию Flutter-разработчика
(Dev Ru) Пишем рекомендательную систему музыки на Java
(Dev Ru) Задача из Моего Собеседования в Amazon
(Dev Ru) Ада Лавлейс и программирование
Осознанный подход к метрикам
Kotlin и Jetpack Compose: портируем DOOM на смарт-часы

Я взялся за этот проект для Android Wear просто потому, что это интересно, и не так много людей видели, как на часах работает полноценная 3D‑игра. Однако я также хочу, чтобы проект был доступен и для «стандартного» Android. Таким образом, читатели, у которых нет смарт‑часов, смогут наслаждаться тем же кодом на своих смартфонах.

Статья: https://habr.com/ru/companies/otus/articles/894514/
Платформа: Android
This media is not supported in your browser
VIEW IN TELEGRAM
AnimationSequence - это мощная, но интуитивно понятная библиотека Jetpack Compose (поддерживает Android, iOS, Desktop и Web), разработанная для упрощения последовательной анимации в ваших приложениях для Android. С минимальными усилиями создавайте элегантные, отзывчивые и иерархические анимации, улучшая пользовательский опыт и оживляя пользовательский интерфейс.

AnimationSequence на GitHub: https://github.com/pauloaapereira/AnimatedSequence
Платформа: Android
⭐️: 48
👍1
SwiftUI. Навигация по строке в разделяемом координаторе

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

Статья: https://habr.com/ru/articles/894936/
Платформа: iOS
Как мы ускоряли Android-сборку «селлера»

Скорость сборки проекта напрямую влияет на time to market продукта и (внезапно) удовольствие от процесса разработки. Если каких-то 50 лет назад время компиляции могло доходить до нескольких дней, и это считалось нормальным, то сейчас даже лишняя пара минут сборки проекта в Android Studio может заставить понервничать. Чтобы сберечь здоровье себе и CI, скорости сборки проекта нужно уделять внимание.

Статья: https://habr.com/ru/companies/ozontech/articles/894364/
Платформа: Android
Dagger 2 и жизненный цикл

У нас было приложение‑монолит с главным ComponentManager, где строился весь граф зависимостей. Файл был немаленький. Также во всех фрагментах необходимо было вручную создавать DI‑компонент и следить за его чисткой, а разработчики то и дело забывали про это или чистили неправильно.

Потом началась кампания по выносу фичёвого кода в отдельные модули. С каждым новым модулем всё чаще выстреливала циклическая зависимость, и приходилось писать обвязку (прокси‑класс). Главный ComponentManager оставался связующим звеном между фичёвыми модулями, через которое происходил переброс зависимостей, так что он всё ещё был большим и сложным. Иногда рефакторинг, связанный с перемещением кода из одного модуля в другой, вызывал многочасовую борьбу за нахождение пути решения проблемы «почему сборка никак не соберётся?». Иногда, чтобы доставить зависимость из одного модуля в другой, нужно было строить сложные конструкции, как при игре в «Твистер».

Вся эта увлекательная и мучительная игра продолжалась довольно долго, пока на помощь, как бы странно это ни звучало, не пришёл новомодный Compose. Тогда мы только начинали его осваивать, и я решил сделать небольшой pet‑проект, состоящий из двух экранов, с применением Compose для его изучения. Естественно, в этот проект подключил всё самое современное из библиотек, включая Dagger 2. Как обычно, немного повозившись с настройкой DI, в голове всплыла вся та боль, которую мы испытываем в нашем проекте.

Статья: https://habr.com/ru/companies/sberbank/articles/893856/
Платформа: Android
👍2
Неожиданно легко допустить утечку памяти в вашем приложении, даже не осознавая этого. Если утечки памяти остаются без внимания, они могут увеличить объем занимаемой памяти вашего приложения, что приводит к более быстрому завершению работы приложения в фоновом режиме. В тяжелых случаях ваше приложение может быть завершено даже во время работы на переднем плане.

Но проблема не только в использовании памяти. Утечка объектов может привести к неожиданным и скрытым ошибкам, которые гораздо сложнее отследить.

DriftCheck - это легковесная библиотека, которая поможет вам обнаружить циклы удержания и забытые ссылки, привязав ваши объекты к четко определенному жизненному циклу представлений UIKit/SwiftUI.

DriftCheck на GitHub: https://github.com/chrsmys/DriftCheck
Платформа: iOS
⭐️: 22
1
Как правильно организовать проект c модульной архитектурой в iOS-разработке

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

В этом материале я расскажу про ключевые моменты модульной архитектуры в iOS-приложениях, инструментах для ее внедрения и применения в наших проектах.

Статья: https://habr.com/ru/companies/ru_mts/articles/892444/
Платформа: iOS
👍1