Swift HTTP Request하기.

Jackson·2022년 1월 29일
0

Alamofire 공부를 하다가 세계시간API 를 GET하기 위해서 연습을 했다.(Swift내 Date를 사용해도 되긴 하지만..)

그런데...


이 버그가 먼지 몰라서 찾아보았다.

Apple에서는 App Transport Security(ATS) 정책을 iOS 9버젼부터 적용시켜 HTTP 쓰지말고 HTTPS 쓰라고 defualt로 잡은 것 같다.

근데 난 url이 http 형식이었고 이 부분을 찾다 보니까 Inpo.plist를 바꾸면 된다고 찾았다.

다음과 같이 추가하면 끝!!

App Transport Security Settings -> Allow Arbitary Loads 추가하구 Value 값의 Boolean이 NO가 되어있는것을 YES로 바꾸면 된다. (첨에 자동으로 안나와서 수동으로 작성하니까 적용이 안되서 삽질했다. Xcode에서 자동!!!으로 하위 Key값들이 나오도록 하게(새로고침? Xcode 종료 및 실행?)하자.
(스택오버플로에도 따라하니까 안된다고 질문이 많고 나도 그랬다. vim 잘쓰면 info.plist 들가서 직접하는게 맘 편하긴하다.)

이제 잘 나온다~~

심화과정

이 방식을 이용하면 이런 작은 프로젝트는 상관없지만 실제 배포 및 테스트하는 과정에서 원치 않은 Http도 수락을 할 수 있어서 특정 사이트만 하고 싶은 경우가 있는데 이 때는 다음과 같이 Info.plist를 고쳐야 한다.

APP Transport Security Settings에서 엔터를 누르면 Exception Domains가 있다.

Request를 허락할 도메인: Dictionary

  • NSExceptionAllowsInsecureHTTPLoads :Boolean = YES
  • NSIncludesSubdomains: Boolean = YES

(Xcode에서 자동적으로 나오지 않아서 직접!!! 복붙해서 넣어야 한다.
하위계층으로 들어갔는지 잘 보자. Xcode로하다가 짜증나서 vim으로 썼다.)

도메인을 넣을 때 중요한것이 http://worldclockapi.com/api/json/utc/now 라고 다 넣으면 ATS에러로 뻑이 난다 ...(이 것 때문에 또 삽질했다.)

http://worldclockapi.com 까지만 넣어야한다. 뒤에 path를 넣으면 이유는 모르겠는데 ATS문제가 난다.

진짜 끝!!

Alamofire 예제 공부하다가 또 샛길로 샜다. 그래도 긍정적으로 언젠가 이 문제를 직면하면 해결방법을 알았다고 생각해야겠다.

0개의 댓글