Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>

This commit is contained in:
Matt Bruce 2026-01-14 12:38:11 -06:00
parent 2b3834b3c1
commit 974d67571e

View File

@ -45,13 +45,17 @@ actor KeychainHelper {
let status = SecItemAdd(addQuery as CFDictionary, nil) let status = SecItemAdd(addQuery as CFDictionary, nil)
if status == errSecDuplicateItem { if status == errSecDuplicateItem {
// Item exists, update it // Item exists - delete and re-add to update both data and security attributes.
let updateStatus = SecItemUpdate( // SecItemUpdate cannot change accessibility or access control, so we must
query as CFDictionary, // delete the existing item and add a new one with the desired attributes.
[kSecValueData as String: data] as CFDictionary let deleteStatus = SecItemDelete(query as CFDictionary)
) if deleteStatus != errSecSuccess && deleteStatus != errSecItemNotFound {
if updateStatus != errSecSuccess { throw StorageError.keychainError(deleteStatus)
throw StorageError.keychainError(updateStatus) }
let readdStatus = SecItemAdd(addQuery as CFDictionary, nil)
if readdStatus != errSecSuccess {
throw StorageError.keychainError(readdStatus)
} }
} else if status != errSecSuccess { } else if status != errSecSuccess {
throw StorageError.keychainError(status) throw StorageError.keychainError(status)