密钥链不在iOS模拟器11.2中存储数据

时间:2018-04-13 07:10:39

标签: c# ios xamarin xamarin.forms xamarin.ios

我在xamarin c#中编写了以下代码,用于在iPhone Keychain中存储敏感数据。

    void StoreKeysInKeychain(string key, string value)
    {

        var user = Settings.CurrentUser;
        var userstring = JsonConvert.SerializeObject(user);

        if (value == "logout")
        {
            userstring = string.Empty;
        };

        var record = new SecRecord(SecKind.GenericPassword)
        {
            ValueData = NSData.FromString(userstring),
            Generic = NSData.FromString(key),
            Label="Sanket",
        };
        SecKeyChain.Remove(record);
        SecKeyChain.Add(record);

    }

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

在另一个MAC模拟器上使用相同的代码进行测试,它在那里工作但不在我的MAC上。

MAC都具有相同的iOS 10.13.3和模拟器版本11.2。 即使我试图改变模拟器,但它不存储数据。

我试图浏览以sqlite格式存储的Keychain内容。 请参阅以下链接如何浏览存储在模拟器钥匙串中的内容。

链接至:Browse Keychain Data stored in Simulator

我试图重置模拟器的内容,但没有运气。

任何帮助将不胜感激。 谢谢:(

1 个答案:

答案 0 :(得分:0)

在iOS 10模拟器上的钥匙串破了。看看这个Xamarin论坛帖子:https://forums.xamarin.com/discussion/77760/ios-10-keychain和相关的苹果帖子:https://forums.developer.apple.com/thread/51071

以下是问题:问题:SecKeyChain.Add()在iOS 10模拟器上返回-34018,除非在Entitlements.plist中启用了启用钥匙串访问组。

您需要为模拟器构建配置更新Entitlements.plist