web-dev-qa-db-ja.com

バンドル識別子とプッシュ証明書... aps-environmentエンタイトルメントエラー

xcodeはアプリケーションの識別子をどこから取得しますか?{PRODUCT_NAME}からのXCodeバンドル識別子のフォーマット を読み、さらに読み込みますが...

私はプッシュ通知を取得し、恐ろしいものを得ようとしています

「エラードメイン= NSCocoaErrorDomainコード= 3000「アプリケーションの有効な「aps-environment」資格文字列が見つかりません」UserInfo = 0x15b200 {NSLocalizedDescription =アプリケーションの有効な「aps-environment」資格文字列が見つかりません}」エラー。

以下を含むすべての手順を正しく実行したことを確信しています。

  • プロビジョニング証明書のかなり前にプッシュ証明書を作成した
  • 「Entitlements.plist」を作成しました
  • get-task-allowブール値を追加し、trueに設定します(アドホックリリース)

頭を悩ますことができないと思うのは、バンドル識別子だけです

プッシュ証明書は

XXXXXXXXXX.com.julianbaker.pwcnewsuk

PwCNewUK-Info.plistのバンドル識別子は、

com.julianbaker.${PRODUCT_NAME:rfc1034identifier}

手動で変更した場合

com.julianbaker.pwcnewsuk

アプリがPwCNewsUKとして認識されるため、UDID不一致エラーが表示されます

私がこれをグーグルで検索したとき、問題に関していくらかの混乱があるようですが、それらは一致しなければならないようです?

質問:

Bundle Indentiferは、Push証明書と一致させるために何をすべきか
XXXXXXXXXX.com.julianbaker.pwcnewsuk?

質問:

「aps-environment」エンタイトルメントをプロビジョニングプロファイルに追加する必要がありますか? (特に http://www.airplaysdk.com/node/3174 を参照)

IPhoneの開発を愛するが、それは時として大騒ぎになることがあります!

68
JulianB

私が取り組んでいるアプリケーションで開発環境から本番環境に移行したときに、この質問を見つけました。このプロセスでは、新しいプロファイル、新しいアプリIDなどを作成しました。アプリIDとプロファイルを作成しましたが、チームエージェントはプッシュ通知を構成する必要がありました。新しいプロファイルを使用してテストを再開しようとしたときに(アプリケーションがプッシュ通知用に構成された後)、「アプリケーションに有効な 'aps-environment'資格文字列が見つかりません」という問題に遭遇しました。その後、ドキュメントの小さな警告を読んだことを思い出しました。

「ポータルが新しいプロビジョニングプロファイルを生成するために、何らかの方法でプロファイルを変更する必要があります(たとえば、オプションを切り替えます)。プロファイルがそれほど「汚れ」ていない場合、Push資格なしでプロファイルが与えられます。 」

ソース: ローカルおよびプッシュ通知プログラミングガイド

私にとっては、プロビジョニングプロファイルを「ダーティ」にして再インストールするだけで、問題を解決することができました。ドキュメントによると、アプリがプッシュ通知用に構成される前にプロビジョニングプロファイルが作成されたため、これが必要でした。これはだれにも役立たないかもしれませんが、これはおそらくプロビジョニングプロファイルに手動で何かを追加する必要性を説明します(そして排除します)。

88
J.R. Armstrong

同じ「アプリケーションに有効な「aps-environment」資格文字列が見つかりません」という問題に遭遇しましたが、上記の解決策はうまくいきませんでした。

このエラーについて、または単に「aps-environment」というキーについても、非常に優れたドキュメントを見つけることができませんでした。

少しいじくり回した後、ここに私のための問題を解決したものがあります:

テキストエディターで開発プロビジョニング証明書「Appname.mobileprovision」を開き、「Entitlements」キーを探して、ここで見つかったすべての値を、コード署名資格設定で参照される資格ファイルに追加します。

内部にあるキー/値の例を次に示します。

<key>application-identifier</key>
<string>xyz.com.xyz.xyz</string>
<key>aps-environment</key>
<string>development</string>
<key>com.Apple.developer.ubiquity-container-identifiers</key>
<array>
<string>xyz.*</string>
</array>
<key>com.Apple.developer.ubiquity-kvstore-identifier</key>
<string>xyz.*</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
<string>xyz.*</string>
</array>

これらの値をすべてエンタイトルメントファイルに追加すると、アプリが正常にビルドされ、プッシュ通知の作業に戻ることができます。

これらの値がXCodeによって資格ファイルに自動的に追加されることになっているかどうかはわかりませんが、プロジェクトで私のために生成されていませんでした。

20
ozz

セットアップ:

Mac OS X 10.8 + Xcode 4.4

私の簡単な解決策:

  1. アプリIDのプッシュ通知を設定し、Xcodeにインポートした後、アドホックプロビジョニングプロファイルを再発行します。
  2. .xcodeprojフォルダーを見て(右クリック->パッケージの内容を表示)、xcuserdataフォルダーを削除します。
  3. それでおしまい ;)

その問題に関するいくつかのヒント:

アプリのプッシュ通知をアクティブにした後、突然アドホックファイルを作成できなくなりました。次のようなアプリをインストールしようとしたときに、iPhoneのコンソールログでエラーが発生しました。

Apr  1 20:56:10 unknown installd[384] <Error>: entitlement 'keychain-access-groups' has value not permitted by a provisioning profile
Apr  1 20:56:10 unknown installd[384] <Error>: entitlement 'get-task-allow' has value not permitted by a provisioning profile
Apr  1 20:56:10 unknown installd[384] <Error>: entitlement 'application-identifier' has value not permitted by a provisioning profile
Apr  1 20:56:10 unknown installd[384] <Error>: 2ff66000 verify_signer_identity: Could not copy validate signature: -402620394
Apr  1 20:56:11 unknown installd[384] <Error>: 2ff66000 preflight_application_install: Could not verify executable at /var/tmp/install_staging.44jV0O/foo_extracted/Payload/PersonalTrainer-Tester-iPhone.app
Apr  1 20:56:11 unknown com.Apple.itunesstored[392] <Notice>: MobileInstallationInstall: failed with -1
Apr  1 20:56:11 unknown installd[384] <Error>: 2ff66000 install_application: Could not preflight application install
Apr  1 20:56:11 unknown installd[384] <Error>: 2ff66000 handle_install: API failed
Apr  1 20:56:11 unknown installd[384] <Error>: 2ff66000 send_message: failed to send mach message of 71 bytes: 10000003
Apr  1 20:56:11 unknown installd[384] <Error>: 2ff66000 send_error: Could not send error response to client

いくつかの テクニカルノート があり、codesign -d --entitlements - <YourAppName>.appを使用して、Apple Push Notifications。の場合、codesignコマンドの出力生産または開発用に設定されたaps-environmentがありません。

私がこれまで知っていた限り、アドホックプロビジョニングプロファイルで署名されたアプリには、embedded.mobileprovisionフォルダー内に<YourAppName>.appフォルダーがあり、次のような特定の部分が含まれています。

<key>Entitlements</key>
<dict>
    <key>application-identifier</key>
    <string>ABCDEFGH.com.myappname.tester</string>
    <key>aps-environment</key>
    <string>production</string>
    <key>get-task-allow</key>
    <false/>
    <key>keychain-access-groups</key>
    <array>
        <string>ABCDEFGH.*</string>
    </array>
</dict>

Codesignを使用した後、<YourAppName>.appの実際のバイナリにもXMLが含まれていることがわかりました。これは、私のembedded.mobileprovisionファイルとは非常に異なることを示しています。

<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>application-identifier</key>
    <string>ABCDEFGH.com.myappname.tester</string>
    <key>get-task-allow</key>
    <true/>
    <key>keychain-access-groups</key>
    <array>
        <string>ABCDEFGH.com.myappname.tester</string>
    </array>
</dict>
</plist>

これが私たち全員が経験しているエラーメッセージの原因だと思います。 (このエラーは、いくつかの異なるルートとstackoverflowの他の投稿が示唆している可能性があります)

The executable was signed with invalid entitlements.
The entitlements specified in your application's Code Signing Entitlements
file do not match those specified in your provisioning profile. (0xE8008016).

私の推測では、Xcodeにバグがあり、plistの設定がスキームで更新されないため、最終的に間違ったプロビジョニングプロファイルでアプリが署名されます。したがって、xcuserdataフォルダーを削除すると、すべてのスキームが削除されます。したがって、Xcodeは次回、適切な設定でそれらを再作成し、再び満足します。

6
vinzenzweber

基本的に答えは、他の誰もが言うのと同じあいまいです

  • 「Entitlements.plist」が追加されていることを確認してください(新しいファイル/コード署名/資格)
  • Entitlements.plistに「get-task-allow」(ブールオフ)を追加します
  • 「aps-environment」「production」のペアをEntitlements.plistに追加します-この最後の手順は不要な場合がありますが、機能する直前に実行した手順の1つでした。
  • IPhone/iPod(設定/全般)から古いmobileprovisionファイルを削除します。
  • Xcode Organizerから古いmobileprovisionファイルを削除します
  • IPhone/iPodからアプリを削除する
  • XCodeを終了します
  • プロビジョニング証明書の新しいコピーをダウンロードする
  • テキストエディタで証明書の「aps-environment」「production」ペアを確認します
  • XCodeを開始
  • XCode Docアイコンにドラッグして、新鮮なmobileprovisionファイルを追加します
  • ターゲット情報で正しい証明書を再割り当て/割り当てていることを確認してください:コード署名:コード署名ID
  • ビルド結果が正しいプロファイルを使用し、正しく署名されていることを確認するには、ビルド結果を再確認してください

動作するまでこれらの手順を静かに繰り返し、さまざまな組み合わせで約5回実行しました。また、開発からアドホックに切り替えました。明らかに必要ではありませんが、新しいmobileprovisionファイルが保証されました。

5
JulianB

XCode4を使用して、同じ「アプリケーションに有効な 'aps-environment'資格文字列が見つかりません」を受信すると、次のことを行う必要がありました。

  • オーガナイザーのライブラリ+デバイスパネルの両方から古いプロビジョニングプロファイルを削除する
  • 開発者ポータルWebサイトからAPN devを有効にして新しいプロファイルを再生成します
  • オーガナイザーのライブラリとデバイスの両方のパネルに新しいプロファイルが追加されていることを確認してください
  • デバイスからアプリを手動で削除します(揺れるまで保持してXを押します)。
  • CMD + OPT + SHIFT + K(ビルドフォルダーのクリーンアップ)およびCMD + SHIFT + K(クリーンアップ)
  • [プロジェクト]> [ビルド設定]> [コード署名]で適切なプロファイルを設定します
  • 「対象」>「要約」で「資格を使用」がチェックされていないことを確認します
5
Max Ogden

[プロジェクト]-> [ビルド設定]-> [コード署名]で、正しいプロビジョニングプロファイル(プッシュが有効になっているプロファイル)を選択していることを確認します。

それを機能させるために変更する必要があるのはそれだけでした。

3
Steffo

上記のどれも私にとってはうまくいきませんでした!

  1. すべて削除プロビジョニングプロファイル in Xcode Organizer
  2. すべて削除開発者証明書 in キーチェーン
  3. すべて削除プロビジョニングプロファイル in iPhoneデバイス
  4. iOSプロビジョニングポータルで、-Xcodeによって自動的に作成された開発プロビジョニングプロファイルを削除します
  5. 正しい(証明書/ AppID /デバイス)の組み合わせを割り当てることにより、新しいプロビジョニングプロファイルを作成します
  6. 新しいプロビジョニングプロファイルをダウンロードします
  7. 新しいProvisioning ProfileXcode Organizerにインポートします
  8. CMD + Option + Shift + K
  9. CMD + Shift + K
  10. CMD + R
  11. 完全に :)
3
DeZigny

プロビジョニングプロファイルで正しい方法でアプリを使用していることを確認してください。

つまり、Distributionのプッシュ通知のみをアプリで有効にしていて、XCodeを使用してビルド経由でプッシュ通知を機能させようとすると、これは機能しません。

この問題に遭遇し、App IDの開発のプッシュ通知を有効にし、開発プロビジョニングプロファイルを使用することで、エラーが発生せず、プッシュ通知を取得するかどうかを尋ねる正しいアラートビューが表示されました。

2
Will

10.8 Xcode 4.4の解決策は、appname.entitlementsファイル

DataProtectionClassキーの値がNSFileProtectionCompleteである場合は、削除してください!

このキーを削除すると、デバイス上のXcodeからアプリをテストできます(シミュレーションに影響はありませんでした)。

1
Flori

同じ問題がありました。私にとっては、修正はこのようなものでした:

  1. オーガナイザーからプロビジョニングプロファイルを削除して再読み込みしました。
  2. プロジェクト設定->コード署名で名前付きプロビジョニングプロファイルを選択しました。どういうわけか、blabla。* IDを使用したかったのです。

APN対応アプリケーションを実行しようとしても、ワイルドカードプロファイル([prefix]。*)は機能しません。APN対応プロファイルを指定する必要があります。

1
Hersker

私の問題はこれでした。プッシュ通知を構成したアプリを作成し、アプリデリゲートでプッシュ通知に登録しました:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

しかし、アプリをリリースする前に、他の開発者ポータルで新しいプロビジョニングプロファイルを作成する必要がありました。正しいプロビジョニングを設定したアプリケーションターゲットで、新しいアプリID、開発と配布用の新しいプロビジョニング、ダウンロードした新しいプロビジョニングを作成しました。また、バンドル識別子を変更しました。しかし、私はそのエラーを受け取っていました。

問題は、新しいAppIdがプッシュ通知用に構成されていないが、呼び出していることでした

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

エラーを作成していました。プッシュ通知を構成したときにエラーが再び表示されませんでした。

0
Josip B.

選択が正しいことを確認してください。プロビジョニングプロファイル。チームプロビジョニングプロファイルを使用しようとしていることがわかりました。(アプリケーション識別子:*)リストのさらに下には、アプリ用の正しいものがありました。

0
MadNik

数時間後にこれを理解したばかりなので、JulianBが言ったことに加えて、

  • アプリケーションアイコンがあることを確認してください。あなたはおそらく1つを持っていますが、アイコンバージョン間でプッシュを追加したことがあります。私はさまざまなことを試してみましたが、最終的にはそれがすべてでしたので、証明書や署名設定の問題でさえないかもしれません。
  • 私はまた、破損した画像ファイルを読んだことが原因かもしれません
  • entitlements.plistにaps-environmentキーを追加/表示しませんでした
  • ビルドする前にすべてのターゲットをきれいにします
0
katbyte

私の解決策は、削除して再度作成することでした開発プロビジョニングプロファイル「無効」としてリストされている-有効期限が切れておらず、更新も失敗しました(Xcode 4.3.2およびiOS 5.1)

0
JOM

enter image description here

プロファイルを正しくして、これが私のために働くようにしてください。このヘルプを願っています。

0
jxdwinter

私の場合、このエラーの解決策は、証明書を何時間もいじってから簡単になりました...

プロジェクト構成のCapabilitiesタブで、環境ファイルを生成するためにPush Notificationフラグを有効にする必要がありました。

macOS Sierra 10.12-Xcode 8.1

enter image description here

0
RWIL

私にとっては、バンドル識別子をランダムなものに変更した後に機能しました。署名エラーが実際に表示されることを確認します(オーガナイザーとデバイスからすべてのプロビジョニングプロファイルを削除し、クリーンビルドCMD + OPT + SHFT + Kその後CMS + SHFT + K その後 CMD + R)そして、バンドル識別子を適切なものに戻します。

0
Samyak Bhuta

私はこの問題を抱えていました、シナリオは次のとおりでした:

プッシュ通知サポートなしでアプリIDをセットアップしました。 Xcode 5.1 + iOS 7.1を使用しています

後で、アプリIDを編集して、開発および運用でプッシュ通知を追加しました。

両方のAPNs証明書を作成しました。

Xcodeに接続されたデバイスを使用してPNをテストすると、すべてが正常に機能します。アプリを本番環境にリリースすると、問題が発生します。

"Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' entitlement string
 found for application" UserInfo=0x15b200 {NSLocalizedDescription=no valid     
'apsenvironment' entitlement string found for application}" error.

私のために働いた

  1. 開発および配布用のプロビジョニングプロファイルを削除します(Xcodeおよび開発者ポータル)。
  2. アプリID(開発者ポータル)を削除します。
  3. 開発および本番用のプッシュ通知サポートを使用して、新しいアプリIDを作成します。
  4. NEW App IDを使用して新しいプロビジョニングプロファイルを作成します。
  5. Xcodeにインストールします。
  6. 開発および配布リリースでテストします。
0