😁 Всем привет 👋
Хочу рассказать про крутой инструмент - Reaper и поделиться опытом его интеграции 🚀
🤔 В чём проблема?
Большой проект может обрастать тоннами неиспользуемого кода: устаревшие фичи, классы после рефакторинга, забытые методы. Как итог:
🐌 Медленная сборка: компилятор тратит силы впустую
🥵 Сложный рефакторинг: страшно удалять, «а вдруг где-то используется?»
😵💫 Раздутый размер приложения
⚔️ Reaper vs. Статический анализ (Periphery)
Статические анализаторы вроде Periphery — это отлично, но есть нюансы:
🐢 Долгие прогоны на CI, которые сложно встроить в каждый PR
🫣 Слепые зоны: бессильны против кода, управляемого извне (например, Remote Config)
Reaper подходит к вопросу иначе - это runtime-анализ. Он видит, что реально используется в работе приложения 🕵️
🔍 Что под капотом Reaper?
Reaper работает на уровне Mach-O файлов и рантайма:
- Для Obj-C: отслеживает момент инициализации объекта в рантайме (бит RW_INITIALIZED)
- Для Swift: всё намного сложнее. Вкратце - анализирует секцию __swift5_types, проверяет kind объекта, отсутствие resilient superclass, отсутсвие generic и тд. Полную логику проверки мы рассмотрим отдельно в будущем 💫
🛠 Как внедрить?
Интеграция состоит из двух частей:
🖥️ Бекенд:
Есть референсный пример от разработчиков, от которого можно отталкиваться, а лучше написать полностью свое решение.
Базовый функционал:
- Ручка для агрегации известных типов 📋
- Ручка для отправки отчёта с устройств 📨
- Дашборд со статистикой 📊
📱 Мобилка:
1️⃣ Один раз на CI запускаете скрипт, который выцепляет все отслеживаемые объекты в вашем коде (делается на этапе сборки 1 раз на релиз, но можно придумать и иную политику)
2️⃣ Интегрируем Reaper SDK (есть в SPM/CocoaPods) и инициализируем при запуске приложения
3️⃣ При уходе приложения в background отправляем на ваш сервер «отчёт» со списком использованных сущностей за эту сессию
💎 Вывод
Reaper — это не замена статическому анализу, а мощное дополнение к нему. Он даёт данные с реальных устройств ваших пользователей, раскрывая слепые зоны статического анализа ✨
У инструмента есть потенциал, мы продолжим его обкатывать и поделимся результатом ⚙️
📎 Ссылки:
➡️ Репозиторий Reaper
➡️ Пример Backend
➡️ Репозиторий Periphery
#M #iOS #TeamWork #Reaper #Periphery
👏
Post #25
168