2016-12-26 119 views
1

在我的应用我有两种方法,帮助我保存和钥匙扣不能访问保存在Xamarin.iOS钥匙扣值

public static void StoreKeysInKeychain(string key, string value) 
    { 
     DeleteKeyFromKeychain(key); 
     var s = new SecRecord(SecKind.GenericPassword) 
     { 
      ValueData = NSData.FromString(value), 
      Generic = NSData.FromString(key) 
     }; 
     SecKeyChain.Add(s); 
     Console.WriteLine(GetRecordsFromKeychain(key)); 
    } 

    public static string GetRecordsFromKeychain(string key) 
    { 
     SecStatusCode res; 
     var rec = new SecRecord(SecKind.GenericPassword) 
     { 
      Generic = NSData.FromString(key) 
     }; 
     var match = SecKeyChain.QueryAsRecord(rec, out res); 

     if (match != null) 
      return match.ValueData.ToString(); 

     return "Error"; 
    } 

我节省有两个值获取值,由于某种原因时,我试图让他们中的任何一个我得到一个“错误”字符串,而不是值。相同的代码以前工作没有任何问题,但后来我加了另一个参数在钥匙串来存储并改名都

回答

3

如果你的目标的iOS 10+,确保您检查您的SecKeyChain.Add的返回状态:

var status = SecKeyChain.Add(s); 
if (status == SecStatusCode.Success) 
    Console.WriteLine(GetRecordsFromKeychain(key)); 
else 
    Console.WriteLine(status); 

如果你得到一个-34018,那么你需要确保您的Entitlements.plist钥匙串访问:

enter image description here

然后确保该Entitlements.plist分配给您的Custom Entitlements在你的项目Build/iOS Bundle Signing

enter image description here

+0

哇,不知道应享权利,奇怪的是,之前的工作。顺便说一句,我不知道如何,但是当我昨天使用Keychain.Net库时,即使在幕布后面,图书馆的工作方式也几乎相同。不管怎么说,还是要谢谢你! –

+1

现在的另一个问题是,在启用KeyChain访问后,我无法将应用程序部署到设备“错误MT1006:无法在设备'iPhone'上安装应用程序'Myapp.app':您的代码签名/设置配置文件未正确配置。可能您拥有目前的配置文件不支持的权利,或者您的设备不属于当前的配置文件。请检查iOS设备日志以获取详细信息(错误:0xe8008016)。 –

+0

@SushiHangover如何将钥匙串记录添加到kSecAttrAccessGroupToken访问组? –