Как перестать гадать по логам и увидеть сетевые запросы прямо в iOS приложении
Знакомая история: тестировщик приносит баг со словами «тут кнопка не нажимается» или «данные не грузятся». Вы подключаете iPhone к Xcode, пытаетесь воспроизвести проблему, но в консоли тишина или каша из системных сообщений. А если баг плавающий и случился у коллеги в другом городе? Приходится просить выгрузку логов, которая часто превращается в квест.
Александр Гребенюк (kean), автор популярной библиотеки Nuke, решил эту проблему изящно. Он создал Pulse — систему логирования для Apple-платформ, которая позволяет смотреть сетевую активность и системные сообщения прямо на экране устройства.
Что такое Pulse и зачем он в проекте
По сути, это полноценный сетевой инспектор и логгер, который живет внутри вашего приложения. Представьте, что у вас есть мини-версия Charles или Proxyman, встроенная в дебаг-меню. Pulse перехватывает запросы через URLSession и сохраняет их в локальную базу данных SQLite на устройстве.
Это не прокси-сервер. Pulse работает внутри процесса приложения, поэтому ему не нужны сертификаты, настройки VPN или сложные манипуляции с сетью. Он просто записывает то, что происходит в приложении, и предоставляет удобный интерфейс для просмотра.
Чем Pulse полезен на практике
Главная фишка проекта — автономность. Логи хранятся локально и никуда не улетают без вашего ведома. Вот несколько сценариев, где это спасает жизнь.
Отладка на «живых» устройствах
Когда приложение уже у тестировщиков в TestFlight, вы не можете просто так подключиться отладчиком. С Pulse вы добавляете скрытый жест или кнопку в настройках, которая открывает консоль. Тестировщик видит ошибку 401 или кривой JSON, делает скриншот или шарит лог целиком через стандартное меню Share.
Анализ сетевого трафика в реальном времени
В PulseUI встроены отличные вьюхи на SwiftUI. Можно провалиться в конкретный запрос, посмотреть заголовки, тело ответа с подсветкой синтаксиса и даже построить график времени выполнения. Если вы используете Alamofire или Get, интеграция займет пару строк кода.
Удаленный просмотр логов
Если смотреть в маленький экран айфона неудобно, есть Pulse Pro — отдельное приложение для macOS. Вы можете стримить логи с устройства на компьютер в реальном времени. Это особенно удобно при работе с Apple Watch или Apple TV, где своего экрана для логов считай что нет.
Как это устроено внутри
Pulse разделен на несколько модулей, что позволяет не тащить лишний UI в продакшн, если он там не нужен.
- Pulse: основной фреймворк, отвечающий за запись данных.
- PulseUI: готовые экраны на SwiftUI для отображения логов.
- PulseLogHandler: бэкенд для стандартного SwiftLog от Apple.
Библиотека поддерживает все современные платформы: iOS 15+, macOS 12+, watchOS 8+, tvOS 15+ и даже visionOS. Для работы требуется Xcode 15.4 и Swift 5.10.
Кому стоит попробовать
Я бы рекомендовал Pulse командам, у которых цикл тестирования вынесен за пределы рабочего стола разработчика. Если ваши QA часто жалуются на неинформативные баг-репорты по сетевым ошибкам, Pulse решит эту проблему раз и навсегда.
Также проект отлично подходит для прототипирования. Когда API еще «сырое» и часто меняется, возможность быстро глянуть в консоль прямо в телефоне экономит кучу времени.
Единственный нюанс — Pulse Pro для Mac платный, но базового функционала бесплатной библиотеки и встроенного UI более чем достаточно для ежедневных задач. Если вам не нужен полноценный прокси-инструмент вроде Proxyman, а хочется просто видеть, что творится под капотом приложения, Pulse — это, пожалуй, самое нативное и легкое решение на сегодня.
С чего начать? Загляните в Getting Started — документация у проекта отличная, как и все, что делает kean.
