「Appの有効な”aps-environment”エンタイトルメント文字列が見つかりません」
この理由がわかるまで、相当はまりました。ググってみると、aps-environmentタグを確認するということと、プロビジョニングプロファイルを再度作り直してみるという記事が多かったですが、まったく解決せず、途方にくれました。
アプリのバンドル識別子に合わせる
結局、私の場合はプロビジョニングプロファイルのバンドル識別子があっていなかったということでした(ここにコメントされた方に感謝します)。
よくよく考えれば、複数のプロビジョニングプロファイルがあったとき、どれを適用するべきかと考えると、何かキーが必要だというのはわかりますね。
※APNs(Apple Push Notification service)を利用するには、実機へインストールするプロビジョニングプロファイルには、APNsを有効にしたプロビジョニングプロファイルが必要です。
※App IDを作成するときに、このバンドル識別子が正しく設定されていないとAPNsを有効にできません。
具体的には、iOS Provisioning PortalのApp IDsの設定画面で以下のところと、
xcodeのプロジェクトのInfoのところのバンドル識別子があっている必要があります。
私はここを直接書き換えましたが、元々${PRODUCT_NAME: rfc1034identifier}というマクロが設定されているので、本来はPRODUCT_NAMEを正しく設定しておく方がいいでしょう。
プロジェクトを作成するときに、バンドル識別子を意識して命名しておく方が無難です。
これで、device tokenも取得でき、push通知の試験もできました。
p12からpemへの変換
opensslコマンドを使って証明書の形式をp12からpemへ変換する必要があります。opensslコマンドは多機能で色々やり方はありますが、以下の一行のオプションで大丈夫だと思います。
# cert.p12(p12形式の証明書ファイル) # key.pem(pem形式のキー) # -nodes(パスフレーズを除く場合) openssl pkcs12 -in cert.p12 -out key.pem -nodes
key.pemをAPNsプロバイダで利用します。
iOS Provisioning Portalの画面も変わっていたりするので、プロビジョニングプロファイルの作成方法や、p12からpemへの変換など色んな情報があります。手順と意味を正しく理解し、整理しておかないと二度と同じことができなくなってしまいそうです。