기어가더라도 제대로

[HTTP Error] ATS(Apple Transfer Security) Policy를 준수하는 우아한 방법, iOS Simulator에서 http 요청 보내는 방법, since it does not conform to ATS policy 본문

만난 에러들

[HTTP Error] ATS(Apple Transfer Security) Policy를 준수하는 우아한 방법, iOS Simulator에서 http 요청 보내는 방법, since it does not conform to ATS policy

Damagucci-juice 2024. 6. 14. 10:34

3주만에 내 앱인 BEMYFAMILY를 Xcode에서 켜봤다. 네트워크 요청이 안되는 것이였다.
문제 해결을 위해 테스트를 돌려봤다.
테스트는 아무 문제 없이 동작했다. 테스트는 무결성을 위해서 네트워크를 타지 않고 네트워크 요청과 디코딩 흐름만을 검사해서 잘 통과했다.
앱에선 문제가 생기지 않았구나를 알게 되고 네트워크 통신에 문제가 생긴 것으로 파악했다.

예상 오류 포인트를 나열해 봤다.

  • (아주 낮은 확률로) URLSession의 문제가 있을 수 있다.
  • 네트워크 콜이 HTTP 주소로 되어있는게 문제일 수 있다.

구글링 해본 결과 URLSession은 최근 1달의 검색어 결과에서 아무런 이상이 없었다.

  • (아주 낮은 확률로) URLSession의 문제가 있을 수 있다.

요청이 HTTP 주소로 되어있는게 문제였다.

주소를 https://www.example.com 으로 통신을 하니까 통신이 되었다.
하지만 여전히 문제가 있었는데 네트워크 요청 결과 받아온 DTO 안에 이미지 주소들이 있는데 이것이 여전히 HTTP였다.

진짜 문제는 지금부터다. 나는 ATS를 설정을 해놓았다.... 무려 모든 http 통신을 허락하는 다소 좌충우돌 방식으로 설정해놓았다. 근데 왜 http가 안되는 것일까?

가설은 다음과 같다.

  • 모든 트래픽을 허용하는 방법이 업데이트로 인해 변경되었을 것이다.
  • 내가 사용하는 도메인에서 발생하는 http 요청만 허용해야할 것이다.

그래서 Info.plist에 추가를 했다. 아 참 이번에 알게된 사실인데 Info.plist를 건들게 되면 프로젝트가 Info.plist의 위치를 잘 보고있는지 확인해줘야한다. 이게 번거로우면 깔끔하게 할 수 있는 방법이 있다.

Fine-tune your App Transport Security settings여기에 Configure exception domains이 부분을 참고하면 된다. info.plist에 알아서 추가해준다. 아주 우아한 방법이라고 느껴진다.

실기기에선 되네?

답답해서 실기기로 돌려봤는데, 버전이 예전 버전이였음에도 불구하고 http 네트워크 요청이 오고 갔다.
브라우저에서도 된다. Macbook의 브라우저에서도 됬는데, iOS Simulator에서 실행한 Safari 브라우저에서는 되지 않았다.

http 요청에 대한 응답 결과

  • [Macbook] Safari → ✅
  • [iPhone] Safari and BEMYFAMILY App → ✅
  • [iOS Simulator] Safari and BEMAFAMILY App → 🔥

여기서 나는 가설을 새로 새웠다. "iOS Simulator에서 http 요청에 대한 응답을 막아놨다" 이게 내 결론다. 결론적으로 말하면 이게 문제였다. ATS로 약 6시간을 삽질했는데, 도대체 왜 안돼?! 하면서 애꿎은 시뮬레이터만 계속 돌려봤는데, 저게 문제였다.

iOS Simulator에서 HTTP 요청 보내는 법

iOS Simulator → Settings 앱 → Developer → Allow HTTP Service의 토글을 켜주면 된다.

http_allow

결론

  • 당신의 ATS 설정은 잘못이 없다.
  • iOS Simulator가 문제다.
  • 가능하다면 HTTPS를 쓰자.

참조

Comments