卸载 iOS 应用程序时删除钥匙串

Posted

技术标签:

【中文标题】卸载 iOS 应用程序时删除钥匙串【英文标题】:Deleting Keychain when uninstalling iOS app 【发布时间】:2016-12-12 11:21:01 【问题描述】:

我已经阅读了几篇关于这个问题的帖子,例如Delete keychain items when an app is uninstalled 和ios autodelete Keychain items after uninstall?。他们说,当你卸载一个应用程序时,它的Keychain 不会被删除,但帖子可能会被弃用,这是当前的行为吗?

另一方面,如果Keychain在用户卸载应用程序时没有真正自动删除,我不清楚自己的方法。

编辑:如果在卸载应用程序时Keychain 未被删除,那么所有剩余的Keychain 实际会发生什么情况?系统不处理吗?

【问题讨论】:

【参考方案1】:

尝试使用 UserDefaults 存储一个布尔值,用于跟踪数据何时保存到钥匙串。

例子:

func someFunctionThatSavesToKeychain 
    // Save to keychain
    UserDefaults.standard.set(true, forKey: "isSavedToKeychain")
    // Do other stuff

然后在AppDelegate中的didFinishLaunchingWithOptionsMethod中

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    if !UserDefaults.standard.bool(forKey: "isSavedToKeychain") 
        // Delete data from Keychain
    

由于在应用卸载时 UserDefaults 被清除,下次用户安装应用时,该键值将消失,因此在启动时,您的 AppDelegate 将删除剩余的 Keychain 数据。

我也进行了广泛的搜索,此解决方法是您能找到的最接近的解决方法。

【讨论】:

谢谢。但这只会在用户再次安装应用程序时清除Keychain,对吗?如果她/他不这样做会怎样? 是的。如果用户不这样做,则数据将保留在钥匙串中。如果您担心数据在钥匙串中占用的空间量,也许钥匙串不是保存它的地方。替代方案可以在 App Directory 中。 好主意!如果 flag 为 false 或未找到,我将忽略 KeyChain 值 如果用户拥有来自同一个开发者的多个应用程序,这将不起作用,因为只有在从开发者处删除所有应用程序时才会删除用户默认值 -> ***.com/questions/24985825/…【参考方案2】:

从设备中删除应用时,不会触发执行代码。对钥匙串的访问取决于用于签署应用程序的配置文件。因此,没有其他应用程序能够访问钥匙串中的这些信息。

我认为您不需要删除它。我不确定如何删除它,但我相信如果您确实将钥匙串值设置为某个特定值,那么您也可以分配nil 的值或只是空字符串""。但这不是很确定,只是假设。

希望对你有帮助!

【讨论】:

以上是关于卸载 iOS 应用程序时删除钥匙串的主要内容,如果未能解决你的问题,请参考以下文章

iOS会自动清理钥匙串项目吗?

iOS 钥匙串中的项目能否在应用程序卸载和重新安装后继续存在?

应用程序被杀死时删除钥匙串

iOS 中钥匙串服务的生命周期

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

即使在从钥匙串访问和 App Store Connect 中删除后,重新启动 Xcode 时,已删除的 iOS 证书仍会继续显示在钥匙串中