35

我一直在使用 Xamarin.Auth ( https://components.xamarin.com/view/xamarin.auth/ ) 来存储我的凭据。

var accountStore = AccountStore.Create ();
foreach (var account in  accountStore.FindAccountsForService("myAppName"))
    accountStore.Delete (account, "myAppName");

AccountStore.Create().Save(acc, "myAppName");

升级到 iOS 10 后,存储凭据时出现此错误:

"Could not save account to KeyChain: -34018"

at Xamarin.Auth.KeyChainAccountStore.Save (Xamarin.Auth.Account account,System.String serviceId) [0x000b2] in <402cf9b3716845b3bdddef581cb33a3e>:0 

安装最新版本1.2.3.1 问题似乎只在SIMULATOR上持续存在

4

4 回答 4

75

我正在挖掘Pat在评论中发送的链接: bugzilla.xamarin.com/show_bug.cgi ?id=43514

并找到了Pavel Sich的有用评论,他说:

只需确保您在权利中启用钥匙串访问并选择模拟器(调试)构建的权利。默认情况下未设置。

在我的 xamarin 解决方案中,我双击 .IOS 项目以打开选项窗格,选择IOS Bundle Signing并将平台选择框从“iPhone”更改为“iPhoneSimulator”,然后将字段自定义权利设置为我的 Entitlements.plist。现在它对我来说很好。

请注意,这是在按照Thibault D.在上一个答案中的建议编辑 Entitlement.plist 之后。

希望这可以帮助。

于 2016-09-19T15:27:20.430 回答
13

根据这个线程,在捆绑歌唱配置中添加一个空的权利文件就足够了:

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
  ...
  <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
</PropertyGroup>

Entitlements.plist文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
</dict>
</plist>
于 2016-09-14T10:20:53.357 回答
2

在 ios 项目设置中设置自定义权利 在此处输入图像描述

于 2019-03-02T10:35:12.677 回答
1

似乎IphoneSimulator即使您启用KeyChain了 in Entitlements.plist,它仍然无法正常工作并引发此异常。因为 Xamarin 似乎没有CodesignEntitlements将 IphoneSimulator 配置设置为默认设置,尽管它具有Iphone 配置。您必须打开IOS.csproj文件并手动添加此行

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">

  <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
</PropertyGroup>
于 2019-03-02T03:46:54.940 回答