본문 바로가기
다시 개발자

Swiftui, Cannot start load of Task <~~>.<1> since it does not conform to ATS policy runtime 에러 해결

by 까삼스 이삐 2023. 9. 17.
728x90
반응형

Swiftui에서 http로 통신을 할 때 "Cannot start load of Task <~~>.<1> since it does not conform to ATS policy"라는 runtime 에러 해결 방법입니다.

 

원인은 iOS에서 통신을 할 때 http를 사용했기 때문에 발생한 것입니다. 

 

 

https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity

 

NSAppTransportSecurity | Apple Developer Documentation

A description of changes made to the default security for HTTP connections.

developer.apple.com

 

 

즉 https를 사용했다면 발생하지 않았을 문제입니다. 하지만 여러가지 이유로 http를 사용해야 하는 경우가 있습니다. 

테스트 등으로 http를 사용해야 한다면 info.plist에서 설정을 변경하면 됩니다.

 

 

App Transport Security Settings 을 추가합니다.

 

그리고 Allow Arbitrary Loads를 선택하고 값을 YES를 설정합니다. 이렇게 하면 iOS에서 통신할 때 http를 허용하게 되는 것입니다.

이때 주의 할 사항은 ">"을  클릭해 "﹀"로 만들어야 한다는 것입니다. 그래야 App Transport Security Settings의 하위 속성으로 설정이 됩니다.

 

만약 특정 사이트(sub 도메인 포함)만 http를 허용하고 싶다면 다음과 같이 하면 됩니다.

 

참고로 Exception Domains spec과  domain 이름을 설정하는 방법은 다음과 같습니다.

NSExceptionDomains : Dictionary {
    <domain-name-string> : Dictionary {
        NSIncludesSubdomains : Boolean
        NSExceptionAllowsInsecureHTTPLoads : Boolean
        NSExceptionMinimumTLSVersion : String
        NSExceptionRequiresForwardSecrecy : Boolean
    }
}

Follow these rules when setting a domain name string:

  • Use lowercase. Use example.com, not EXAMPLE.COM.
  • Don’t include a port number. Use example.com, not example.com:443.
  • Don’t use numerical IP addresses. Don’t use 1.2.3.4. For information about how ATS handles IP addresses, see NSAllowsLocalNetworking.
  • Don’t include a trailing dot, unless you only want to match a domain string with a trailing dot. For example, example.com. (with a trailing dot) matches “example.com.” but not “example.com”. Similarly, example.com matches “example.com” but not “example.com.”.
  • Don’t use wildcard domains. Don’t use *.example.com. Instead, use example.com and set NSIncludesSubdomains to YES.

https://developer.apple.com/documentation/bundleresources/information_property_list/nsapptransportsecurity/nsexceptiondomains

 

NSExceptionDomains | Apple Developer Documentation

Custom App Transport Security configurations for named domains.

developer.apple.com

 

728x90

추가로, Exception Domains을 설정하는 방법을 소개합니다.

 

Exception Domains의 하위(">"  클릭)로 item을 추가("+" 클릭)하면 "New item"이 나옵니다.

여기에 원하는 domain 이름을 입력합니다. 

 

속성을 String -> Dictionary로 변경합니다. 그럼 "www.domain.com" 앞에 ">"가 생깁니다.

 

추가한 Domain 이름의 하위(">"을  클릭)로 item("+" 클릭)하면 "New item"이 나옵니다.

여기에 "NSExceptionAllowsInsecureHTTPLoads"을 입력합니다. 그리고 속성을 String -> Boolean으로 변경한 후 값을 NO -> YES로 변경합니다.

 

sub domain도 허용하는 NSIncludesSubdomains 옵션도 위와 같은 방법으로 하면 됩니다.

 

728x90
반응형

댓글