キーチェーン エントリの 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 値を更新することは可能ですか?
しかし、私の問題は異なります。kSecValueData を my に追加しても -50 が返されますupdatedAttributes
。さらに、ドキュメントには、iOS 4 以前の場合にのみ kSecValueData を追加する必要があることも記載されています。私は iOS 7 以降をサポートしているので、これは私の問題ではありません。
ここで私が見逃していることを誰かが指摘できますか? どうもありがとう。