我在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
我试图重置模拟器的内容,但没有运气。
任何帮助将不胜感激。 谢谢:(
答案 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
。