Update : Dieses Problem wurde in Xcode 8.2 behoben. Der Schlüsselbund funktioniert im Simulator, ohne die Schlüsselbundfreigabe zu aktivieren.
Warum erhalte ich beim Aufrufen der Funktion im Xcode 8 / iOS 10-Simulator immer den Fehler -34018 ?SecItemAdd
Schritte zum Reproduzieren
Erstellen Sie ein neues einseitiges iOS-App-Projekt in Xcode 8. Führen Sie den folgenden Code in aus viewDidLoad
(oder öffnen Sie dieses Xcode-Projekt).
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.")
}
erwartete Ergebnisse
Artikel wird zum Schlüsselbund hinzugefügt.
Tatsächliche Ergebnisse
Die Funktion SecItemAdd gibt den folgenden Fehlercode zurück : -34018
.
Ausführung
Xcode Version 8.1 (8B62), macOS Sierra 10.12.1.
Aufbau
Tritt in Xcode 8 seit Beta 2 immer auf, wenn in einem iOS 10-Simulator getestet wird.
Tritt NICHT in Xcode 8 auf, wenn in einem iOS 9.3-Simulator getestet wird.
Demo
https://dl.dropboxusercontent.com/u/11143285/2016/07/KeychainBugDemo.zip
Verweise
Radar: https://openradar.appspot.com/27422249
Apple Developer Forums: https://forums.developer.apple.com/message/179846
Dieses Problem unterscheidet sich von dem folgenden Beitrag , weil es tritt konsequent in Xcode 8. SecItemAdd und SecItemCopyMatching gibt Fehlercode -34018 (errSecMissingEntitlement)