Ошибка при добавлении ключевого элемента в цепочку ключей MacOS
У меня есть следующий код:
let keyData = UUID().uuidString.data(using: .utf8)!
var attributes: [NSString: Any] = [
kSecClass: kSecClassKey,
kSecAttrApplicationTag: keyData,
]
let st1 = SecItemDelete(attributes as CFDictionary)
attributes[kSecValueData] = keyData
let st2 = SecItemAdd(attributes as CFDictionary, nil)
Я пытаюсь добавить элемент в цепочку для ключей с типом kSecClassKey. По какой-то причине этот код отлично работает в iOS и не работает в macOS. В macOS st1 -25300 (что означает, что элемент не может быть найден.) И st2 -25299 (что означает, что элемент уже существует.) Что я могу сделать, чтобы этот код работал?
1 ответ
Ошибка errSecDuplicateItem
(-25299) также может быть возвращено, если вы пропустите обязательный атрибут, например, если вы попытаетесь добавить kSecClassGenericPassword
ключ без kSecAttrService
задавать.
В вашем случае мне интересно, почему вы пытаетесь сохранить UUID как криптографический ключ (kSecClassKey
). Хранить его как общий пароль (kSecClassGenericPassword
) вместо этого будет достаточно.
let keyData = UUID().uuidString.data(using: .utf8)!
var attributes: [NSString: Any] = [
kSecClass: kSecClassGenericPassword,
kSecAttrService: "YourApp-UUID", // Determines the purpose/context of the used password/value
kSecAttrLabel: "YourApp (UUID)", // Name of the Keychain item
kSecValueData: keyData, // Actual value, that will be stored securely
]
let status = SecItemAdd(attributes as CFDictionary, nil)