我有我需要刪除的iOS上丟失鑰匙串項目(可能由舊版本的應用程序編寫)。有沒有簡單的方法來實現這一目標?如何刪除應用程序可訪問的所有鑰匙串項目?
回答
做的所有類
NSArray *secItemClasses = @[(__bridge id)kSecClassGenericPassword,
(__bridge id)kSecClassInternetPassword,
(__bridge id)kSecClassCertificate,
(__bridge id)kSecClassKey,
(__bridge id)kSecClassIdentity];
for (id secItemClass in secItemClasses) {
NSDictionary *spec = @{(__bridge id)kSecClass: secItemClass};
SecItemDelete((__bridge CFDictionaryRef)spec);
}
您可以查看Utilities文件夾中的KeyChain Access應用程序。如果啓動該應用程序並單擊「所有項目」,它應顯示您使用此特定計算機創建的所有項目。開發人員通常以com開頭。
對於Mac,您的答案是完美的,但在iOS上,Keychain Access應用程序不存在。不管怎麼說,還是要謝謝你! – sqreept
由於Daij-Djan我得到這個解決方案:
for (id secclass in @[
(__bridge id)kSecClassGenericPassword,
(__bridge id)kSecClassInternetPassword,
(__bridge id)kSecClassCertificate,
(__bridge id)kSecClassKey,
(__bridge id)kSecClassIdentity]) {
NSMutableDictionary *query = [NSMutableDictionary dictionaryWithObjectsAndKeys:
secclass, (__bridge id)kSecClass,
nil];
SecItemDelete((__bridge CFDictionaryRef)query);
}
Xamarin的iOS版本(MonoTouch的)的accepted answer上如何刪除所有鑰匙串項可訪問的應用程序低於:
foreach (var recordKind in new []{
SecKind.GenericPassword,
SecKind.Certificate,
SecKind.Identity,
SecKind.InternetPassword,
SecKind.Key,
})
{
SecRecord query = new SecRecord(recordKind);
SecKeyChain.Remove(query);
}
如果你想確保你確實刪除記錄,你可能期間之前特定種類的鑰匙串項目的發展支票號碼後,此代碼:
SecStatusCode scc;
var records = SecKeyChain.QueryAsRecord(new SecRecord(SecKind.GenericPassword), 1000, out scc);
非常感謝! –
我在斯威夫特改寫Daij-Djan的答案:
let secItemClasses = [kSecClassGenericPassword,
kSecClassInternetPassword,
kSecClassCertificate,
kSecClassKey,
kSecClassIdentity]
for secItemClass in secItemClasses {
let dictionary = [kSecClass as String:secItemClass]
SecItemDelete(dictionary)
}
此代碼導致我崩潰。問題發生在hashValue變量(至少在32位平臺上)中進行CFHash到Int轉換。 CFHash返回一個UINT,它在swift中轉換爲Int時可能會溢出。我建議將該行更改爲'public var hashValue:Int {return Int(bitPattern:CFHash(self))}'以確保它不會溢出。 – Brett
CFString免費橋接到NSString,橋接到swift字符串,所以你可以施放它們,即'let dictionary = [kSecClass as String:secItemClass as String]' – Brandon
Swift 3編譯器會抱怨,除非你寫:「SecItemDelete(dictionary作爲CFDictionary)「 – Laurent
- 1. 如何允許所有應用程序無需提示即可訪問鑰匙串項目
- 2. 鑰匙串訪問中沒有鑰匙
- 3. 枚舉我的iOS應用程序中的所有鑰匙串項目
- 4. 刪除鑰匙串項目當應用被卸載
- 5. 如何從鑰匙串訪問中刪除證書?
- 6. 系統更新後從應用程序訪問鑰匙串
- 7. 鑰匙串訪問奇怪?
- 8. iOS鑰匙串訪問
- 9. 用戶可以從他的iOS設備中刪除鑰匙串項目嗎?
- 10. 由應用程序安全創建的鑰匙串項目沒有訪問控制嗎?
- 11. 正確刪除(清除)iOS應用程序的所有鑰匙串數據的方法
- 12. Jenkins刪除鑰匙扣中的鑰匙
- 13. iPhone和Xcode鑰匙串 - 無法刪除鑰匙串?
- 14. 無法使用使用鑰匙串訪問工具鑰匙扣訪問工具
- 15. 訪問iCloud鑰匙串中的所有密碼
- 16. SMJobBless更新後無法訪問鑰匙串項目
- 17. 如何成功從OS X中的鑰匙串中刪除項目?
- 18. Xcode8:失敗當我我的手機上運行應用程序刪除鑰匙串項目
- 19. 刪除鑰匙扣當應用程序被殺害
- 20. 刪除iOS上的鑰匙串數據
- 21. 限制只能訪問您的iOS應用程序的鑰匙串數據
- 22. 問題與應用程序商店的鑰匙串和更新
- 23. 與watchOS共享鑰匙串2 - 所有關於項目設置?
- 24. 選擇除鑰匙外的所有鑰匙
- 25. 如何在我的應用程序卸載到ios上時清除鑰匙串?
- 26. 如何從其他賬戶上傳轉移應用程序的新版本,鑰匙串訪問可能丟失
- 27. 鑰匙串項目的默認kSecAttrAccessible值?
- 28. 獲取鑰匙串項目的屬性
- 29. iOS用戶在卸載應用程序後如何移除鑰匙串
看到http://stackoverflow.com/questions/10966969/enumerate-all-keychain-items-in-my-ios-application爲讓您可以訪問所有的項目,然後刪除每一個.. –