Visual Studio for MacでXamarinのプロジェクトを作成し、iPhoneのシミュレータ上で動かそうとしたときに、次の様なエラーが発生しました。
1 2 3 |
Microsoft.Identity.Client.MsalClientException has been thrown The application cannot access the iOS keychain for the application publisher (the TeamId is null). This is needed to enable Single Sign On between applications of the same publisher. This is an iOS configuration issue. See https://aka.ms/msal-net-enable-keychain-access for more details on enabling keychain access. |
今回はこの解決方法について紹介します。
開発環境
まず、今回はAzure Active Directory B2Cと呼ばれる認証サービスを利用するアプリのサンプルをここからダウンロードしました。
ダウンロードしたプロジェクトをVisual Studio for Mac v8.5.4で開き、Azure AD B2Cの作成とその内容をプロジェクトに設定する方法は、ここに書かれた手順に従いました。
エラーが発生した状況とその原因
今回、Azure AD B2Cの設定が完了したあと、iOSプロジェクトをiPhoneシミュレータ上でデバッグする様に、Visual Studioで実行したときに最初に紹介したエラーが発生しました。
原因を調査したところ、iOSのプロジェクトにApple Developer Bundle Identifierが設定できていないことが原因であることがわかりました。エラーメッセージには、ここを参照する様に書かれていますが、何が問題なのかをどこをみたら良いのかがわかりませんでした。
エラーの解決方法
Visual Studio for Macには、Preferencesのウインドウを立ち上げると、XCodeのようにApple IDでログインしてアプリ用のProvisioning Profileを自動で作成するように動く機能はあるのですが、ログインはできるが、次のようなエラーが発生し、Certificationは生成することができないと言う状態です。
1 2 |
Failed to create Apple Development certificate. Unexpected character encountered while parsing value: <. Path '', line 0, position 0. |
今回は、このエラーを解決する方法を紹介します。解決する方法と言っても、完全に起こらなくする方法ではなく、今回のプロジェクトでは起こらなくする方法です。新しい別のプロジェクトを作成した場合は、同じようなことが起こる可能性があります。
まず、ソリューションに含まれる複数のプロジェクトの中で、.iOSで終わるプロジェクトを開きます。そして、その中にあるinfo.plistを開きます。
そこで、Automatic Provisioningを選択してもProvisioning Profileを生成できず、次のように先に紹介した同じエラーが発生してしまいます。
実現方法は単純で、XCodeでBundle Identifiersが同じになるプロジェクトを作り、Provisioning Profileを生成したいTeam IDと紐付けてProvisioning Profileを生成することで作成できる。
さらに、それをVisual Sudioで認識するため、Signing Schemeは、Manual Provisioningを選択する。そして、「Bundle Signing Options..」と言うボタンを押し、現れたウインドウで次のように入力する。
まず、Signing Identityに、先ほどProvisioning Profileを生成したTeam IDを選択する。次に、Provisioning ProfileにXCodeで生成したProvisioning Profileを選択する。さらに、Custom Entitlementsに予めプロジェクトに含まれるEntitlements.plistを選択する。
そして、プロジェクトのデバッグを開始ボタンを押すと、iPhoneシミュレータでアプリを起動することが可能になる。
参考サイト