Обычные HTTPS-запросы приложения iOS могут появляться в отладочном прокси, а его трафик WebSocket при этом отсутствует. Сначала определите транспорт WebSocket: URLSessionWebSocketTask может использовать конфигурацию прокси на уровне сеанса, а библиотеке, открывающей собственные сокеты, нужна собственная поддерживаемая интеграция. Для необработанного соединения Network.framework на iOS 17+ настройте собственный контекст прокси NWConnection.

На iOS 17 или новее создайте сеанс с явным прокси SOCKSv5:

import Foundation
import Network

@available(iOS 17.0, *)
func makeDebugSession() -> URLSession {
    let configuration = URLSessionConfiguration.default
    let endpoint = NWEndpoint.hostPort(
        host: "192.0.2.10", port: 8889)
    configuration.proxyConfigurations = [
        ProxyConfiguration(socksv5Proxy: endpoint)
    ]
    return URLSession(configuration: configuration)
}

Замените адрес и порт из документации на доступный слушатель SOCKS существующего отладочного прокси. Включите этот слушатель в приложении прокси. Его HTTP-слушатель может быть на другом порту.

Создайте webSocketTask из возвращённого сеанса. Задача, созданная через другой URLSession, не наследует переопределение этого сеанса. Пустой массив proxyConfigurations использует системные значения по умолчанию; это не явный выбор прямого маршрута.

Доступность и читаемые сообщения — отдельные этапы

Физическому телефону нужен адрес, который достигает отладочного компьютера. На этом телефоне 127.0.0.1 обозначает сам телефон. Проверьте интерфейс слушателя и разрешённый доступ клиентов прокси, если соединение так и не достигает его.

Маршрут SOCKS переносит соединение. Чтение содержимого wss дополнительно требует настройки проверки TLS в отладочном инструменте и надлежащего доверия на устройстве. Закрепление сертификатов или отдельная реализация TLS могут воспрепятствовать этой проверке даже тогда, когда трафик достигает слушателя.

Ищите обмен WebSocket и сообщения после установления соединения. Видеть только один запрос опроса от приложения Socket.IO — не доказательство того, что его последующий транспорт WebSocket использовал тот же маршрут. Держите эту явную отладочную конфигурацию в пределах предполагаемой среды разработки приложения.

Похожие статьи