157

私は、プッシュ通知を受け取ることができるシンプルでシンプルな iOS アプリを作成するために非常に一生懸命努力してきました。私がこれを行う唯一の理由は、他のチームメンバーが使用する手順を確立することであり、Web 上の他の場所でそのような手順の最新の有効なバージョンを見つけることができませんでした. 私たちのショップは iOS 開発に関してかなり新しいもので、個人的には iOS 開発と Xcode の経験がまったくありません。Apple や他の場所からの数十のチュートリアル、記事、およびトラブルの投稿に出くわしましたが、もうすぐそこにいるような気がします...

これが私がしなければならないところです(私はXcode 4.3を使用していて、最初はiOS 5.1だけに展開しようとしていることに注意してください。最近、以前のバージョンのXcodeと比べていくつかのことが変更された可能性があることを収集していますが、繰り返しますが、私はすべてに慣れていませんこれ - そしてそれが完全に混乱し、複雑であることがわかります):

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

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

ここに画像の説明を入力

3) [概要と情報] > [カスタム iOS ターゲット プロパティ] の下にバンドル ID が適切に設定されています* (私は思いますか??)

4) デリゲートの didFinishLaunchingWithOptions で registerForRemoteNotificationTypes が呼び出されました

5) デリゲートに didRegisterForRemoteNotificationsWithDeviceToken と didFailToRegisterForRemoteNotificationsWithError があり、それぞれデバイス トークンまたはエラーをログに記録するように設定されています

6) [概要] で [資格を有効にする] をオンにしました。

7) 選択した権利ファイルのすぐ下にあるのは、Tinker6 (私のテスト プロジェクトの名前) です。これは、[権利を有効にする] をオンにしたときに自動的に生成されたものです。

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

ここに画像の説明を入力

更新しました

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>

/更新終了

デバイスでこれを実行しようとすると、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 の下のプロビジョニング ポータルには、次のようなものがあります (ここでも、番号とドメインをスクランブルします)。

ここに画像の説明を入力

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

ここに画像の説明を入力 ここに画像の説明を入力

これらが正しいかどうか、または一方または両方を 12355456A7.com.whatever.tinker に設定する必要があるかどうかはまったくわかりませんが、プロセスの早い段階でそれらを試してみましたが、成功しませんでした...

似たようなタイトルの投稿がたくさんあることに注意してください。ただし、ファイル名などに基づいてそれらはすべて古くなっているように見えます。実際、解決策はどれも役に立たないようです。私が提供したより詳細なレベルが質の高い回答を保証することを願っています. できるだけ早く報奨金を割り当てます。ソリューションにつながる質の高い回答を提供してくださった場合は、報奨金を授与し、Twitter やブログで回答を宣伝します。特に、「プロビジョニングなどを含む、シンプルなプッシュ通知アプリを機能させるために必要な正確な500 ステップを紹介します」という非常に優れた記事をブログなどに投稿する場合は特にそうです。

4

24 に答える 24

95

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

iOS プロビジョニング ポータル -> プロビジョニング -> 証明書 -> 編集 -> 編集を行う -> 新しいプロビジョニングをダウンロード

私のために働いた。これで、プッシュを使用できるようになりました。

于 2012-06-18T14:17:05.573 に答える
70

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

資格の欠落に関するエラーメッセージが引き続き表示されることを考えると、ビルド設定でコード署名オプションが正しくないと推測することしかできません。

「デバッグ」構成に正しいプロファイルが選択されていることを確認する必要があります。また、安全のために、「デバッグ」と「任意のiOSSDK」というラベルの付いた子ノードの両方に正しいプロファイルを選択していることを確認してください。

ここに画像の説明を入力してください

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

また、クリーンビルドを実行したり、デバイスからアプリを完全に削除したりすることも忘れないでください。これは、古い綿毛がぶら下がっていないことを確認するためだけのものです。

于 2012-06-14T14:20:07.397 に答える
67

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

ここに画像の説明を入力

于 2016-09-21T11:46:15.977 に答える
47

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

Xcode -> Preferences -> Choose Accounts Tab -> View Details -> Hit refresh button left -> Done.

再度ビルドすると、動作するはずです。

于 2014-08-10T11:02:05.770 に答える
19

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

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

まずはオーガナイザーへ。[デバイス] タブの [ライブラリ リストからプロファイルをプロビジョニング] で、使用しようとしているプロファイルを選択します。それを右クリックし、「ファインダーでプロファイルを表示」します。

ここに画像の説明を入力

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

ここに画像の説明を入力

Xcode > Log Navigator に移動します。「すべて」と「すべてのメッセージ」のフィルタを選択します。最後のフェーズ (ビルド ターゲット) で、「ProcessProductPackaging」というステップを探して展開します。プロビジョニング プロファイル名をメモします。エラーが発生している場合、それらは一致しないはずです。 ここに画像の説明を入力

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

お役に立てれば。

于 2012-11-29T02:48:26.960 に答える
18

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

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

于 2012-06-19T16:19:45.760 に答える
18

オーガナイザーで XCode から古いプロビジョニング プロファイルを削除します。

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

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

ビルド、実行、動作します。

やった。

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

于 2013-03-01T20:44:42.910 に答える
17

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

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

プッシュ通知機能がオンになっていることを確認します

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

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

ここに画像の説明を入力

于 2015-03-02T03:23:03.490 に答える
11

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

だから行く

[Xcode] > [設定] > [アカウント] > [詳細を表示] (アカウントを選択)

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

于 2014-03-26T20:20:19.183 に答える
8

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

アプリ固有のプロファイルを作成した後 (ダウンロードしてダブルクリックし、ビルド設定がそれを参照していることを確認した後)、APNS デバイス トークンを正常に受け取りました。

于 2013-06-24T19:36:18.733 に答える
7

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

最終的に私のために働いたのは

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

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

于 2012-11-29T22:45:43.643 に答える
4

プロビジョニング プロファイルについて言及されていますが、Apple プッシュ プロファイルについては言及されていません。

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

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

http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12

このチュートリアルのように完全に詳細な回答を書くには、私や他の誰かが何時間もかかるので、このチュートリアルが既に存在する場合は、賞金を主張したり主張したりするつもりはありません.

PS エンタイトルメントはもう必要ないと思います。これは古いものです。

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

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

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

于 2012-06-14T02:20:38.910 に答える
1

それを解決するのに何時間もかかりました。他の人が xcode 自体を使用している間にカスタム スクリプトを使用して署名とパックを行っている場合、アプリで何が終了したかを確認する方法は 1 つしかありません。資格をダンプします

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

と をチェックaps-environmentapplication-identifierます。

于 2014-04-09T21:51:44.027 に答える
1

上記の答えの多くは正しいです。ただし、これを処理する際に複数のエラーが発生する可能性があるようです。

私が抱えていたのは、App ID の大文字化の問題でした。何らかの理由で私のアプリ ID は大文字ではありませんでしたが、私のアプリは大文字でした。正しい大文字と小文字を使用してアプリ ID を再作成すると、すべてスムーズに機能しました。お役に立てれば。しかし、地獄のようにイライラします。

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

于 2013-05-08T06:09:55.673 に答える
1

このエラーは、証明書の有効期限が切れている場合に発生することがあります。

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

于 2015-06-23T15:22:15.880 に答える
0

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

Build SettingsタブのCode Signing Entitlementsで、.entitlementsファイルがすべてのセクションにリンクされていませんでした。Any SDKセクションに追加すると、エラーは解決されました。

ここに画像の説明を入力

于 2016-12-21T14:40:28.127 に答える
0

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 は次の場所にある aps-environment キーを含む正しい Xcent ファイルを生成しています。

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

Xcode の Log Navigator を使用して、Xcent ファイルが作成された場所を見つけることができます
。「ProcessProductPackaging」を探します。

残念ながら、これが問題を解決する唯一の方法です。
(そして、ようやくプッシュトークンを適切に取得できるようになりました)

別のよりエレガントなソリューションが利用可能かどうか疑問に思っています。
詳細については、SO の質問を参照してください:
Xcode 4.6 自動資格が機能しない - 「有効な aps-environment がありません」

于 2013-03-28T17:24:37.540 に答える