[swift] alamofire에서 upload 사용시 CredStore - performQuery - Error copying matching creds 발생

프로그래밍/swift2020. 2. 16. 00:12

스위프트에서 alamofire를 잘 이용하고 있었습니다.

보통은 alamofire.request() 함수를 사용했었는데 서버로 파일을 전달해야 해서..

최근에 alamofire.upload() 함수를 사용해봤습니다.

 

인터넷에 검색한 내용을 따라 upload 함수를 사용하니.. 동작은 잘 됐습니다.

서버에 파일도 잘 업로드 됐구요..

 

그런데 찝찝하게 중간에 아래의 에러? 로그가 발생했습니다.

CredStore - performQuery - Error copying matching creds.  Error=-25300, query={
    class = inet;
    "m_Limit" = "m_LimitAll";
    ptcl = htps;
    "r_Attributes" = 1;
    sdmn = "xxx.yyy.com";
    srvr = "xxx.yyy.com";
    sync = syna;
}

 

무슨 말인지도 모르겠으나..

 

https://stackoverflow.com/a/46806008/7225691 에 따르면

let protectionSpace = URLProtectionSpace.init(host: host, 
                                              port: port, 
                                              protocol: "http", 
                                              realm: nil, 
                                              authenticationMethod: nil)

var credential: URLCredential? = URLCredentialStorage.shared.defaultCredential(for: protectionSpace)

 

와 같이.. URLProtectionSpace 를 마음대로 만들어서 URLCredentialStorage에서 URLCredential을 구하려고 하면 발생하는 로그라고 합니다..

 

Alamofire 코드에서.. 이 URLCredentialStorage에 접근하는 코드를 찾아보면.. Request.swift에 유일하게 있습니다..

cURLRepresentation() 함수에 있네요.

if let credentialStorage = self.session.configuration.urlCredentialStorage {
            let protectionSpace = URLProtectionSpace(
                host: host,
                port: url.port ?? 0,
                protocol: url.scheme,
                realm: host,
                authenticationMethod: NSURLAuthenticationMethodHTTPBasic
            )

            if let credentials = credentialStorage.credentials(for: protectionSpace)?.values {
                for credential in credentials {
                    guard let user = credential.user, let password = credential.password else { continue }
                    components.append("-u \(user):\(password)")
                }
            } else {
                if let credential = delegate.credential, let user = credential.user, let password = credential.password {
                    components.append("-u \(user):\(password)")
                }
            }
        }

 

이 함수는 동일 파일에서 사용됩니다.

open var debugDescription: String {
        return cURLRepresentation()
    }

debugDescription이라는 변수에 접근하면.. 그 함수가 불리네요;;

 

정확하게 어떤 과정에서.. 이 debugDescription이 불리는 지는 모르겠으나..

어쨋든 확실해졌습니다.

 

 

 Alamofire.upload(
        multipartFormData: { MultipartFormData in

       }, to: "https://xxx.yyy.com/aaa.php") { (result) in
            print("result: \(result)")
       }
    

디버그를 위해.. 추가했던 위의 코드로 인해 문제의 로그가 발생한 것이었습니다.

alamofire 측의 버그 같으며.. 별 문제 없는 무시해도 되는 로그 같습니다. ㅡㅡ;

 

 

참고

https://github.com/Alamofire/Alamofire/issues/2467

작성자

Posted by 드리머즈

관련 글

댓글 영역