Xamarin Auth Store Keychain 在 ios10 升级后无法正常工作

Xamarin Auth Store Keychain not working after ios10 upgrade

我一直在使用 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");

升级到 iOS10 后,我在存储凭据时遇到此错误:

"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

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

<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>

我正在挖掘评论中发送的 link Patbugzilla.xamarin.com/show_bug.cgi?id=43514

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

Just make sure you enable the keychain access in Entitlements and select the entitlements for Simulator (Debug) builds too. By default this is not set.

在我的 xamarin 解决方案中,我双击了 .IOS 项目以打开选项窗格,selected IOS Bundle Signing并将 Platform select 框从 "iPhone" 更改为 "iPhoneSimulator",然后将字段 Custom Entitlements 设置为我的 Entitlements.plist。现在它对我来说工作正常。

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

希望对您有所帮助。

似乎当您在 IphoneSimulator 上工作时,即使您在 Entitlements.plist 中启用了 KeyChain,它仍然不起作用并抛出此异常。因为 Xamarin 似乎没有为 IphoneSimulator 配置设置 CodesignEntitlements 作为默认配置,尽管它有 Iphone 配置。您必须打开 IOS.csproj 文件并手动添加此行

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

  <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
</PropertyGroup>

在 ios 项目设置中设置自定义权利