web-dev-qa-db-ja.com

「資格 'keychain-access-groups'にプロビジョニングプロファイルで許可されていない値がある」を解決する方法

アプリでキーチェーンを使用していますが、アプリをアドホックとして実行するとこのエラーが発生します。デバッガー(開発者プロビジョニングプロファイルを使用)で実行すると表示されません。アプリがすでにデバイスにインストールされていて、Xcodeからアプリの上に再度インストールした場合、アプリがキーチェーンにアクセスできないことに気付きます。それは確かにそれらのエラーのために起こります。

私はそのエラーをグーグルで検索することに多くの時間を費やしてきましたが、keychain-access-groupを含む資格ファイルを追加することをお勧めする人もいます。しかし、私はApple docまたは資格ファイルに必要な合理的な説明を見つけることができませんでした。

誰かが私がそれを解決するのを手伝ってくれる?

12
Kostia Kim

かなり古い投稿があります ここ KeyChainがアプリケーションにアクセスを許可する方法であるため、アプリのバンドルシードの下にあるバンドル識別子を指定する資格が必要です。

2つのアプリケーションがバンドルシードに同じバンドル識別子を持っていると、KeyChainアクセスを共有できます。

したがって、アプリケーションAに共通バンドルIDがある場合:com.yourcompany.AAAAAAそしてアプリケーションBを共通バンドルIDとしてcom.yourcompany.BBBBBB

また、両方の.ipaにエンタイトルメントファイルがある場合(文字列「.com.yourcompany.AAAAA」および.com.yourcompany.BBBBB」を含む「keychain-access-groups」というキーの配列を含むplist)

KeyChainアクセスを共有できます。

  • デバッグ/アドホックの問題について。プロジェクト設定で、[コード署名]-> [コード署名資格]で両方が空であることを確認します。
6
Wiz

私は解決策を見つけました。 appIDプレフィックスは、adHocプロファイルとDebugプロファイルで異なるようです。

次のAppIdがあると仮定します。

  • a.com.mycompany.A
  • b。*

2番目のIDはxcodeによって作成され、そのプレフィックスはアプリのデバッグバージョンに署名するために使用されます。最初のIDは、アプリのアドホックバージョンに署名するために使用されます。

アクセスグループa.com.mycompanyでキーチェーンを使用しようとすると、AdHocバージョンのキーチェーンアクセスが取得されます。アクセスグループb.com.mycompanyを使用すると、デバッグバージョンでアクセスできます。それらのどれも両方のために働きません。

新しいワイルドカードID:a。*を作成し、それを「iOS Team Provisioning Profile:*」に使用することで、問題を解決しました。このプロビジョニングプロファイルは、アプリのデバッグビルドに署名するために何らかの形で使用されているようです。実際、開発プロビジョニングプロファイルを使用して署名すると思いましたか?!

ただし、この変更により、同じアクセスグループでデバッグモードとアドホックモードでキーチェーンにアクセスできます。

新規登録ユーザーはこの問題に遭遇しないようです。xCodeは自動的に正しいプレフィックスを持つIDを作成します。

4
Trantec

この同じ問題とその中のいくつかのバリエーションに遭遇しました(とりわけエラーITMS-90164)。何時間もさまざまな設定をいじった後、役に立たなかったので、私はついにしぶしぶ従いました Appleの技術的なQ&A QA1814:プロビジョニングプロファイルを自動的に管理するためのXcodeの設定 。手順は非常にシンプルでわかりやすく、スクリーンショットと、変更が完了した後にXcodeをリサイクルするための重要な注意事項が含まれています。最も重要なことは、それが私の問題を解決し、最終的にアーカイブをAppStoreにアップロードできるようにしたことです。

1
T'Pol

上記の解決策に加えて、私はこの問題の別の変種に遭遇しました。

組織IDが変更されたため(developer.Apple.comで最新の契約更新を受け入れることに関連している可能性があります)、アプリのプレフィックスが変更されました。つまり、以前はABCCYZ0U812.com.whatever.appだったのに対し、現在は90210SUXX11.com.whatever.appでした。

送信に行くと、「Sends(app name)to Apple」という画面が表示され、「Binary and Entitlements」というリストが表示されます。アプリの下にリストを展開すると、(Xcodeには2回あると思います)初めてのバグ)私は次のようなものを見るでしょう

AppName.app (5 entitlements)          (provisioning profile) (arrow)

application-identifier
90210SUXX11.com.whatever.app

...

keychain-access-groups
ABCCYZ0U812.com.whatever.app

com.Apple.developer.team-identifier
90210SUXX11

そのため、何らかの理由でkeychain-access-groupsビットに古いチーム識別子を使用していましたが、新しいチーム識別子と一致しませんでした

私は次のことをしました

  1. プロビジョニングプロファイルの横にある矢印をクリックして、プロファイルが保持されている場所にFinderを開きます
  2. そのディレクトリ内のすべての.mobileprovisionファイルを削除しました
  3. 送信ダイアログを閉じました
  4. Xcodeで、[Xcode]-> [設定]-> [アカウント]をクリックし、アカウントにプロビジョニングプロファイルを再ダウンロードさせました
  5. アーカイブを再度送信しようとしました

これですべてが一致し、機能しました

AppName.app (5 entitlements)          (provisioning profile) (arrow)

application-identifier
90210SUXX11.com.whatever.app

...

keychain-access-groups
90210SUXX11.com.whatever.app

com.Apple.developer.team-identifier
90210SUXX11

すべてを削除せずに修正するためのより繊細な方法があるかもしれませんが、それはあなたを正しい軌道に乗せるはずです。

0
Tom Kidd

他の回答で述べたように、これは間違ったプロビジョニングプロファイルが使用されていることが原因です。

XCode 6でこの問題が発生しました。プロジェクトに2つのターゲットがあり、そのうちの1つは、何をしたかに関係なく(ビルド設定のプロビジョニングプロファイル設定の変更を含む)、常に間違ったプロファイルでビルドされました。

何時間も遊んだ後、私は次のことに気づきました。

  1. 適切なターゲットは、「XC:com.mycompanyname.mytargetname1」というプロビジョニングプロファイルを使用することでした。
  2. 壊れたターゲットは「XC:」と呼ばれるプロファイルを使用していました。このプロファイルは「Xcode:Wildcard AppID()」プロファイルです。

これらのどちらがどこから来たのかはわかりませんが、問題を解決するために私がしたことは次のとおりです。

  1. Developers.Apple.comにログインします
  2. 証明書、識別子、プロファイルに移動します
  3. 左側のバーのプロビジョニングプロファイルの下にある[すべて]をクリックします
  4. 「+」をクリック
  5. 「XC:com.mycompanyname.mytargetname2」という新しいプロファイルを作成しました(注:設定はユーザーに固有です。com.mycompanyname.mytargetname2はアプリのバンドルIDに置き換える必要があります。

その後、それは機能しました。

0
Oz Solomon