AI Briefing

iOS에서 이벤트 기반 URL 요청 전송 여부 확인하기 (feat. 광고 트래킹, 제대로 가고 있나요?)

·2025.01.06 14:03

URLProtocol과 shared file storage로 iOS 광고 트래킹 요청을 UI Test에서 검증한다.

광고 트래킹은 수익과 직결되기 때문에, 코드 변경으로 기존 요청이 망가졌는지 배포 전에 확인할 수 있어야 했다. 단순히 함수 호출 여부만 보는 Fake 객체로는 실제 URLRequest 전송까지 검증할 수 없어서, 네트워크 요청을 직접 가로채는 구조를 만들었다.

핵심은 URLProtocol 기반의 CustomURLProtocol이다. startLoading()에서 요청 URL을 저장소에 기록하고, 임의의 200 응답을 반환해 실제 네트워크 대신 테스트용 흐름을 완성한다. 이 프로토콜은 광고 트래킹용 URLSessionConfigurationprotocolClasses에 주입해 테스트 환경에서만 동작하게 했다.

가장 큰 문제는 App TargetUI Test Target이 서로 다른 프로세스로 실행된다는 점이었다. 같은 메모리 객체를 공유할 수 없어서, SIMULATOR_SHARED_RESOURCES_DIRECTORY 환경 변수를 이용해 시뮬레이터 공유 디렉터리 아래 파일 저장소를 만들고, App과 UI Test가 같은 파일을 읽고 쓰도록 구성했다.

저장소는 단순 존재 여부가 아니라 URL 개수까지 확인하도록 설계했다. 광고 중복 적재, 재노출 시 미적재 같은 오류를 잡으려면 contains보다 더 구체적인 판단이 필요했기 때문이다.

테스트 실행은 UI Test로 진행했다. 실제 사용자 흐름을 재현하려면 accessibilityIdentifier가 필요하므로, 화면 요소 식별 규칙도 함께 정리했다.

  • 타입명 기반 식별자 사용 가능하면 타입명을 따른다
  • UIView 같은 기본 타입은 property 명을 따른다
  • ViewController 단위 enum으로 나누고 공통 요소는 Common에 둔다

마지막으로 테스트 데이터는 동적 네트워크 응답 대신 Protocol + Dependency Injection으로 분리했다. 네트워크 구현체와 JSON 파일 로딩 구현체를 나눠, UI Test가 안정적인 고정 데이터를 기반으로 광고 트래킹 여부만 정확히 검증하도록 만들었다.

이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.

요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.