Mise à jour : ce problème a été résolu dans Xcode 8.2. Le trousseau fonctionne dans le simulateur sans activer le partage de trousseau.
Pourquoi est-ce que je reçois toujours l' erreur -34018 lors de l'appel de la SecItemAdd
fonction dans le simulateur Xcode 8 / iOS 10 ?
Étapes à suivre pour reproduire
Créez un nouveau projet d'application iOS à page unique dans Xcode 8. Exécutez le code suivant dans viewDidLoad
(ou ouvrez ce projet Xcode).
let itemKey = "My key"
let itemValue = "My secretive bee 🐝"
// Remove from Keychain
// ----------------
let queryDelete: [String: AnyObject] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: itemKey as AnyObject
]
let resultCodeDelete = SecItemDelete(queryDelete as CFDictionary)
if resultCodeDelete != noErr {
print("Error deleting from Keychain: \(resultCodeDelete)")
}
// Add to keychain
// ----------------
guard let valueData = itemValue.data(using: String.Encoding.utf8) else {
print("🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣 Error saving text to Keychain")
return
}
let queryAdd: [String: AnyObject] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrAccount as String: itemKey as AnyObject,
kSecValueData as String: valueData as AnyObject,
kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlocked
]
let resultCode = SecItemAdd(queryAdd as CFDictionary, nil)
if resultCode != noErr {
print("🐝🐝🐝🐝🐝🐝🐝🐝🐝 Error saving to Keychain: \(resultCode).")
} else {
print("🍀🍀🍀🍀🍀🍀🍀🍀🍀 Saved to keychain successfully.")
}
Résultats attendus
L'article est ajouté au trousseau.
Résultats actuels
Fonction SecItemAdd renvoie le code d'erreur suivant: -34018
.
Version
Xcode version 8.1 (8B62), macOS Sierra 10.12.1.
Configuration
Se produit toujours dans Xcode 8 depuis la bêta 2 lors des tests dans un simulateur iOS 10.
Ne se produit PAS dans Xcode 8 lors du test dans un simulateur iOS 9.3.
Démo
https://dl.dropboxusercontent.com/u/11143285/2016/07/KeychainBugDemo.zip
Références
Radar: https://openradar.appspot.com/27422249
Forums des développeurs Apple: https://forums.developer.apple.com/message/179846
Ce problème est différent de l'article suivant car il se produit systématiquement dans Xcode 8. SecItemAdd et SecItemCopyMatching renvoie le code d'erreur -34018 (errSecMissingEntitlement)