У меня возникла интересная проблема с цепочкой ключей Apple, и мне интересно, что я делаю неправильно.
func saveCert(accessGroup: String? = nil, certData: Data, label: String? = nil) -> Error? {
var query = createKeychainAddQueryDict()
if let accessGroup = accessGroup {
query[String(kSecAttrAccessGroup)] = accessGroup
}
query[String(kSecValueData)] = certData
query[String(kSecClass)] = kSecClassCertificate
if let label = label {
query[String(kSecAttrLabel)] = label
}
var status = SecItemDelete(query as CFDictionary)
if status != noErr {
print("Error deleting cer from keychain. Error: \(status)")
}
let resultCode = SecItemAdd(query as CFDictionary, nil)
return getErrorFromKeychainCode(code: resultCode)
}
Я сохраняю самозаверяющий сертификат, но я подтвердил, что серийный номерразные для каждого предмета, который я пытаюсь сохранить.
Я получаю ошибку -25300 (не могу найти элемент), когда пытаюсь удалить сертификат, но я получаю ошибку -25299 (повторяющийся элемент уже существует), когда я пытаюсь сохранить ее в цепочке для ключей.
Я поставлен в тупик относительно того, почему или как, загрузка или удаление ключа из этого местоположения приводят к сбою, и сохранение означает, что позиция занята.
Есть идеи? Я экспериментировал с жестким кодированием ряда случайных меток, которые никогда не использовал раньше, и они тоже получают ошибку повторяющегося ввода.