web-dev-qa-db-ja.com

アプリケーションに有効な「aps-environment」資格文字列が見つかりません

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

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

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

82
bashan

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

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"ヒントテキストは正しいプロビジョニングプロファイルを示していました-奇妙な、ハァッか。奇妙な話を奇妙にするために、実行時に正しいプロビジョニングプロファイルがデバイスにインストールされていました([設定]-> [全般]-> [プロファイル])。アプリが実際に起動であったとき。

手がかりは、これら2つのコマンドの出力の違いです。

Y2X6Z7Z2GR。com.dca .spolsky-ios vsP5GM95Q9VV。com.dca .spolsky

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

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

64
Drew

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

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

37
Raptor

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

  1. Xcode->設定->アカウント
  2. 開発者アカウントの詳細を表示する
  3. プロビジョニングプロファイルの[更新]を数回クリックするだけです。私はこれらの変化を更新ごとに見ていました。変化が止まるまで更新を続けます。
29
Oren

バンドル識別子は、プロビジョニングプロファイルとcase-sensitiveで一致する必要があることに注意してください。 com.firstlast.appnameであったはずのcom.FirstLast.appnameのようなものがありました。まあ、それは私をかなり長い間忙しかった。

9
sudo

プッシュ通知機能を有効にして、この問題を修正しました。

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

check out the image

9
error-404

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

9
jasonpurdy

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

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

3
Departamento B

私はこれを、たぶん非頻繁なユースケースで見つけました。 Xcode 6とiOS 8を使用しています。一連のまったく新しいアプリプロジェクトを作成し、同じバンドルIDを再利用しようとしています。これにより、ポータル側のセットアップをすべて繰り返す必要がなくなりました。これも単にサンドボックステスト用でした。

最初のアプリではセットアップと登録が正常に機能する一方で、デバイスからそのアプリを削除し、2番目のアプリに同じバンドルIDを設定し、そのアプリにPNを登録しようとすると、このエラー。

私の解決策は:

  1. 関連付けられたプロビジョニングプロファイルをデバイスから削除します。
  2. Xcodeから関連するプロビジョニングプロファイルを削除します。
  3. Xcodeを閉じる
  4. ダウンロードした.mobileprovisionファイルをダブルクリックして、Xcodeにインストールし直します
  5. プロジェクトを開いて展開します。

このアプローチは、以前の状態が何であれ、それを失ってしまうようであり、新しいアプリ/同じバンドルIDでPNに登録することができます。

2
KevinH

製品->クリーンでした。うまくいけば、それは他の誰かのためにそれを行います。

2
Louis Cremen

IOS 10でこのエラーが発生した場合は、次の手順を試してください。

1.プロジェクトをきれいにします。
2。および[ターゲット]-> [機能]-> [プッシュ通知]を確認します。オフの場合はオンにします。

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

2
bittu

新しいプロビジョニングプロファイルが機能しました。開発中の場合は、必ず開発者プロファイルを使用してください(アドホックを使用しないでください)。その後は元気で、なぜ古いものが正常に機能しなくなったのか分かりません。

0
user3344717