Брелок SecItemUpdate, возвращающий errSecParam - PullRequest
2 голосов
/ 15 апреля 2020

Я могу добавить элементы в связку ключей, я даже могу их прочитать.

Однако я изо всех сил пытаюсь использовать SecItemUpdate для обновления значения, и мне кажется, что каждый раз возвращается errSecParam.

Для этого я создаю следующий запрос и атрибуты ( очень вероятно, что проблема здесь)

let query: [String: Any] = [kSecAttrAccount as String : "MyString",
    kSecValueData as String: "test2".data(using: .utf16)!,
    kSecMatchLimit as String  : kSecMatchLimitOne
]

let attributes: [String: Any] = [kSecAttrAccount as String: "aa",
                                         kSecValueData as String: data]

, который затем используется для обновления

SecItemUpdate(query as CFDictionary, attributes as CFDictionary)

1 Ответ

2 голосов
/ 15 апреля 2020

В запросе должен быть указан класс, а не данные (для обновления), поэтому, например, чтобы добавить / обновить пароль в связке ключей, он должен выглядеть следующим образом

// adding item
let addQuery: [CFString: Any] = [
    kSecClass: kSecClassGenericPassword,
    kSecAttrService: service as CFString,        // eg. "www.mysite.com"
    kSecAttrAccount: name as CFString            // eg. "user"
    kSecValueData: password.data(using: .utf8)   // eg. "password"
] as CFDictionary

if errSecSuccess != SecItemAdd(addQuery, nil) { 
    // report error here
}

// updating item (same query is for SecItemDelete)

let updateQuery: [CFString: Any] = [
    kSecClass: kSecClassGenericPassword,
    kSecAttrService: service as CFString,        // eg. "www.mysite.com"
    kSecAttrAccount: name as CFString            // eg. "user"
] as CFDictionary

let newAttributes = [
    kSecAttrAccount: newName as CFString            // eg. "user1"
    kSecValueData: newPassword.data(using: .utf8)   // eg. "password1"
] as CFDictionary

if errSecSuccess != SecItemUpdate(updateQuery, newAttributes) {
   // report error here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...