无法从iOS密钥链加载通用密码(errSecNotAvailable-25291)

无法从iOS密钥链加载通用密码(errSecNotAvailable-25291),ios,react-native,react-native-ios,keychain,Ios,React Native,React Native Ios,Keychain,这发生在iOS 13.3(iPhone 11)上 我开发了一个react原生iOS应用程序,通过 我的读/写钥匙链选项如下所示,从第1天起,它从未改变并且工作良好 const defaultOptions: RNSensitiveInfoOptions = { touchID: true, kSecAccessControl: 'kSecAccessControlBiometryAny', kSecUseOperationPrompt: 'We will store data sec

这发生在iOS 13.3(iPhone 11)上

我开发了一个react原生iOS应用程序,通过

我的读/写钥匙链选项如下所示,从第1天起,它从未改变并且工作良好

const defaultOptions: RNSensitiveInfoOptions = {
  touchID: true,
  kSecAccessControl: 'kSecAccessControlBiometryAny',
  kSecUseOperationPrompt: 'We will store data securely on your device.',
  sharedPreferencesName: 'sensitive',
  keychainService: 'sensitive',
};
最近,我的一个客户抱怨无法从keychain检索数据,因为
errSecNotAvailable=-25291,/*没有可用的keychain。您可能需要重新启动计算机*/

我认为keychain可能出了问题,所以我尝试使用相同的选项设置单个键/值项(因此
kSecAttrService
kSecClass
与业务相关的项相同):“foo”->“bar”。我可以通过相同的选项加载这个值

我做了更多的经历:

  • 如果我读取的密钥不存在,keychain API将返回error
    errSecItemNotFound-25300

  • 如果我读取了与业务相关的密钥,keychain API将返回error
    errSecNotAvailable-25291

  • 我越狱了这部iPhone并用它来卸载物品,但它会提示(尽管手机是解锁的):

  • 我将Keychain-2.db从设备复制到本地计算机,并使用sqlite db查询通用密码项,看起来它们在那里(但由于它们是加密的,我不确定100%):
  • 我希望有人能建议:

  • 为什么会发生这个问题
  • 我是否有可能恢复钥匙链数据
  • [INFO] No Generic Password Keychain items found.
    [HINT] You should unlock your device!