내 앱 백엔드에 대한 API 호출을 수행하는 동안 문제가 발생했습니다. 이제 모든 연결에 다음 메시지가 표시됩니다.
CredStore - performQuery - Error copying matching creds. Error=-25300, query={
atyp = http;
class = inet;
"m_Limit" = "m_LimitAll";
ptcl = http;
"r_Attributes" = 1;
srvr = "myappsurl.com";
sync = syna;
}
이 문제의 원인이 무엇인지 또는 CredStore가 무엇을하는지 잘 모르겠 기 때문에 조금 길을 잃었습니다. CredStore는 iOS에서 어떤 용도로 사용됩니까?
답변
이 오류 는 알 수없는 URLCredential
에서 를 검색하려고 할 때 발생합니다 . 예 :URLCredentialStorage
URLProtectionSpace
let protectionSpace = URLProtectionSpace.init(host: host,
port: port,
protocol: "http",
realm: nil,
authenticationMethod: nil)
var credential: URLCredential? = URLCredentialStorage.shared.defaultCredential(for: protectionSpace)
생산하다
CredStore - performQuery - Error copying matching creds. Error=-25300, query={
class = inet;
"m_Limit" = "m_LimitAll";
ptcl = http;
"r_Attributes" = 1;
srvr = host;
sync = syna;
}
보호 공간에 대한 자격 증명을 제공합니다.
let userCredential = URLCredential(user: user,
password: password,
persistence: .permanent)
URLCredentialStorage.shared.setDefaultCredential(userCredential, for: protectionSpace)
다음에 자격 증명을 검색하려고하면 오류가 사라집니다.
이 문제의 원인이 무엇인지 또는 CredStore가 무엇을하는지 잘 모르겠 기 때문에 조금 길을 잃었습니다. CredStore는 iOS에서 어떤 용도로 사용됩니까?
iOS의 자격 증명 저장소를 사용하면 사용자가 인증서 기반 또는 암호 기반 자격 증명을 장치에 일시적으로 또는 영구적으로 키 체인에 안전하게 저장할 수 있습니다.
백엔드 서버에 일종의 인증이 있고 해당 서버가 앱에 대한 인증 시도를 요청하고 있다고 생각합니다 (자격 증명이 존재하지 않음).
에서 nil을 반환하는 URLCredentialStorage
것이 유효한 응답이므로 무시해도됩니다.
답변
Alamofire로 요청을 수행 할 때 왜이 오류가 발생하는지 잘 모르겠지만 HTTP 헤더에서 일부 토큰으로 API 요청을 수행하면 자격 증명 저장소가 전혀 필요하지 않을 수 있습니다. 따라서 요청에 대해 비활성화 할 수 있습니다.
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = ourHeaders
// disable default credential store
configuration.urlCredentialStorage = nil
let manager = Alamofire.SessionManager(configuration: configuration)
...
이러한 변경 후 오류가 없습니다.
답변
이것은 전송 오류입니다. plist 파일에 다음과 같은 전송 권한을 추가해 보겠습니다.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
앱에서 모든 서버에 연결할 수 있으므로 주의하십시오 . 계속하기 전에 앱 전송 보안에 대해 자세히 읽어보십시오. @kezi의 댓글보기
답변
이 같은 문제가 나에게 발생하며 API URL에 URL 끝에 “/”가 포함되어 있지 않으면 iOS가 “Authorization”값을 서버로 보내지 않는다는 것을 발견했습니다. 이로 인해 콘솔에 문제가 게시 된 것과 같은 메시지가 표시됩니다.
따라서 URL 끝에 “/”를 추가하면됩니다.
https://example.com/api/devices/
답변
이 문제를 해결하기 위해 URL이 포함 된 문자열을 편집했습니다.
var myUrl = "http://myurl.com"
myUrl = myUrl.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)!
let url = URL(string: myUrl)
답변
이 오류가 발생하면 AVPlayer를 사용할 때 주 스레드에서 .play ()를 호출하십시오.
답변
이 오류가 발생하는 원인은 실수로 Authorization 헤더에서 “Bearer”와 액세스 토큰 사이에 두 개의 공백을 사용했기 때문입니다.
틀림 :
request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
옳은:
request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")
단순한 실수이지만 그것을 찾는 데 시간이 걸렸습니다.
