iOS

Как отладить HTTP-запросы в iOS: пошаговое руководство

HTTP-запросы могут вызывать проблемы в iOS-приложениях — от отсутствия соединения до неправильного парсинга данных. Это руководство покажет, как использовать встроенные инструменты отладки, эмулятор сети и сторонние утилиты, чтобы быстро выявлять и устранять сетевые ошибки.

Обновлено 7 августа 2026 г.
5-10 мин
Средняя
FixPedia Team
Применимо к:iOS 15iOS 16iOS 17

Введение / Зачем это нужно

В iOS-приложениях почти каждый запрос к серверу выполняется через URLSession. Когда данные не приходят, приходят с ошибками или приложение ведет себя странно, важно быстро найти причину. Встроенные инструменты отладки Xcode позволяют увидеть исходящие и входящие пакеты, а дополнительные утилиты (эмулятор сети, HTTP-прокси, консоль разработчика Safari) расширяют возможности диагностики. После выполнения этого гайда вы сможете выявлять ошибки подключения, проверять ответы сервера и тестировать работу приложения в различных сетевых условиях.

Требования / Подготовка

  • Последняя версия Xcode (включает Network Debugger и Network Link Conditioner).
  • Установленный Charles Proxy (или аналогичный HTTP-прокси) для перехвата трафика.
  • Устройство эмулятора iOS с подключением к интернету.
  • Базовые знания Swift и работы с URLSession.
  • Доступ к консоли разработчика Safari (в macOS).

Пошаговая инструкция

Шаг 1: Включить логирование сетевых запросов в Xcode

Включите встроенный логгер сетевых запросов, чтобы видеть все HTTP-запросы в панели Network во время выполнения приложения.

  1. Запустите приложение в Xcode (Product → Run).
  2. В меню Debug выберите Network Logging (или используйте значок лупы в нижней панели Instruments).
  3. Переключите ползунок в положение ON — теперь каждый запрос URLSession будет отображаться в списке.

💡 Совет: Если панель Network отсутствует, откройте Window → Development → Show Console и убедитесь, что отладка включена (Product → Scheme → Debug).

Шаг 2: Добавить кастомный делегат URLSession

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

import Foundation

class NetworkLogger: URLSessionTaskDelegate {
    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
        let request = task.currentRequest
        let response = task.response as? HTTPURLResponse

        var log = "📤 Request: \(String(describing: request?.httpMethod)) \(String(describing: request?.url))\n"
        log += "📥 Response: \(response?.statusCode ?? 0)\n"
        if let err = error {
            log += "❌ Error: \(err.localizedDescription)"
        }
        print(log)
    }

    // Дополнительные методы при необходимости
    func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        completionHandler(.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
    }
}

// Использование
let config = URLSessionConfiguration.default
let logger = NetworkLogger()
let session = URLSession(configuration: config, delegate: logger, delegateQueue: nil)

⚠️ Важно: Для работы делегата убедитесь, что проект подписан (сертификат разработчика) и включена отладочная информация.

Шаг 3: Перехватить трафик через эмулятор сети или proxy

  1. В Xcode откройте Features → Network Link Conditioner.
  2. Выберите один из предустановленных профилей (например, Bad 3G).
  3. Запустите приложение и наблюдайте, как оно ведет себя при ограниченном bandwidth и высокой задержке.

3.2. Перехват трафика через HTTP-прокси

Установите Charles Proxy (или аналогичный) и настройте устройство/эмулятор на его использование:

# В настройках сети устройства укажите прокси:
# IP-адрес Mac, где работает Charles: 192.168.1.1
# Порт: 8888

В Charles включите Proxy → Proxy Options → Enable transparent proxy, чтобы перехватывать HTTPS-трафик.

Шаг 4: Использовать инструменты разработчика Safari для проверки запросов

Safari может показывать исходящие запросы, что полезно для проверки запросов, идущих через URLSession с URLSessionConfiguration.allowsCellularAccess = true.

  1. В Safari откройте Разработчик → Показать веб-консоль.
  2. Нажмите на значок Эмуляция сетевого окружения (иконка радиоволны) и выберите, например, «Slow 3G».
  3. Перезапустите приложение в симуляторе и выполните действия, которые инициируют сетевые запросы. В консоли вы увидите полный путь запроса, заголовки и тело ответа.

Шаг 5: Проверить и оптимизировать логи

После выполнения предыдущих шагов проанализируйте собранную информацию:

  • Статус коды: 200‑299 — успех, 400‑499 — клиентские ошибки, 500‑599 — серверные ошибки.
  • Заголовки: обратите внимание на Content-Type, Cache-Control, Authorization.
  • Тело ответа: убедитесь, что парсинг JSON/XML не вызывает ошибок.
  • Время выполнения: в панели Network отметьте задержки и возможные тайм-ауты.

Если проблема выявлена, внесите необходимые изменения (корректные URL, токены, обработку ошибок) и повторите цикл отладки.

Проверка результата

После внесения изменений запустите приложение в режиме отладки и выполните те же действия, которые вызвали ошибку ранее. Убедитесь, что:

  • Запросы отображаются в панели Network с правильными статусами.
  • Кастомный делегат выводит лог в консоль без ошибок.
  • В Safari (или эмуляторе сети) трафик соответствует ожидаемому.

Если всё отображается корректно, отладка успешна завершена.

Возможные проблемы

  • Запросы не отображаются в Network: Убедитесь, что запросы выполняются через URLSession (а не через URLSession.shared.dataTask). Проверьте, что логирование сетевых запросов действительно включено.
  • Прокси не перехватывает HTTPS: Убедитесь, что сертификат Charles доверен (Edgewise ProxyCertificates). Добавьте сертификат в доверенные корневые сертификаты устройства.
  • Network Link Conditioner не влияет на трафик: Убедитесь, что эмулятор сети подключен к Wi-Fi/Cellular и что профиль активирован перед запуском приложения.

С этими инструментами вы сможете быстро выявлять и устранять любые сетевые проблемы в iOS-приложениях. Удачной отладки!

Часто задаваемые вопросы

Как включить логирование сетевых запросов в Xcode?
Можно ли перехватывать трафик без физического подключения?
Что делать, если запросы не показываются в отладчике?
Как протестировать работу приложения при плохом соединении?

Полезное

Включить логирование сетевых запросов в Xcode
Добавить кастомный делегат URLSession
Перехватить трафик через эмулятор сети или proxy
Использовать инструменты разработчика Safari для проверки запросов
Проверить и оптимизировать логи