首页 > 解决方案 > Keychain whenPasscodeSetThisDeviceOnly 在密码重置后擦除钥匙串值两次

问题描述

让我们考虑使用 KeychainAccess 库:

private let keychain = Keychain(service: "som.service.name")

func getProperty(_ prop: String) -> String? {
    return try? keychain
        .get(prop)
}

func setProperty(_ prop: String, value: String) {
    try? keychain
        .accessibility(.whenPasscodeSetThisDeviceOnly)
        .set(value, key: prop)
}

问题
当变量存储在带有“.whenPasscodeSetThisDeviceOnly”标志的钥匙串中时,一旦用户删除设备的密码,它就会被擦除。设置新密码后,应该可以存储和检索新值,但似乎第一次设备锁定至少 10 秒后,钥匙串项目再次被擦除。
重现步骤
- 设置设备的密码 - 存储/检索值(工作正常)
- 删除设备的密码(不要更改 - 更改密码不会影响钥匙串的持久性)
- 设置设备的密码(不要锁定设备,只需运行应用程序)
- 尝试检索旧值 -> 值被擦除(这是预期的)
- 存储/检索新值(工作正常)
- 锁定设备至少 10 秒
- 尝试检索存储的值(问题:再次擦除值)
- 从现在开始(在第一个 10 秒锁定之后),钥匙串正常工作,以下设备锁定不再影响钥匙串持久性

在设备上再次设置密码并且应用程序用户存储新值后,我需要始终可以检索钥匙串值。
为什么我锁定设备至少 10 秒后它又被擦除了?
任何帮助、想法、解决方法将不胜感激。

标签: keychain

解决方案


推荐阅读