Я устраняю проблему с обновлениями связки ключей.У меня работают SecItemAdd, SecItemCopyMatching и SecItemDelete.Но я нахожусь в тупике на SecItemUpdate.Я всегда получаю -50 неудачу.
Я разместил общедоступный проект MacOS keychainTest на Github по адресу: https://github.com/darrellroot/keychainTest/blob/master/README.md
К вашему сведению, этот почти идентичный вопрос / ответ должен помочь мне, но это не так: Swift 4 Keychain SecItemUpdateКод состояния ошибки -50
Вот соответствующие фрагменты кода:
let keychainTest = "Keychain Test"
let serverHostname = "mail.nowhere.com"
let keychainService = "KeychainService"
AddQuery работает:
let addQuery: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: keychainService,
kSecAttrAccount as String: serverHostname,
kSecValueData as String: inputTextOutlet.stringValue]
let status = SecItemAdd(addQuery as CFDictionary, nil)
GetQuery работает:
let getQuery: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: keychainService,
kSecAttrAccount as String: serverHostname,
kSecMatchLimit as String: kSecMatchLimitOne,
kSecReturnData as String: true]
var rawResult: AnyObject?
let status = SecItemCopyMatching(getQuery as CFDictionary, &rawResult)
statusLabel.stringValue = status.description
guard let retrievedData = rawResult as? Data else { return }
guard let pass = String(data: retrievedData, encoding: String.Encoding.utf8) else { return }
DeleteQuery работает:
let deleteQuery: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: keychainService,
kSecAttrAccount as String: serverHostname]
let status = SecItemDelete(deleteQuery as CFDictionary)
statusLabel.stringValue = status.description
Но для этого updateQuery я всегда получаю сообщение OSStatus -50:
let updateQuery: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: keychainService,
kSecAttrAccount as String: serverHostname]
let newAttributes: [String: Any] = [kSecValueData as String: inputTextOutlet.stringValue]
let status = SecItemUpdate(updateQuery as CFDictionary, newAttributes as CFDictionary)
для osstatus.com, -50 равно "Один или несколько параметров переданычтобы функция была недействительной. "