gpt4 book ai didi

ios 应用程序启动和 protected 数据事件

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:33 26 4
gpt4 key购买 nike

一段时间以来,我们一直在努力解决 iOS 应用程序中的一个零星问题,似乎偶尔会启动我们的应用程序,但钥匙串(keychain)仍无法访问。我们还没有找到一种可靠地重现这一点的方法。

与许多应用程序一样,我们使用 kSecAttrAccessible = kSecAttrAccessibleWhenUnlocked 将一些敏感数据(即用户凭据)保存到钥匙串(keychain)。该应用程序将在启动期间在我们的应用程序委托(delegate)的 didFinishLaunchingWithOptions 覆盖中从钥匙串(keychain)中读取这些值。这在大多数情况下都可以正常工作。

但有时我们的用户会报告无法读取钥匙串(keychain)值的问题。如果用户简单地终止应用程序并重新启动它,值仍然存在并且一切正常。我们的应用程序不在后台运行,所以我想不出它是由用户操作以外的任何其他方式启动的情况,这意味着设备已解锁。

我熟悉应用程序 Protected Data Did Become Available 方法,当设备解锁并且钥匙串(keychain)等 protected 数据变得可访问时,操作系统会调用该方法。我想如果 UIApplication.is Protected Data Available 为 false,我们可以检查 didFinishLaunchingWithOptions,如果是这样,则推迟依赖钥匙串(keychain)的应用程序初始化部分发生在应用程序 Protected Data Did Become Available方法。我总是对无法重现和测试的解决方案编码持怀疑态度。

任何人都可以报告他们通过应用程序日志看到受 iOS 保护的数据在 didFinishLaunchingWithOptions 方法中尚不可用但稍后可用的实例吗?

最佳答案

随着 iOS 10.3.2 的发布,我发现一些用户也会随机发生这种情况。我们的 OAuth 凭据存储在钥匙串(keychain)中,每次调用 API 时都会访问该钥匙串(keychain)。如果 OAuth 不存在,我会注销用户,因为我们在设备上有敏感数据。

我在后台刷新时检查了 isProtectedDataAvailable,所以我知道它不会排队任何 API 调用。

像你一样,我真的不想添加检查/等待 protected 数据在前台可用。它违背了 kSecAttrAccessibleWhenUnlocked

的目的

这是最近发布的一个关于钥匙串(keychain)的问题,它表明解密时间可能是另一个罪魁祸首。 https://github.com/evgenyneu/keychain-swift/issues/15

关于ios 应用程序启动和 protected 数据事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43125168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com