2016-12-26 65 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訪問組? –