卸载 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 钥匙串中的项目能否在应用程序卸载和重新安装后继续存在?
即使在从钥匙串访问和 App Store Connect 中删除后,重新启动 Xcode 时,已删除的 iOS 证书仍会继续显示在钥匙串中