Dans le cadre d'une implémentation PKI basée Swift, j'ai porté le SecKeyWrapper.m à SwiftErreur de diffusion depuis AnyObject? à SecKeyRef? à Swift
deux, (Objective-C et Swift) des méthodes d'accès porte-clés fonctionnent bien, sauf une part à la mise en œuvre rapide.
Je reçois la clé publique de l'homologue au format base64. Il est converti en NSData puis enregistré dans le trousseau en utilisant:
statusCode = SecItemAdd(queryDictionary, &persistentPeer)
Après avoir enregistré avec succès la clé publique par les pairs dans le trousseau, je dois l'obtenir comme SecKeyRef.
queryDictionary[kSecReturnPersistentRef] = true
var peerKeyRef: AnyObject?
statusCode = SecItemCopyMatching(queryDictionary, &peerKeyRef)
Le problème est que SecItemCopyMatching renvoie un objet de type AnyObject? que ne peux pas être casté en SecKeyRef (ou SecKey des thats est un alias)
let key = peerKeyRef as? SecKeyRef // Compile error.
Le travail autour j'ai trouvé est de jeter le peerKeyRef comme NSObject? puis utiliser Objective-C pour combler à SecKey comme suit:
let keyObject = peerKeyRef as? NSObject
keyRef = Utility.getSecKeyRefFromAnyObject(keyObject).takeRetainedValue()
Le code objectif Objectif-C pour le faire est la suivante:
+(SecKeyRef) getSecKeyRefFromNSObject:(id)theObject {
return (__bridge SecKeyRef)theObject;
}
Le casting à SecKey utilisant cette solution de contournement fonctionne très bien (pas avertissements ou erreurs) avec le résultat attendu. D'après vous, que manque-t-il dans le code Swift pour lancer AnyObject?
à SecKeyRef?
Je travaille avec Xcode 7.3.1 et Swift 2.2
Mfg ....
Salut @ OOper.let key = pairKeyRef as! SecKeyRef? – eharo2
Désolé ... commentaire incomplet ... Thx @OOper ... Cela fonctionne. Pour une raison quelconque, "peerKeyRef as? SecKeyRef" échoue, mais "peerKeyRef as! SecKeyRef?" fonctionne bien ..... Thx beaucoup ..... – eharo2
@ eharo2, s'il vous plaît ne vous inquiétez pas, à mon avis, 'as?' devrait fonctionner où 'as!' est valide. Mais, "pour une raison quelconque", cela ne fonctionne pas. Je n'ai pas vérifié avec le dernier Xcode 8 (beta 4, comme pour l'instant), mais si vous trouvez le même comportement dans le dernier Xcode 8, vous devriez envoyer un [Bug Report] (http://developer.apple.com/bug-reporting /) à Apple. – OOPer