iOS/UIKIT

API 불러온 데이터 중에서 URL 주소를 변환하기

밤새는 탐험가89 2024. 8. 19. 14:08
Cannot start load of Task <A269C68D-851B-48C9-8C0E-67A9F7F984DF>.<3> 
since it does not conform to ATS policy
Task <A269C68D-851B-48C9-8C0E-67A9F7F984DF>.<3> finished with error 
[-1022] Error Domain=NSURLErrorDomain Code=-1022 
"The resource could not be loaded because the App Transport Security policy requires 
the use of a secure connection." UserInfo={NSLocalizedDescription=
The resource could not be loaded because the App Transport Security policy requires 
the use of a secure connection., NSErrorFailingURLStringKey=http://tong.visitkorea.or.kr/cms/resource/64/2678864_image2_1.jpg, NSErrorFailingURLKey=http://tong.visitkorea.or.kr/cms/resource/64/2678864_image2_1.jpg, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <A269C68D-851B-48C9-8C0E-67A9F7F984DF>.<3>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <A269C68D-851B-48C9-8C0E-67A9F7F984DF>.<3>, NSUnderlyingError=0x600000cb1200 {Error Domain=kCFErrorDomainCFNetwork Code=-1022 "(null)"}}

 

 

 

에러 메시지를 보면, 앱에서 이미지를 로드할 때 "App Transport Security(ATS)" 정책 때문에 에러가 발생하고 있습니다. ATS는 iOS에서 네트워크 연결의 보안을 강화하기 위해 도입된 기능으로, 기본적으로 모든 HTTP 요청은 HTTPS를 사용해야 합니다.

 

해당 에러는 이미지 URL이 http 프로토콜을 사용하고 있기 때문에 발생한 것입니다. http는 안전하지 않은 프로토콜로 간주되어, ATS 정책에 따라 https를 사용하는 것이 요구됩니다.

 

 

func configureWithImage(title: String, address: String, posterPath: String) {
        attractionTitleLabel.text = title
        attractionAddressLabel.text = address
        
        
        let securePosterURL = posterPath.replacingOccurrences(of: "http://", with: "https://")
        
        if let url = URL(string: securePosterURL){
            attractionImageView.sd_setImage(with: url)
        } else {
            attractionImageView.image = UIImage(named: "church")
        }
        
    }

 

요약

  • 데이터를 가져올 때 http URL을 https로 바꾸어 ATS 정책에 맞게 사용하세요.
  • URL을 https로 바꾸기 위해 replacingOccurrences(of: "http://", with: "https://")를 사용할 수 있습니다.

 

 

추가로 해볼 것

지금 보면 테이블 뷰내에 이미지가 없는 것은 기본 이미지라고 해서 임의의 이미지를 넣었습니다. 

일단은 이미지가 있는 것 먼저 보여주고, 그 다음에 이미지 없는 것을 따로 보여주는 식으로 진행해보겠습니다.