[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
forServiceName:@"TestService" updateExisting:YES error:&error];
當我從設備中刪除該應用程序使用鑰匙串idandersen's scifihifi-iphone代碼並保存密碼,密碼保留在鑰匙串。
我想在用戶從設備中刪除應用程序時從鑰匙串中刪除密碼。我怎樣才能做到這一點?
[SFHFKeychainUtils storeUsername:@"User" andPassword:@"123"
forServiceName:@"TestService" updateExisting:YES error:&error];
當我從設備中刪除該應用程序使用鑰匙串idandersen's scifihifi-iphone代碼並保存密碼,密碼保留在鑰匙串。
我想在用戶從設備中刪除應用程序時從鑰匙串中刪除密碼。我怎樣才能做到這一點?
您可以充分利用NSUserDefaults
爲通過卸載應用程序清除的事實。例如:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Clear keychain on first run in case of reinstallation
if (![[NSUserDefaults standardUserDefaults] objectForKey:@"FirstRun"]) {
// Delete values from keychain here
[[NSUserDefaults standardUserDefaults] setValue:@"1strun" forKey:@"FirstRun"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
//...Other stuff that usually happens in didFinishLaunching
}
這種檢查並設置您的應用程序第一次運行在一個NSUserDefaults
「FirstRun」鍵/值,如果它尚未設置。有一個評論,你應該把代碼從keychain中刪除。可以調用Synchronize以確保「FirstRun」鍵/值立即保留,以防用戶在系統保留之前手動殺死應用程序。
感謝您的提示。 – iOSAppDev 2013-04-30 06:49:04
從應用程序中刪除應用程序時沒有觸發器執行代碼。訪問鑰匙串取決於用於簽署應用程序的供應配置文件。因此,其他應用程序將無法訪問鑰匙串中的這些信息。
當用戶從設備上刪除應用程序時,它不會幫助您刪除密鑰鏈中的密碼,但它會讓您感到一些安慰(密碼不可訪問)(只能從重新安裝原始應用程序)。
當用戶卸載應用程序時,文件將從應用程序的文檔目錄中刪除。知道這一點,你所要做的就是檢查一個文件是否存在,作爲application:didFinishLaunchingWithOptions:
中發生的第一件事。之後,無條件地創建文件(即使它只是一個虛擬文件)。
如果在檢查時文件不存在,您知道這是自從最新安裝以來的第一次運行。如果您需要在應用程序的後面瞭解,請將布爾結果保存到您的應用程序委託成員。
對於那些尋找@ AMRO的回答迅捷的版本:
let userDefaults = NSUserDefaults.standardUserDefaults()
if userDefaults.boolForKey("hasRunBefore") == false {
// remove keychain items here
// update the flag indicator
userDefaults.setBool(true, forKey: "hasRunBefore")
userDefaults.synchronize() // forces the app to update the NSUserDefaults
return
}
爲用戶尋找雨燕3.0版本@ AMRO的回答:
let userDefaults = UserDefaults.standard
if userDefaults.bool(forKey: "hasRunBefore") == false {
// Remove Keychain items here
// Update the flag indicator
userDefaults.set(true, forKey: "hasRunBefore")
userDefaults.synchronize() // Forces the app to update UserDefaults
}
這似乎是基於beta#2中的行爲people have been witnessing在iOS 10.3上的默認行爲。還沒有發現任何官方文件,所以請評論,如果你有。
C#Xamarin版本
const string FIRST_RUN = "hasRunBefore";
var userDefaults = NSUserDefaults.StandardUserDefaults;
if (!userDefaults.BoolForKey(FIRST_RUN))
{
//TODO: remove keychain items
userDefaults.SetBool(true, FIRST_RUN);
userDefaults.Synchronize();
}
......並清除鑰匙串(如上TODO註釋)記錄
var securityRecords = new[] { SecKind.GenericPassword,
SecKind.Certificate,
SecKind.Identity,
SecKind.InternetPassword,
SecKind.Key
};
foreach (var recordKind in securityRecords)
{
SecRecord query = new SecRecord(recordKind);
SecKeyChain.Remove(query);
}
因爲當你的應用程序被刪除,你的代碼不能運行沒有辦法做到這一點。 – 2011-01-23 09:20:31
我認爲你只能從應用程序內部刪除一個鑰匙串項目,但在卸載之前不能刪除它。您可以查看SFHFKeychainUtils的deleteItem方法以從鑰匙串中刪除用戶名或密碼。 – matteodv 2011-04-06 15:14:46