iOS App에서 HTTP 통신 허용하기(+App Trasport Security란?)

iOS 앱 개발 시 테스트를 위해 http 서버와 통신하려고 하면 구동중에 이런 에러가 발생합니다.

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

Solution

Apple 측에서 앱 자체의 보안성을 위해 ATS(App Trasport Secuirty)라는 정책을 통해 기본적으로 https 통신을 하도록 유도하고 있는겁니다. 아무튼 http 서버로 테스트하기 위해선 Info.plist에서 ATS 부분을 추가해주어야 합니다.

NSAppTransportSecurityNSAllowsArbitraryLoads 값을 true로 지정해줍니다.

<dict>
  <key>NSAppTransportSecurity</key>
  <dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
  </dict>
</dict>

이후 앱을 빌드하면 문제없이 http 서버와 잘 통신됩니다. 실제 배포에선 http 사용이 없다면, 허용하지 않는게 맞을 것 같고, 보안적인 관점에서도 궁극적으로 저 옵션을 안키도록 https를 기본으로 가져가고 사용하는 구간이 발견되면 리포팅하는게 좋을듯 합니다.

What is ATS?

그럼 ATS에 대해 조금 더 알아나 봅시다. iOS 9 버전 이후부터 적용된 개인정보보호 기능이고 Xcode7 버전 이상에서 앱 생성 시 기본값으로 가져가게 되는 보안 정책입니다.

위에서 예외를 위한 NSAllowsArbitraryLoads 이외에도 Media, Webcontent 관련한 key가 더 존재하는데요, 이미지 등 추가적인 데이터 로드 시 아래와 같이 다른 항목들도 예외 처리가 필요할 수 있습니다.

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSAllowsArbitraryLoadsForMedia</key>
    <true/>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>

ATS 관련 내용인데 가볍게 읽어보시면 좋을 것 같습니다.

  • https://forums.developer.apple.com/message/15705#15705
  • https://forums.developer.apple.com/thread/48979