2011-09-20 166 views

回答

5

證書是鑰匙串項目的子類型,因此您可以使用SecKeychainItemDelete刪除它們。爲了防止編譯器警告,您需要明確地將SecCertificateRef轉換爲SecKeychainItemRef - 普通的C語言不支持子類。

SecCertificateRef certificate = ...; 
OSStatus status = SecKeychainItemDelete((SecKeychainItemRef)certificate); 
if (status) { 
    // Handle error 
} 

如果目的MAC OS 10.6或更高版本,您還可以使用新的API SecItemDelete。在最簡單的情況下,它沒有提供任何優勢,但您可以更改查詢參數以一次刪除多個證書,或刪除證書而不直接引用它們。

SecCertificateRef certificate = ...; 
NSDictionary *query = [NSDictionary dictionaryWithObjectsAndKeys: 
         kSecClassCertificate, kSecClass, 
         [NSArray arrayWithObject:(id)certificate], kSecMatchItemList, 
         kSecMatchLimitOne, kSecMatchLimit, 
         nil];  
OSStatus status = SecItemDelete((CFDictionaryRef)query); 
if (status) { 
    // Handle error 
}