dev._.note

[Error] Error Domain=NSURLErrorDomain Code=-1022 본문

Dev/ERROR

[Error] Error Domain=NSURLErrorDomain Code=-1022

Laena 2024. 2. 19. 17:48

에러내용

Error: Error Domain=NSURLErrorDomain Code=-1022 "The resource could not be loaded because the App Transport Security policy requires the use of a secure connection."

 

iOS 앱에서 http:// (비보안) URL을 사용하려고 할 때 발생하는 오류입니다. iOS 9부터 Apple은 App Transport Security (ATS)를 도입했으며, 기본적으로 앱이 https:// (보안) 연결을 사용하도록 요구합니다. 

 

해결방법 

  1. HTTPS를 사용하도록 API 엔드포인트 변경하기: 가장 좋은 해결 방법은 API 서버가 HTTPS를 지원하는 경우 API 엔드포인트를 https://로 변경하는 것입니다.
  2. App Transport Security 설정 변경하기: 만약 API가 HTTPS를 지원하지 않는 경우, 앱의 Info.plist 파일을 수정하여 ATS 설정을 완화할 수 있습니다.
    • 프로젝트 내의 Info.plist 파일을 열고,
    • 허용할 url을 작성하고,
    • App Transport Security Settings 딕셔너리를 추가하고,
    • 그 안에 Allow Arbitrary Loads 를 YES로 설정합니다.

 

Info.plist에 추가할 XML 코드

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>허용할 URL</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <false/>
        </dict>
    </dict>
</dict>

 

 

Info.plist 전체코드

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>UIApplicationSceneManifest</key>
	<dict>
		<key>UIApplicationSupportsMultipleScenes</key>
		<false/>
		<key>UISceneConfigurations</key>
		<dict>
			<key>UIWindowSceneSessionRoleApplication</key>
			<array>
				<dict>
					<key>UISceneConfigurationName</key>
					<string>Default Configuration</string>
					<key>UISceneDelegateClassName</key>
					<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
					<key>UISceneStoryboardFile</key>
					<string>Main</string>
				</dict>
			</array>
		</dict>
	</dict>
    <!-- App Transport Security 설정을 추가 -->
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSExceptionDomains</key>
        <dict>
            <key>허용할 URL</key>
            <dict>
                <key>NSIncludesSubdomains</key>
                <true/>
                <key>NSExceptionAllowsInsecureHTTPLoads</key>
                <true/>
                <key>NSExceptionRequiresForwardSecrecy</key>
                <false/>
            </dict>
        </dict>
    </dict>
    <!-- App Transport Security 설정을 추가 -->
</dict>
</plist>