ios - 该应用程序没有启用钥匙串访问组
问题描述
我们有一个 Xamarin.Forms 应用程序,并尝试使用 MSAL 身份验证,并面临 iOS 项目的问题。它可以在模拟器中运行,但是当由 Azure 管道构建并安装在真正的 iPhone 上时,会发生异常:
MSAL.Xamarin.iOS.4.14.0.MsalClient 异常:错误代码:missing_entitlements Microsoft.Identity.Client.MsalClientException:应用程序未在 Entitlements.plist 中启用钥匙串访问组。结果,无法保存到 iOS 钥匙串。Entitlements.plist 中未启用钥匙串访问组“OURID.com.microsoft.adalcache”...
OURID 当然是真正价值的替代品。
这是我们在 entitlements.plist 中的内容:
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.microsoft.adalcache</string>
</array>
在 B2CAuthenticationService 构造函数中:
var builder = PublicClientApplicationBuilder.Create(B2CConstants.ClientID)
.WithB2CAuthority(B2CConstants.AuthoritySignInSignUp)
.WithIosKeychainSecurityGroup(B2CConstants.IOSKeyChainGroup)
.WithRedirectUri($"msal{B2CConstants.ClientID}://auth");
我会错过什么导致异常?
添加:如果我向管道添加变量替换任务,即使那样,也只能替换 xml 和 json 配置文件中的值;不是 plist 文件。
解决方案
我通过在文本编辑器中编辑项目并在
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
物业组内
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhone' ">
当我之前通过项目 GUI 执行此操作时,它仅影响属性组
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|iPhoneSimulator' ">
这就是为什么它在模拟器中对我有用,但在真实设备上却不行。
推荐阅读
- typescript - Typescript - 当我们知道所有属性都相同时,如何显式分配每个属性的类型?
- vb.net - VB如何获取指定目录下的文件列表
- python - Tensorflow / Keras CNN 错误“函数调用堆栈:distributed_function”
- vb.net - 如何在 VB.NET 中为发布版本创建条件编译语句?
- postgresql - 我已经将错误的 psql 转储加载到我的数据库中,无论如何要恢复?
- sql - 查询每个调度的最新序列
- orientdb - 尝试编写包含空格的文本时,API 方法 OClass.setCustom 在分布式环境中失败
- javascript - 猫头鹰轮播,带有 Chrome 的模糊过滤器渲染错误
- flutter - 给定 podspec 的名称“FlutterToast”与预期的“fluttertoast”不匹配
- reactjs - 在另一个函数中使用 useCallback 可以吗?