Xcode8でビルドして提出したところ、Appleから以下のようなメールが届きました。
Privacy周りと言い、諸々内部のAPIを自動検索してレビューの手間を簡略化しているようですね。
対応
APNsのAPIが含まれてるのに、Push NotificationのEntitlementが設定されてないよってことですね。
これに関しては、普通にCapabilities
タブのPush Notifications
をONにしてやるだけで自動的に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.
<key>aps-environment</key>
<string>production</string>
なぜかエラーが出てるからFix issue
しろとか言われます。
※ちなみに、これを押すとproduction
に書き換えた箇所がdevelopment
に戻ります。
GM版の問題かな? と思っていましたが、正式リリースしたXcode8でも依然起こっています。
とりあえずdevelopment
のままでもarchiveビルドしたものでdeviceTokenは普通に取れるようですが・・・
production
に書き換えても普通にdeviceTokenは取れるので申請してみましたが、Appleからエラーの返信メールは来ないようです。
もしかしたら現状は、ここの文字列をちゃんと見ていない可能性も。
対策
コメントで @sawat1203 さんに教えていただきました。
Code Signingと一致したentitlementsをBuild Settings
で設定してやれば警告が取れるようです。
どうも自動生成されたファイルは選択したファイルだけがTargetに設定されていて変更できなかったので新規作成します。
ファイル作成
適当にproperty List
を適当な名前で作ります。
私の作業環境、ターゲット多いんですよね・・・。
内容の変更
右クリックして Open AS > Source Code
を表示して、既存のものをコピペします。
<?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>
<?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
を作成して設定しています。
エラーの確認
※ 一応、Fix issueが出続ける場合でも1回ボタン押してやれば特に変更はされないのにエラーがでなくなります。