web-dev-qa-db-ja.com

Xcode 4.3で「アプリケーションに有効な 'aps-environment'エンタイトルメント文字列が見つかりません」という修正方法は?

私はプッシュ通知を受け取ることができるシンプルでシンプルなiOSアプリを作成するために非常に努力しています。これを行う唯一の理由は、他の一部のチームメンバーが使用する手順を確立することであり、そのような手順の最新バージョンの作業バージョンをWeb上の他の場所で見つけることができなかったことです。私たちの店はiOSデベロッパにとってはかなり新しいものです。私は個人的にはiOSデベロッパとXcodeにはまったく慣れていません。私は何十ものチュートリアル、記事、そしてAppleや他の場所からのトラブル投稿を目の当たりにしました。

ここで私がやらなければならないのはここにある(私はXcode 4.3を使っていて、最初はiOS 5.1にだけデプロイしようとしている。これ - そしてそれを完全に混乱させ、複雑にしていることがわかります):

1)プッシュが有効になっているプロビジョニングプロファイルがiPhoneにあります。

2)私のテスト用Xcodeプロジェクトでは、そのプロビジョニングプロファイルを署名IDとして選択しました([ビルド設定]> [コード署名])。

enter image description here

3)Summary and Info> Custom iOS Target PropertiesでバンドルIDを正しく設定しています*(私はどう思いますか?)

4)デリゲートのdidFinishLaunchingWithOptionsでregisterForRemoteNotificationTypesが呼び出されています。

5)デリゲートにdidRegisterForRemoteNotificationsWithDeviceTokenおよびdidFailToRegisterForRemoteNotificationsWithErrorがあります。それぞれデバイストークンまたはエラーを記録するように設定しました。

6)[概要]で[エンタイトルメントを有効にする]をチェックしました。

7)そのすぐ下の選択されたEntitlements FileはTinker6(私のテストプロジェクトの名前)です。これはEnable Entitlementsをチェックしたときに自動的に生成されました。

8)Tinker6.entitlementsファイルには、次のものがあります(私が集めたものは、Web上のいくつかの異なる投稿に基づいて正しいのですが、Apple自体から決定的なものは見つかりません)。

enter image description here

更新

9)また、私は資格ファイルなしで全部を試してみました、そして本質的に同じ結果を得ます。

10)私のmobileprovisionファイルの内容には適切に資格が含まれています(私は番号とドメインをスクランブルしましたが、構造的には同じです)。

<key>application-identifier</key>
<string>12355456A7.com.whatever.tinker</string>
<key>aps-environment</key>
<string>development</string>
<key>get-task-allow</key>
<true/>
<key>keychain-access-groups</key>
<array>
    <string>12355456A7.*</string>
</array>

/ end update

私のデバイスでこれを実行しようとすると、Xcode出力に次のエラーが表示されます。

2012-06-11 12:45:23.762 Tinker6[13332:707] Failed to get token, error: 
Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' 
entitlement string found for application" UserInfo=0x24a3b0 
{NSLocalizedDescription=no valid 'aps-environment' entitlement string 
found for application}

私はget-task-allowをNO、aps-environmentをproduction、4つすべての可能な組み合わせ、同じことに設定してみました。

どうすればこれを乗り越えることができますか?これに関する決定的な文書はどこにありますか?

- さらに背景が続く -

*バンドルIDに関しては、プロビジョニングプロファイルのアプリケーションIDとプロファイルIDに関連してどのように設定する必要があるのか​​、まだ明確になっていません。 App Idsの下のプロビジョニングポータルで、私はこれを持っています(これもまた、番号とドメインをスクランブルしました)。

enter image description here

そして、2つの場所のバンドルIDが設定されています。

enter image description hereenter image description here

私はこれらが正しいのか、あるいはどちらか一方または両方が12355456A7.com.whatever.tinkerに設定されるべきかどうかについてはまったく確信が持てません。

タイトルが似ている記事はたくさんありますが、それらはすべてファイル名などに基づいて古くなっているように思われます。そのため、どの解決策も役に立ちません。私が与えたより高いレベルの詳細が質の高い対応を保証することを願っています。私はたぶんできるだけ早く賞金を割り当てます、そしてあなたが解決策につながる高品質の答えを与えるならば私はあなたに賞金を授与します、そしてあなたの答えをTwitterと私のブログを通して促進します。特にあなたが本当に良い記事をクロスポスト投稿するなら、「ここに正確な500のステップがあり、プロビジョニングやその他のものを含む簡単なプッシュ通知アプリを動かす必要があります」記事あなたのブログやその他何でも。

151
jwl

答えは次のとおりです。最初からやり直して、同じことをすべて行いますが、新しいプロビジョニングプロファイルを作成してインストールします。それはうまくいった。すべての詳細(モバイル提供の資格)を調べると、正確にここで私の質問のすべてと同じように見えます。しかし今はうまくいきます。アップル:ワット?

もちろん、これを行うのは明らかでしたifプロビジョニングプロファイルを削除することは可能でした。しかし、それは不可能なので、私は私たちのチームをたくさんのテストプロファイルで煩雑にしたくありませんでした。それでも、やっと忍耐力を失い、とにかく試してみたところ、うまくいった。 Whatev。

18
jwl

app IDをPush用に設定する前にプロビジョニングプロファイルを作成した場合は、プロビジョニングプロファイルを再生成してみてください。

iOSプロビジョニングポータル - >プロビジョニング - >あなたの証明書 - >編集 - >編集 - >新しいプロビジョニングのダウンロード

私のために働きました。今私はプッシュを使用することができます。

94
elp

まず第一に、プロビジョニングプロファイルに存在しないカスタムのキーと値のペアを追加しない限り、資格ファイルは必要ありません。アプリがビルドされると、プロビジョニングプロファイルからの資格がアプリにコピーされます。

まだ資格がないというエラーメッセージが表示されることを考えると、ビルド設定でコード署名オプションが正しくないと想定することしかできません。

"Debug"設定に正しいプロファイルが選択されていることを確認する必要があります。安全を期すために、 "Debug"と "Any iOS SDK"というラベルの付いた子ノードの両方に正しいプロファイルを選択してください。

enter image description here

このスクリーンショットは選択された「自動開発者」プロファイルを示していますが、テスト目的のためだけに、ドロップダウンから必要なプロビジョニングプロファイルを選択してください。 Xcodeがあなたが望むものとは異なるプロファイルを自動的に選択している可能性があります。

また、クリーンビルドを実行したり、デバイスからアプリを完全に削除したりするなどしてください。これは、古くなっている毛羽立ちがないようにするためです。

68
Mike Weller

私はXcode 8でこの問題に直面しました。ターゲット - >機能 - >プッシュ通知を有効にする必要があります。スクリーンショットを確認してください。

enter image description here

63
DipakSonara

最も簡単な方法は、Xcodeのアカウントからこれを行うことです。

Xcode - > [設定] - > [アカウント]タブを選択 - > [詳細の表示] - >左下の[更新ボタンを押す] - > [完了]をクリックします。

もう一度ビルドすればうまくいくはずです。

47
ooxio

わかりました、私は前に問題に直面しました。プッシュ通知にはサーバーサイドの実装が必要なので、私にとってはプロファイルの再作成はできませんでした。だから私は新しいプロビジョニングプロファイルを作成せずにこのソリューションを見つけました。

Xcodeは正しいプロビジョニングプロファイルを正しく選択していませんが、正しく選択しています。

まず主催者に行きます。 [デバイス]タブの[ライブラリからプロビジョニングプロファイル]リストで、使用しようとしている目的のプロファイルを選択します。それを右クリックしてから「Finderでプロファイルを表示」をクリックします。

enter image description here

開いたFinderウィンドウで正しいプロファイルが選択されます。名前をメモしてください。

enter image description here

それではXcode> Log Navigatorに行ってください。 「すべて」と「すべてのメッセージ」のフィルタを選択します。最後の段階(Build Target)で、「ProcessProductPackaging」というステップを探して展開します。プロビジョニングプロファイル名を書き留めます。エラーがある場合、それらは一致しません。 enter image description here

これで、Opened Finderウィンドウで、Xcodeが使用している不正なプロビジョニングプロファイルを削除します。もう一度ビルドしてください。エラーを解決する必要があります。そうでなければそれを削除するために別の不正なプロファイルを見つけるためにプロセスを繰り返します。

お役に立てれば。

19
Max

OrganizerのXCodeから古いプロビジョニングプロファイルを削除します。

次に、(プッシュを有効にした後で)iOSプロビジョニングポータルで同じバンドルIDの新しいプロビジョニングプロファイルを生成します。

新しいプロビジョニングプロファイルをXCodeにインポートし、アプリのビルド設定で設定します。

構築、実行、動作します。

やった。

エラーから成功まで10分かかりました。

18
user1006117

XCode 6.1.1、および複数のApple開発者アカウント

もうすでにかなり包括的な組み合わせに対するもう1つの答え:私は今日この問題に遭遇しましたが、今回は複数のAppleアカウントを持っていたためです。最初に2番目の開発者アカウントをXCode>設定>アカウント> +に追加する必要がありました。

プッシュ通知機能がオンになっていることを確認してください。

次に、アプリ内でアプリ内購入を明示的に有効にする必要がありました(以前はこれを行う必要はありませんでした)。 XCode>(アプリケーションウィンドウ)> Targets> Capabilities> In-App Purchase ON(そしてこの段階で正しい証明書を選択するオプションが与えられた)

Finderでプッシュ対応証明書をダブルクリックして追加したことに注意してください。

enter image description here

16
kris

(Xcode 5)さて、1時間を費やした後、私は自分の問題を解決しました。 Xcode 5でプロビジョニングファイルを再生成した場合でも、手動でアカウントを更新する必要があります。 [オーガナイザー]タブでプロビジョニングファイルを変更しただけでは動作しませんでした。Xcodeは古いプロビジョニングファイルでビルドを続けました。

だから行きます

Xcode>環境設定>アカウント>詳細の表示(アカウントを選択)

その後、プロビジョニングファイルを更新します。

11

私の問題は、単にXcode管理のワイルドカードプロビジョニングプロファイルに署名していたことです。

アプリ固有のプロファイルを作成し(それをダウンロードし、それをダブルクリックし、そしてそれが私のBuild Settingsに確実に参照されるようにした)、APNSデバイストークンを受け取ることに成功した。

7
Graham Perks

私が同じ問題を抱えていたのは他のみんなで、上記のすべてのトリックを試してみました、何もうまくいきませんでした。私も削除して、別の開発者アカウントで新しく始めました。

最後に私のために働いたのは

  1. 上記のようにしてAPP IDを作成します
  2. その後、プロビジョニングプロファイルを作成します。
  3. プロビジョニングの開発セクションでチームワイルドカードプロファイル(xcode oneによって管理されている)を使用しないでください。プッシュ通知をアクティブにしたアプリIDを使用して別のIDを作成する必要があります。このように開発すると、プッシュ通知機能が組み込まれます。

ワイルドカードアプリで有効にできるかどうかはわかりませんが、少なくとも12種類の提案を試して数日を失った後で、これが誰かに役立つことを願っています

6
Michael Ellams

あなたはプロビジョニングプロファイルについて言及していますが、Apple Push Profileについては言及していません。

プッシュを使用するには、プッシュプロファイルが必要です(開発用とリリース用の2つあります)。それを作成した後は、それが関連する証明書を含んでいることを確認する必要があります(下記の編集セクションを参照)。

これは、すべての手順を説明する優れたチュートリアルです。

http://www.raywenderlich.com/3443/Apple-Push-notification-services-tutorial-part-12

このチュートリアルのように徹底的に詳細な答えを書くのは私、または他の誰かに何時間もかかるので、このチュートリアルが既に存在する場合は、その恩恵を試みるつもりはないし、主張することもしません。

P.S私はあなたがもはや資格を必要としないと信じています、これはレガシーなことです。

編集:あなたはまた、あなたがデバイス上で必要なプロファイルを持っていることを確認する必要があります - 設定、一般的なプロファイルに移動し、あなたのプロファイルがリストされていることを確認、特にもちろんプッシュプロファイル。これはXCodeのOrganizerセクションからも確認できます。 OrganizerにはProvision Profilesと書かれた2つのセクションがあります - Libraryの左上にあります(これはあなたが署名するのに使うXCodeのプロファイルです)。また、接続されているデバイスのProvisioning Profilesと呼ばれるセクションがあります。ハンドセットにインストールされているプロファイルです。それらをハンドセットにインストールしていない場合は、プロビジョニングポータルのWebサイトからダウンロードして、オーガナイザウィンドウの下部にある[追加]ボタンをクリックします。

プロビジョニングポータルでは、Apple Push Profileに証明書が含まれていることも確認する必要があります。 - 左側のメニューのProvisioningをクリックします - プロファイルのリストが表示されます。ApplePushプロファイルを編集する場合に選択します。プロジェクトにある開発者やテスターなどのリストを含む証明書セクションで、それらのチェックボックスがオンになっていることを確認します。 - デバイスセクションも表示されるので、テストしているデバイスが追加されていることを確認してください。

XCodeまたはデバイスに古いプロファイルがある場合はそれらを削除し、プロビジョニングポータルからすべての新しいプロファイルをダウンロード/更新/インストールします。

3
Gruntcakes

私と同じ問題に遭遇しました。私の場合、問題は私の製品名($ TARGET_NAME)がAppleから提供された証明書に提示されているのと同じ方法で大文字になっていないことでした。たとえば、私はcom.companyid.APNDemoを持っていましたが、Apple証明書はcom.companyid.apndemoを使用していました。

ターゲットを小文字に変更してもうまくいきました。注:私が手がかりにしたのは、[ビルド設定]のコード署名設定がデフォルトの開発者証明書に設定されていたことです。 APNTestプロビジョニングプロファイルではありません。

2
David Carrico

プロビジョニングプロファイル( https://developer.Apple.com/account/ios/profile/ )にiOSディストリビューションプロファイルがあることを確認する必要があります。

XCodeからApp Storeにアップロードするときは、資格にaps-environmentがあることを確認してください。そうでない場合は、アカウントの表示 - >詳細の表示 - >すべてダウンロードからそれらをダウンロードしてください。

1
Nadav B

上記の答えの多くは正しいです。ただし、これを処理するときに考えられるエラーは複数あるようです。

私が持っていたのは私のApp IDの大文字と小文字の問題でした。何らかの理由で私のアプリIDは大文字ではありませんでしたが、私のアプリはそうでした。アプリIDを正しい大文字で再作成すると、すべてうまくいきました。お役に立てれば。地獄としてもイライラする。

P.Sそれでも機能しない場合は、「edit」を使用してコード署名IDフィールドを手動で編集してみてください。 2行目を正しいプロビジョニングプロファイル名の名前に変更します。

1
matrinox

暫定ファイルを再作成することで、私のすべての問題が解決しました。

1
Faris Muhammed

このエラーは証明書が期限切れになったときに発生する可能性があります。

解決策は証明書を更新し、それを使ってアプリケーションに署名することです。

1
vahotm

解決するのに何時間もかかりました。他の人がxcode自体を使用している間に誰かが署名してパックするためにカスタムスクリプトを使用していることを考えると、あなたのアプリで何が終わったのかをチェックする唯一の方法があります。資格をダンプします

codesign --display --entitlements :- path/to/MyApp.app

そしてaps-environmentapplication-identifierをチェックしてください。

1
dwery

私は同様の問題を抱えていました。私はさまざまな理由でXCode 7と8の間でバウンスしてきました。ビルドに8を使用したら、8を使用する必要があります。私は単にXcode 8を使用し、上で提案された変更のいくつかを適用しました、そしてそれはうまくいきました。

1
Brent Brookler

AppID /プロファイルを削除して再生成する前に、ライブラリとデバイスに同じ(そして正しい)プロファイルがインストールされていることを確認してください。

新しいコンピュータに移行した後、このエラーが発生し始めました。移行前のプッシュは正しく機能していました。

問題は、(当たり前)私がプロファイルを新しいマシンのXcodeライブラリにインポートしていなかったことです(Organizer/DevicesのLibrary - > Provisioning Profilesの下)。

紛らわしいのは、DEVICEはすでに正しいプロファイルを持っていて、ビルド設定で期待通りに表示されていたので、そこにはすべて正しく表示されていました。 ?

0
Rodin Lyasoff

Xcode 4.6の「自動」エンタイトルメントにはちょっと変わったように思われます。

各SDKのEntitlement.plistファイルは次の場所にあります。

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/Entitlements.plist

私が思い付いた回避策は、このファイルを編集して、次のようにして手動でこっそりaps-environmentキーを追加することでした。

<?xml version="1.0" encoding="UTF-8"?>
<!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>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    <key>aps-environment</key>
    <string>development</string>
    <key>keychain-access-groups</key>
    <array>
        <string>$(AppIdentifierPrefix)$(CFBundleIdentifier)</string>
    </array>
</dict>
</plist>

次に、Xcodeは正しいXcentファイルを生成します。このファイルには、aps-environmentキーが含まれています。

/Users/mySelf/Library/Developer/Xcode/DerivedData/myApp-buauvgusocvjyjcwdtpewdzycfmc/Build/Intermediates/myApp.build/Debug-iphoneos/myApp.build/myApp.xcent

XcodeのLog Navigatorを使って、Xcentファイルがどこに作成されたかを見つけることができます。
"ProcessProductPackaging"を探します。

残念ながら、これが私が見つけた唯一の方法ですが問題を解決します
(そして最後にPushトークンを正しく取得できるようになりました)

他のもっと洗練された解決策が利用可能かどうか疑問に思うだけです。
詳細については、私のSO質問を参照してください。
Xcode 4.6自動エンタイトルメントが機能しない - "no valid aps-environment"

0
AmitP

私はここにリストされているすべての答えを試したが、だれも私の問題を解決しなかった。私の場合、このエラーはAppidの作成における私の愚かなミスによるものです。 Explicit App IDを使用する代わりにWildcard App IDを使用したため、問題が発生しました。

アプリケーションにリモート通知(プッシュ通知)を受信させたい場合は、 Explicit App IDのようにcom.tutsplus.Pushを使用する必要があります。 com.tutsplus。*

スクリーンショットを見つけてください、 enter image description here

0
arunjos007

これは私にとってそれを修正したものでした。 (私はすでに機能のオン/オフの切り替え、プロビジョニングプロファイルの再作成などを試みていました)。

ビルド設定タブのコード署名資格で、私の - 。entitlementsファイルはすべてのセクションにリンクされていませんでした。 Any SDKセクションに追加すると、エラーは解決しました。

enter image description here

0
mogile_oli