2017-09-07 1 views
50

Je suis en cours d'exécution dans un problème tout en faisant des appels API à mon back-end des applications, toutes les connexions invite maintenant avecCredStore Effectuer une erreur de requête

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; 
} 

Je suis un peu perdu car je ne suis pas sûr de ce qui cause cela, ou ce que CredStore fait même. À quoi sert CredStore dans iOS?

+0

J'ai le même journal dans le simulateur en utilisant iOS 11 + Xcode beta 6. J'espère que c'est juste à cause de la beta – nacho4d

+0

n'avez-vous jamais trouvé de solution à ce problème? – swalkner

+0

@swalkner pas encore, essayant toujours d'en savoir plus. –

Répondre

12

Cette erreur se produit lors de la tentative de récupération d'un URLCredential à partir de URLCredentialStorage pour un URLProtectionSpace inconnu. par exemple.

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

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

produit

CredStore - performQuery - Error copying matching creds. Error=-25300, query={ 
    class = inet; 
    "m_Limit" = "m_LimitAll"; 
    ptcl = http; 
    "r_Attributes" = 1; 
    srvr = host; 
    sync = syna; 
} 

Donnez-lui un titre pour l'espace de protection:

let userCredential = URLCredential(user: user, 
            password: password, 
            persistence: .permanent) 

URLCredentialStorage.shared.setDefaultCredential(userCredential, for: protectionSpace) 

et l'erreur disparaît la prochaine fois que vous essayez de récupérer les informations d'identification. Je suis un peu perdu car je ne suis pas sûr de ce qui cause cela, ou ce que fait CredStore même. À quoi sert CredStore dans iOS? Le stockage des informations d'identification sur iOS permet aux utilisateurs de stocker en toute sécurité des informations d'identification basées sur des certificats ou des mots de passe sur l'appareil, temporairement ou définitivement, vers le trousseau.

Je suppose que vous avez une sorte d'authentification sur votre serveur dorsal et que ce serveur demande un défi d'authentification à votre application (pour lequel aucune information d'identification n'existe).

Il peut probablement être ignoré sans risque que le retour nul de la URLCredentialStorage est une réponse valide

+1

Comment voulez-vous créer un espace de protection? –

+0

@Brett pouvez-vous s'il vous plaît fournir des informations pour protectionSpace? – Pavlos

+1

@Pavlos J'ai créé un espace de protection dans la réponse acceptée à la question. Si vous avez besoin de plus d'informations, adressez-vous à une autre question avec les informations dont vous avez besoin. Ce n'est pas une bonne forme de refuser une réponse juste parce qu'elle ne contient pas les informations de votre commentaire abstrait: 'veuillez fournir des informations pour protectionSpace' – Brett

0

J'ai modifié la chaîne qui contient l'URL pour résoudre ce problème:

var myUrl = "http://myurl.com" 
myUrl = myUrl.addingPercentEncoding(withAllowedCharacters: .urlFragmentAllowed)! 

let url = URL(string: myUrl) 
-1

Ceci est une erreur de transport, nous allons Ajouter une permission de transport comme ceci dans le dossier de plist:

<key>NSAppTransportSecurity</key> 
    <dict> 
     <key>NSAllowsArbitraryLoads</key> 
     <true/> 
    </dict>