Ошибка при добавлении ключевого элемента в цепочку ключей 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)
Другие вопросы по тегам