CN によって証明書を削除する簡単な方法 (証明書は、PKCS12 インポートから SecItemAdd によって以前にそこに配置されています)。エラーが発生しています:
フォーマットのプロパティ リストが無効です: 200 (プロパティ リストに「SecIdentity」タイプのオブジェクトを含めることはできません)
https://developer.apple.com/documentation/security/1395547-secitemdeleteに基づく場合、次の指示に従っていると思います。
一時的な参照によって識別されたアイテムを削除するには、SecItemCopyMatching または SecItemAdd 関数への以前の呼び出しで kSecReturnRef 戻り型キーを使用して返された参照で kSecMatchItemList 検索キーを指定します。
手紙に。以下のコード:
NSDictionary * attributes;
NSString * cnString = @"/CN=foo";
attributes = [NSDictionary dictionaryWithObjectsAndKeys:
(__bridge id)(kSecClassIdentity), kSecClass,
cnString, kSecMatchSubjectContains,
kSecMatchLimitAll, kSecMatchLimit,
kCFBooleanTrue, kSecReturnRef,
nil];
CFArrayRef result;
status = SecItemCopyMatching((__bridge CFDictionaryRef)(attributes),
(CFTypeRef *)&result);
if (status == noErr) {
for(int i = 0; i < CFArrayGetCount(result); i++) {
SecIdentityRef item = (SecIdentityRef) CFArrayGetValueAtIndex(result, i);
NSLog(@"Item #%d: %@", i, item);
attributes = [NSDictionary dictionaryWithObjectsAndKeys:
(__bridge id)(kSecClassIdentity), kSecClass,
[NSArray arrayWithObject:(__bridge id)item], kSecMatchItemList,
kSecMatchLimitOne, kSecMatchLimit,
nil];
status = SecItemDelete((__bridge CFDictionaryRef)(attributes));
if (status != noErr || status != errSecItemNotFound)
NSLog(@"Delete %d/%@failed: %ld (ignored)", i,item, status);
};
};
コンソールの出力は次のとおりです。
Item #0: <SecIdentityRef: 0xc7359ff0>
検索の直後 (検索範囲を広げると、これらの配列が得られます)。
そして、Security.dylib の奥深くから:
フォーマットのプロパティ リストが無効です: 200 (プロパティ リストに「SecIdentity」タイプのオブジェクトを含めることはできません)
最終的に保釈するには:
Delete 0/<SecIdentityRef: 0xc7359ff0>failed: -50 (ignored)
私は何を間違っていますか?