Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
137
Help us understand the problem. What is going on with this article?
@Takumi_Mori

Xcode8からはちゃんとAPNsのEntitlementを設定しましょうという問題

More than 3 years have passed since last update.

Xcode8でビルドして提出したところ、Appleから以下のようなメールが届きました。
Privacy周りと言い、諸々内部のAPIを自動検索してレビューの手間を簡略化しているようですね。

APS.png

対応

APNsのAPIが含まれてるのに、Push NotificationのEntitlementが設定されてないよってことですね。
これに関しては、普通にCapabilitiesタブのPush NotificationsをONにしてやるだけで自動的にAppName.entitlementsファイルが作成されます。

スクリーンショット 2016-09-15 14.09.06.png

そうすると、以下のような内容のファイルが作成されます。

appName.entitlements
<key>aps-environment</key>
<string>development</string>

問題

とはいえ作成したいのは本番向けアプリなので、以下のApple公式サイトにもあるようにprovisioning portalで作成したファイルに合わせてproductionにすると・・・

Push Notification Entitlement Keys

The entitlement key is different for iOS than it is for OS X. On either platform, however, the provisioning portal assigns a value of development or production to the key, depending only on which activity you are creating the provisioning profile for.

appName.entitlements
<key>aps-environment</key>
<string>production</string>

スクリーンショット 2016-09-15 14.08.34.png

なぜかエラーが出てるからFix issueしろとか言われます。
※ちなみに、これを押すとproductionに書き換えた箇所がdevelopmentに戻ります。

GM版の問題かな? と思っていましたが、正式リリースしたXcode8でも依然起こっています。
とりあえずdevelopmentのままでもarchiveビルドしたものでdeviceTokenは普通に取れるようですが・・・
productionに書き換えても普通にdeviceTokenは取れるので申請してみましたが、Appleからエラーの返信メールは来ないようです。
もしかしたら現状は、ここの文字列をちゃんと見ていない可能性も。

対策

コメントで @sawat1203 さんに教えていただきました。
Code Signingと一致したentitlementsをBuild Settingsで設定してやれば警告が取れるようです。
どうも自動生成されたファイルは選択したファイルだけがTargetに設定されていて変更できなかったので新規作成します。

ファイル作成

適当にproperty Listを適当な名前で作ります。
私の作業環境、ターゲット多いんですよね・・・。

スクリーンショット 2016-09-16 15.27.27.png

qiita1.png

内容の変更

右クリックして Open AS > Source Codeを表示して、既存のものをコピペします。

development.entitlements
<?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>aps-environment</key>
        <string>development</string>
    </dict>
</plist>
production.entitlements
<?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>aps-environment</key>
        <string>production</string>
    </dict>
</plist>

ターゲットの変更

Build Settingsから Code Signing Entitlementsを検索し、対応したファイルにターゲットを切り替えます。
私の環境ではRelease / adHoc ではreleaseビルドを行うので、production.entitlementsを作成して設定しています。

エラーの確認

エラーがなくなりました。
スクリーンショット 2016-09-16 15.29.51.png

※ 一応、Fix issueが出続ける場合でも1回ボタン押してやれば特に変更はされないのにエラーがでなくなります。

137
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Takumi_Mori
iOSプログラマです。稀にAndroidとかもやります。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
137
Help us understand the problem. What is going on with this article?