2017-10-16 12 views
0

J'ai quelques tests unitaires pour vérifier que la façon dont je travaille avec Keychain est correcte et que les données sont dans la même forme quand je les charge.Je ne peux pas utiliser Keychain dans les tests Xcode9

Les tests étaient en cours d'exécution jusqu'à la mise à jour de XCode 9. À l'heure actuelle, KeychainService renvoie -50 (non enregistré).

Selon ce question, il a été résolu en ajoutant l'hôte aux tests unitaires. Cependant, mes tests sont dans un projet de framework et il n'y a pas d'application à utiliser en tant qu'hôte.

let query = [ 
    kSecClass as String  : kSecClassGenericPassword as String, 
    kSecAttrAccount as String : key, 
    kSecValueData as String : data ] as [String : Any] 

SecItemDelete(query as CFDictionary) 

SecItemAdd(query as CFDictionary, nil) 

Quelle est la solution recommandée? Je m'attends à juste une configuration dans XCode, déplacer des tests dans l'application n'est pas une bonne solution pour moi.

+0

tout code-snippet connexe ...? J'ai un accès _KeyChain_ parfaitement fonctionnel dans Xcode9, Swift4; aucune anomalie n'a été constatée ici. vous pouvez également jeter un coup d'œil sur le projet officiel [GenericKeychain] (https://developer.apple.com/library/content/samplecode/GenericKeychain/Introduction/Intro.html) sur le site d'Apple pour comparer avec le vôtre et trouver le problème. – holex

+0

J'ai ajouté un échantillon de code. Appel de 'SecItemAdd' return -50 –

+0

Pour clarifier - KeyChain fonctionne, mais pas dans les tests unitaires –

Répondre

0

Les kits de test Xcode 9 nécessitent une application hôte pour accéder au trousseau depuis le simulateur iOS, voir https://stackoverflow.com/a/46317131/5082444.

Il vous suffit d'ajouter une cible d'application et de la définir en tant qu'application hôte pour votre ensemble de tests unitaires.