URLSession credentials 관련 처리
* Swift 3.0 기준.
파일 url (https) 로 URLSession 을 사용해 다운로드를 받으려 할때 credentials 관련 오류를 접하면 아래와 같이 해결하자. kCFStreamErrorDomainSSL -9843 에러 발생 경우
let request = NSMutableURLRequest(url: url)
let task = URLSession.shared.dataTask(with: request as URLRequest){ data,response,error in
...
}
위와 같은 코드를 사용했을때 발생했으며
다음과 같이 코드를 수정해주자.
let session = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: OperationQueue.current)
let task = session.dataTask(with: request as URLRequest){ data,response,error in
...
}
URLSessionDelegate 구현
func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Swift.Void){
var disposition: URLSession.AuthChallengeDisposition = URLSession.AuthChallengeDisposition.performDefaultHandling
var credential:URLCredential?
if challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust {
credential = URLCredential(trust: challenge.protectionSpace.serverTrust!)
if (credential != nil) {
disposition = URLSession.AuthChallengeDisposition.useCredential
}
else{
disposition = URLSession.AuthChallengeDisposition.performDefaultHandling
}
}
else{
disposition = URLSession.AuthChallengeDisposition.cancelAuthenticationChallenge
}
completionHandler(disposition, credential)
}
이제 정상적으로 파일을 다운받을 수 있다.
'Dev > iOS' 카테고리의 다른 글
[SwiftUI] WKWebView 사용하기 (0) | 2021.08.07 |
---|---|
[SwiftUI] UIViewRepresentable 사용하기 (0) | 2021.06.29 |
[iOS] 인증서가 유효하지 않은 서버(https) 접속하기 (0) | 2021.03.22 |
[iOS] 기본 - Property List (프로프티 리스트) (0) | 2020.04.24 |
[Push Notification] 디바이스 토큰 변경 조건 (0) | 2020.04.09 |
댓글