LoginSignup
136

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-09-15

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回ボタン押してやれば特に変更はされないのにエラーがでなくなります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
136