본문 바로가기

삶은계란 (Diary)/Xcode

'app transport security has blocked a cleartext http' 오류 해결하기

서론

iOS를 공부하면서 보통은 실습 파일을 그대로 쓰는 것이 아닌
실습 파일 보고 새 프로젝트를 생성하는 식으로 진행한다.

이번엔 URL을 통해 image를 받아와 cell에 표시하는 예제가 있었는데,
좀 당황했던 터라 간단하게 정리하고자 한다.

제목과 같은 오류로 이미지를 다운로드하지 못했고,
전체 오류는 아래와 같다.

app transport security has blocked a cleartext http connection since it is insecure. use https instead or add exception domains to your app's info.plist.

 

본론

해당 오류는 HTTP 연결을 시도할 때 발생한다.
지금은 이미 HTTPS의 시대로 보안 면에서 조금 더 강화된 프로토콜이다.

애플이 최근 마케팅의 일부로, 기억의 정신으로 삼고 있는 것이 '보안'이기 때문에,
HTTPS가 아닌 HTTP로 연결을 하려는 경우 별도의 설정이 필요하다.
이 말인 즉슨 iOS 앱의 기본 값은 HTTP 연결이 차단된 상태이며,
HTTP 연결을 위해선 설정을 변경해 줄 필요가 있다.

프로젝트 안에서 Info.plist 파일을 찾는다.

이후 어지럽게 늘어져있는 Key들이 보인다.
이 중 설정해야 할 것은 ATS라고 불리는 App Transport Security Settings로 위의 사진처럼 없어도 당황하지 말고,

Information Property List에 마우스를 가져다 대서 오른쪽에 작게 표시되는 '+'를 눌러 추가해 주면 된다.

이후 새로 생긴 ATS의 오른쪽에 표시되는 '+'를 눌러 Allow Arbitrary Loads를 추가하고

해당 항목을 YES로 변경하면 된다.

이후엔 이전에 발생했던 오류 없이 정상적으로 데이터를 불러올 수 있다.

 

애플에서는 2018년 이후부터 기본값 처럼 HTTP 연결 대신 HTTPS로 보안 연결을 하도록 권장하고 있다.

본론처럼 Allow Arbitrary Loads를 YES로 변경할 경우 모든 HTTP연결을 허용하므로, 위와 같은 방법 대신

사진과 같이 특정 도메인에 대해 예외처리를 할 것을 권장하고 있다.

이번에는 실습용 사진을 받아 올 URL이 별도로 있어서 따로 테스트 해보진 않았지만,
추후 프로젝트시에는 알아둬야 할 내용일 것 같아 이렇게 정리한다.