Xamarin.iOS密钥链标识未持久化

Xamarin.iOS密钥链标识未持久化,ios,xamarin,xamarin.ios,Ios,Xamarin,Xamarin.ios,我已经创建了一个自签名的.pfx文件,当我拖到emulator上时,会出现导入屏幕,我可以单击,然后使用select*from cert在模拟器密钥链上,我可以看到导入的证书 当我在代码中加载此证书并尝试添加它时,我会从保存操作中获得一个成功,但在随后尝试访问标识时,它会返回ItemNotFound,此外,当我在导入后检查密钥链时,表中也没有证书 await certStream.CopyToAsync(ms); var options = NSDictionary.FromObjectsAn

我已经创建了一个自签名的.pfx文件,当我拖到emulator上时,会出现导入屏幕,我可以单击,然后使用
select*from cert
在模拟器密钥链上,我可以看到导入的证书

当我在代码中加载此证书并尝试添加它时,我会从保存操作中获得一个
成功
,但在随后尝试访问标识时,它会返回
ItemNotFound
,此外,当我在导入后检查密钥链时,表中也没有证书

await certStream.CopyToAsync(ms);

var options = NSDictionary.FromObjectsAndKeys(new[]
{
   NSObject.FromObject("CertPassword")
}, new[] 
{
    SecImportExport.Passphrase
});

var result = SecImportExport.ImportPkcs12(ms.ToArray(), options, out 
    NSDictionary[] imports);
if (result != SecStatusCode.Success)
    throw new Exception("Failed importing certificate identity");

var identity = imports[0][SecImportExport.Identity];
certRecord.SetValueRef(new SecIdentity(identity.Handle));
var identityImportResult = SecKeyChain.Add(certRecord);

var savedIdentity = SecKeyChain.QueryAsRecord(new 
    SecRecord(SecKind.Identity)
{
    Label = "ApplicationIdentityCertificate"
}, out SecStatusCode savedResult);

通过全面阅读,我确保了emulator有一个相关的权限,而且它也有密钥链共享权限,因为有传闻证据表明,这有时也会影响保存到密钥链的能力。

因此我最终成功地实现了这一点。原来我缺少了一个在SecKeyChain类上可用的非常简单的方法

var identity = imports[0][SecImportExport.Identity];
SecKeyChain.AddIdentity(new SecIdentity(identity.Handle));

上面的代码片段是我需要进行的更改,现在标识以正确的bundle ID存储在密钥链中,我们的应用程序可以加载证书和私钥,无论出于何种原因,通过
SecKeyChain.Add()添加它
方法对标识无效。

您的意思是密钥链未保存在表中吗?还是不保存.pfx文件中的数据?创建的安全性似乎没有保存,现在我是否在表中查找错误的位置很可能是,但保存后无法立即加载标识这一事实对我来说似乎很奇怪