我正在Xamarin.iOS中创建一个应用程序,它使用来自安全的SecKeyChain。其中,我试图将用户的凭证保存为KeyChain的SecRecord,然后再访问它。当应用程序启动时,它会检查KeyChain中是否有任何已保存的凭据,并决定是否提示手动登录。SecKeyChain项目和SecRecord设备和模拟器之间的调试差异,Xamarin iOS
当SecKeyChain.Add被调用时,它返回成功。但是,应用程序SecKeyChain.QueryAsRecord的强制关闭失败并显示错误代码AuthFailed。这只发生在设备上,而模拟器成功。
的另一个问题是关系到创建SecRecord。调试Device时创建的对象与Simulator之间存在严重的差异。创建SecRecord的代码是:
var credentialsRecord = new SecRecord(SecKind.GenericPassword)
{
Generic = NSData.FromString("record"),
Label = credentials.Username,
Account = credentials.Username,
Service = CredentialsStorageServiceName,
ValueData = NSData.FromBytes(credentials.Password.ToIntPtr(), Convert.ToUInt32(credentials.Password.Length()) * 2),
AccessControl = new SecAccessControl(SecAccessible.WhenPasscodeSetThisDeviceOnly, SecAccessControlCreateFlags.TouchIDCurrentSet)
};
var statusCode = SecKeyChain.Add(credentialsRecord);
在entitlements.plist,我已经启用了钥匙串访问组,并添加了一个名为同我虚拟的Xcode project's包标识符组。在项目选项 - > iOS软件包签名中,我有一个签名标识和一个设置配置文件,自定义权利字段为空。
我是否缺少某些东西来访问设备的钥匙串,或者是否与其他问题有关?
请让我知道,如果我失去了一些东西,并提前谢谢你。