83

プッシュ通知をサポートするようにアプリを構成しようとしていますが、次のエラーが発生し続けます:トークンの取得に失敗しました、エラー:エラーDomain = NSCocoaErrorDomain Code =3000"アプリケーションに有効な'aps-environment'エンタイトルメント文字列が見つかりません"UserInfo= 0x1f818fc0 { NSLocalizedDescription=アプリケーションに有効な'aps-environment'エンタイトルメント文字列が見つかりません}

  • アプリがプッシュ通知をサポートできるようにしました(現時点での開発のみ)。
  • プッシュ通知を有効にした後、プロビジョニングプロファイルを作成しました。
  • 私のバンドル識別子は、プロファイルに表示されているものと同じです。
  • 私のプロファイルファイルには、次の文字列があります:aps-environment
  • 「コード署名ID」セクションのプロジェクトとターゲットの両方で、すべての値がプロビジョニングプロファイルとして選択されていることを確認しました。

他にアイデアはありますか?ありがとう。

4

11 に答える 11

64

私の場合、プロビジョニング プロファイルの内容は次のとおりです。

security cms -D -i ~/Downloads/spolskyDevelop.mobileprovision 
...
<key>application-identifier</key>
<string>P5GM95Q9VV.com.dca.spolsky</string>
<key>aps-environment</key>
<string>development</string>

実際にビルドされたアプリ内のものとは異なりました (Xcode の [ログ] タブを見ると、ビルドされている場所を見つけることができます)

codesign -d --entitlements - '/Users/drew/Library/Developer/Xcode/DerivedData/spolsky-bdbtdfjeeywhqzccpmmceqvnhgtm/Build/Products/Debug-iphoneos/spolsky-ios.app'
<dict>
    <key>application-identifier</key>
    <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>Y2X6Z7Z2GR.com.dca.spolsky-ios</string>
    </array>
</dict>

これは、Code Signing Identity の下の "Currently Matches" ヒント テキストが正しいプロビジョニング プロファイルを示していたにもかかわらず、当てはまりました。奇妙な話をさらに奇妙にするために、実行時に正しいプロビジョニング プロファイルがデバイスにインストールされていたので ([設定] -> [一般] -> [プロファイル])、プロビジョニング プロファイルは正しいと思い込んでいましたが、ワイルドカード ID にフォールバックしていました。アプリが実際に起動されたとき。

手がかりは、次の 2 つのコマンドの出力の違いでした。

Y2X6Z7Z2GR .com.dca。spolsky -iosP5GM95Q9VV .com.dca. スポルスキー

太字部分を合わせると自動的にイタリック部分が合うように変更されました。さらに、セキュリティとコードサインの出力は一致し、aps-entitlement エラーはなくなりました。

ここでの私の推測では、XCode は、ワイルドカードではない ID に対してワイルドカード スタイルの一致を使用していたようです。(「spolsky」は、結局のところ、「spolsky-ios」にかなり近い)、これが「Currently Matches」の出力を説明しています。しかし、ビルド チェーン内の何かがこれに関してより厳密であるため、ビルド中に実際のワイルドカード IDにフォールバックします。

于 2013-01-24T22:19:10.913 に答える
37

この問題は、APNS 証明書を作成するにプロビジョニング プロファイルが作成されるため、現在のプロビジョニング プロファイルに APNS 情報が含まれていないことが原因です。

したがって、問題を解決するには、新しいプロビジョニング プロファイルを作成し、Xcode でプロビジョニング プロファイルを選択すると、エラーがクリアされます。

于 2013-08-15T08:29:55.537 に答える
28

プッシュ通知がデバイスで既に機能していた後、同じ問題が発生しました。Xcodeが何かを誤ってキャッシュしたように見えたので、更新すると問題が解決しました:

  1. Xcode -> 設定 -> アカウント
  2. 開発者アカウントの詳細を表示
  3. プロビジョニング プロファイルの [更新] を数回クリックするだけです。更新するたびにこれらの変化が見られました。変化が止まるまで更新を続けます。
于 2014-11-14T20:15:38.613 に答える
9

プッシュ通知機能を有効にすることで、この問題を解決しました。

[プロジェクト] > [ターゲット] > [機能] > [プッシュ通知をオンにする] を選択します

画像をチェックしてください

于 2016-01-06T08:22:30.273 に答える
9

このエラーが発生し、新しいプロビジョニング プロファイルを作成しませんでした。新しいものを作成し、xCode を再起動する必要がありましたが、現在は機能しています!

于 2013-06-30T16:45:42.530 に答える
3

Xcode 8 にアップグレードした後にこの問題が突然発生した場合は、機能画面に警告が表示され、これを自動的に修正できます。

[プロジェクト] > [ターゲット] > [機能] > [プッシュ通知をオンにする] を選択します

于 2016-09-30T00:47:30.173 に答える
2

Product->Clean がやってくれました。うまくいけば、それは他の誰かのためにそれをします。

于 2014-09-04T06:48:25.473 に答える
2

iOS 10 でこのエラーが発生した場合は、次の手順を試すことができます。

1.プロジェクトをきれいにします。
2.Targets -> Capabilities -> Push Notification をチェックします。オフの場合はオンにします。

そして問題は解決します。上記の手順は、この問題を取り除くのに役立ちます. それが誰かに役立つことを願っています。

于 2016-10-18T08:18:48.130 に答える