アプリでキーチェーンを使用していますが、アプリをアドホックとして実行するとこのエラーが発生します。デバッガー(開発者プロビジョニングプロファイルを使用)で実行すると表示されません。アプリがすでにデバイスにインストールされていて、Xcodeからアプリの上に再度インストールした場合、アプリがキーチェーンにアクセスできないことに気付きます。それは確かにそれらのエラーのために起こります。
私はそのエラーをグーグルで検索することに多くの時間を費やしてきましたが、keychain-access-groupを含む資格ファイルを追加することをお勧めする人もいます。しかし、私はApple docまたは資格ファイルに必要な合理的な説明を見つけることができませんでした。
誰かが私がそれを解決するのを手伝ってくれる?
かなり古い投稿があります ここ 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アクセスを共有できます。
私は解決策を見つけました。 appIDプレフィックスは、adHocプロファイルとDebugプロファイルで異なるようです。
次のAppIdがあると仮定します。
2番目のIDはxcodeによって作成され、そのプレフィックスはアプリのデバッグバージョンに署名するために使用されます。最初のIDは、アプリのアドホックバージョンに署名するために使用されます。
アクセスグループa.com.mycompanyでキーチェーンを使用しようとすると、AdHocバージョンのキーチェーンアクセスが取得されます。アクセスグループb.com.mycompanyを使用すると、デバッグバージョンでアクセスできます。それらのどれも両方のために働きません。
新しいワイルドカードID:a。*を作成し、それを「iOS Team Provisioning Profile:*」に使用することで、問題を解決しました。このプロビジョニングプロファイルは、アプリのデバッグビルドに署名するために何らかの形で使用されているようです。実際、開発プロビジョニングプロファイルを使用して署名すると思いましたか?!
ただし、この変更により、同じアクセスグループでデバッグモードとアドホックモードでキーチェーンにアクセスできます。
新規登録ユーザーはこの問題に遭遇しないようです。xCodeは自動的に正しいプレフィックスを持つIDを作成します。
この同じ問題とその中のいくつかのバリエーションに遭遇しました(とりわけエラーITMS-90164)。何時間もさまざまな設定をいじった後、役に立たなかったので、私はついにしぶしぶ従いました Appleの技術的なQ&A QA1814:プロビジョニングプロファイルを自動的に管理するためのXcodeの設定 。手順は非常にシンプルでわかりやすく、スクリーンショットと、変更が完了した後にXcodeをリサイクルするための重要な注意事項が含まれています。最も重要なことは、それが私の問題を解決し、最終的にアーカイブをAppStoreにアップロードできるようにしたことです。
上記の解決策に加えて、私はこの問題の別の変種に遭遇しました。
組織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
ビットに古いチーム識別子を使用していましたが、新しいチーム識別子と一致しませんでした
私は次のことをしました
これですべてが一致し、機能しました
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
すべてを削除せずに修正するためのより繊細な方法があるかもしれませんが、それはあなたを正しい軌道に乗せるはずです。
他の回答で述べたように、これは間違ったプロビジョニングプロファイルが使用されていることが原因です。
XCode 6でこの問題が発生しました。プロジェクトに2つのターゲットがあり、そのうちの1つは、何をしたかに関係なく(ビルド設定のプロビジョニングプロファイル設定の変更を含む)、常に間違ったプロファイルでビルドされました。
何時間も遊んだ後、私は次のことに気づきました。
これらのどちらがどこから来たのかはわかりませんが、問題を解決するために私がしたことは次のとおりです。
その後、それは機能しました。