我们使用本机键盘包装类来存储和检索密钥链中的值.但在某些情况下,值将被删除/空.
我们的应用程序中启用了以下项目
>位置服务ON – 始终始终处于状态,用户可以在设备设置中进行更改
>背景获取 – ON – 我们没有在代码中使用任何特定的方法. (即在代码中未使用/添加的performfetchwithcompletionhandler方法)
上述情况是否可能对钥匙串项目有影响,还是有其他可能导致钥匙串项目被删除的情况.
解决方法
我遇到了同样的问题.我已经解决了这个问题,如下.
这个问题主要发生在我们处于后台状态或我们的设备处于锁定状态时.钥匙链留下了这个状态的钥匙链空白的辅助功能设置,所以默认为苹果最低/最安全的访问级别.然而,如果用户在锁定屏幕上具有密码,则此级别不允许键盘访问.
[wrapper setObject:(__bridge id)kSecAttrAccessibleAlways forKey:(__bridge id)kSecAttrAccessible];
把我们把用户名和密码存储在key-chain中的代码行以上就可以正常工作了.
我的其他建议是使用kSecAttrAccessibleAfterFirstUnlock而不是kSecAttrAccessibleAlways如果你有使用.