Swiftui에서 http로 통신을 할 때 "Cannot start load of Task <~~>.<1> since it does not conform to ATS policy"라는 runtime 에러 해결 방법입니다.
원인은 iOS에서 통신을 할 때 http를 사용했기 때문에 발생한 것입니다.
즉 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.
추가로, 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 옵션도 위와 같은 방법으로 하면 됩니다.
'다시 개발자' 카테고리의 다른 글
Xcode에 package 추가하기 (82) | 2023.09.24 |
---|---|
MacBook에 Jupyter notebook 설치하기 (55) | 2023.09.22 |
DT_TOOLCHAIN_DIR cannot be used to evaluate LIBRARY_SEARCH_PATHS, use TOOLCHAIN_DIR instead 에러 해결 (77) | 2023.09.15 |
remote: Support for password authentication was removed on August 13, 2021. (43) | 2023.09.02 |
ubuntu mysql 설치 (47) | 2023.09.01 |
댓글