Введение
Когда iOS-приложение неожиданно перестает отправлять данные, отображает устаревший контент или работает медленно, первое, что нужно сделать — это посмотреть, что именно происходит в сети. В этом руководстве вы узнаете, как быстро отладить сетевые запросы, используя встроенные инструменты разработки Xcode, браузерный Web Inspector и сторонний инструмент Charles Proxy. После выполнения этих шагов вы сможете выявлять причины сетевых ошибок, эмулировать реалистичные условия соединения и сохранять логи для дальнейшего анализа.
Требования
- macOS 12+ (Monterey) или более новая.
- Xcode 14+ (в комплекте с последними инструментами разработчика).
- iOS-устройство на iOS 15–17 (iPhone, iPad) с включённым Режимом разработчика.
- USB-кабель для подключения устройства к Mac.
- Charles Proxy (бесплатная пробная версия или лицензия) и сертификат Root CA, установленный на устройстве.
Пошаговая инструкция
Шаг 1: Включить Web Inspector и подключить устройство
Откройте Настройки → Safari → Показать отладку → Включить Web Inspector. Это позволит Safari на Mac отслеживать сетевые запросы, идущие от iOS-приложения.
Подключите iPhone/iPad к Mac по USB. На устройстве убедитесь, что включён Режим разработчика:
- Откройте Настройки → Основы → О программе.
- Тапните по
IPA(илиBuild) 10 раз — Режим разработчика активируется.
Шаг 2: Использовать Network Inspector в Xcode
- Запустите Xcode и откройте проект вашего приложения.
- Перейдите во вкладку Инспектор → Сеть. В правом верхнем углу выберите подключённое iOS-устройство.
- Запустите приложение (⌘ + R). В инспекторе отображаются все HTTP/HTTPS запросы с деталями:
- URL и HTTP-метод.
- Код ответа (например, 200, 404, 500).
- Размер тела и время загрузки.
- Щёлкните по запросу, чтобы увидеть исходящие/входящие заголовки и тело (если закодировано в JSON, body отображается в читаемом виде).
Шаг 3: Настроить Charles Proxy для перехвата трафика
- Скачайте и установите Charles Proxy (
https://www.charlesproxy.com/). - Подключите iOS-устройство к той же Wi-Fi сети, что и Mac.
- На устройстве перейдите в Настройки → Профили и инструменты управления устройствами → найдите сертификат Charles Root CA и нажмите Установить.
- В Charles перейдите в Proxy → Proxy Settings и убедитесь, что включён режим Allow.
- На iOS-устройстве перейдите в Настройки → Wi-Fi, тапните по активной сети, в разделе DNS установите DNS Settings → Manual и добавьте
127.0.0.1. Подтвердите изменение подключения.
Теперь все HTTP/HTTPS запросы приложения пройдут через Charles.
Шаг 4: Эмулировать сетевые условия
В Xcode
- Выберите устройство в интерфейсе запуска.
- Перейдите в Device → Network и выберите режим Slow 3G или Lossy Network.
- Запустите приложение — теперь запросы будут обрабатываться с искусственно большим latency и packet loss.
В Charles
- Перейдите в Proxy → Options → SSL Proxying.
- Включите Enable SSL Proxying.
- Включите Preview для конкретного домена, чтобы видеть полные запросы/ответы в реальном времени.
Шаг 5: Проанализировать логи и исправить проблему
- В Network Inspector (Xcode) или Console (Charles) найдите запрос с ошибкой (коды 4xx/5xx, длительностью >5 сек).
- Проверьте URL, заголовки (
User-Agent,Authorization) и payload на корректность. - Если проблема в сервере, используйте браузер на Mac (
Cmd+Shift+2) для проверки того же URL. - Для Charles сохраните сессию: File → Save Session As… → выберите формат
.cap. Это удобно для последующего анализа или отправки разработчикам бэкенда.
Проверка результата
- Сетевой трафик: в Network Inspector (Xcode) или Charles отображаются все ожидаемые запросы с успешными статусами.
- Производительность: задержка соответствует выбранным сетевым условиям (например, ~200–300 мс для Slow 3G).
- Логи: экспортированные
.cap-файлы содержат полную историю запросов без пропущенных записей.
Если всё отображается корректно, вы можете быть уверены, что сетевые ошибки устранены.
Возможные проблемы
- Сертификат Charles не установлен – запросите установку заново в профиле устройства.
- Запросы не проходят через Charles – убедитесь, что прокси настроен правильно (
Settings → Wi-Fi → Configure Proxy). - Network Inspector показывает пустой список – убедитесь, что приложение не использует
NSURLConnection/URLSessionнапрямую без поддержки HTTPS, проверьте параметрыNSExceptionDomains. - Эмуляция сетевых условий не влияет на запросы – перезапустите симулятор/устройство и проверьте, что выбранные настройки активны.
Следуя этим шагам, вы сможете быстро выявлять и исправлять любые сетевые проблемы в iOS-приложениях. Удачной отладки!