重新安装应用程序后,钥匙串存储的密码仍然可用

keychain stored password is still available after app re-installed

我正在使用 xcode8+swift3 开发 iOS 应用程序。

我创建了将用户密码存储到钥匙串并从钥匙串中读取密码的函数。我创建的函数可以参考

我通常注意到的问题是,即使我卸载了应用程序,当我重新安装应用程序时,我的应用程序从钥匙串读取的密码是以前安装的应用程序(已经卸载)的旧密码。

我的问题是,解决这个问题的最佳做法是什么?

在 app delegate 中你可以做:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

   BOOL savedInKeychain = [[NSUserDefaults standardUserDefaults]boolForKey:@"savedInKeychain"];
   if(!savedInKeychain){
    //There is no keychian data saved in this app
    //check if data exisst in keychain
    if(kechainData){
        //Delete keychain data
    }

   return YES;
}

稍后在钥匙串中保存数据后,在 userdefaults 中将 savedInKeychain 设置为 YES。

钥匙串已加密并在卸载后永久保留。 NSUserdefaults 未加密(不建议存储密码)并且在卸载后不持久。

要检查应用程序是否首次启动并重置钥匙串,您可以使用此方法:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"])
    {
        // reset keychain
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasLaunchedOnce"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    return YES;
}