iOS 앱의 일반 HTTPS 요청은 디버깅 프록시에 나타나는데 WebSocket 트래픽은 보이지 않을 수 있습니다. 먼저 WebSocket 전송 방식을 확인하십시오. URLSessionWebSocketTask는 세션 수준 프록시 구성을 사용할 수 있지만, 자체 소켓을 여는 라이브러리는 자체적으로 지원되는 통합이 필요합니다. iOS 17+에서 원시 Network.framework 연결을 사용하려면 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 전송이 같은 경로를 사용했다는 증거가 아닙니다. 이 명시적 디버깅 구성을 앱이 의도한 개발 환경 안에 유지하십시오.

관련 글