Мне нужно обновить kSecAttrAccessible записи цепочки для ключей. Мне не нужно обновлять фактические данные, только атрибут доступности.
Сначала я пытаюсь найти элемент, чтобы убедиться, что мой словарь запросов хорош:
sanityCheck = SecItemCopyMatching((__bridge CFDictionaryRef)(queryPrivateKey), (void *)&privateKeyRef);
Эта строка успешно находит мне искомый элемент (код возврата 0).
Затем я обновляю атрибут kSecAttrAccessible, используя тот же запрос:
if (sanityCheck == noErr && privateKeyRef != nil) {
// found it, update accessibility
NSMutableDictionary *updatedAttributes = [[NSMutableDictionary alloc] init];
updatedAttributes[(__bridge id)kSecAttrAccessible] = (__bridge id)kSecAttrAccessibleAlways;
OSStatus updateItemStatus = SecItemUpdate((__bridge CFDictionaryRef)queryPrivateKey, (__bridge CFDictionaryRef)updatedAttributes);
}
На данный момент updateItemStatus равен -50 (paramErr).
Я просмотрел этот поток: Возможно ли обновить значение kSecAttrAccessible элемента связки ключей? Однако моя проблема отличается. Он возвращает -50, даже если я добавляю kSecValueData в свой updatedAttributes
. Кроме того, в документации также указано, что добавлять kSecValueData нужно только для iOS 4 и более ранних версий. Я поддерживаю iOS 7 и выше, так что это не должно быть моей проблемой.
Может ли кто-нибудь указать, что мне здесь не хватает? Большое спасибо.