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

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

![APS.png](https://qiita-image-store.s3.amazonaws.com/0/34166/f1e563bf-b129-5bbe-ce2a-10891d909fdc.png)


## 対応

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

![スクリーンショット 2016-09-15 14.09.06.png](https://qiita-image-store.s3.amazonaws.com/0/34166/a99bcc14-f807-a4d1-66b2-bf95e49b0766.png)

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

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

## 問題

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

[Push Notification Entitlement Keys](
https://developer.apple.com/library/content/documentation/Miscellaneous/Reference/EntitlementKeyReference/Chapters/EnablingLocalAndPushNotifications.html)
> 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.

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

![スクリーンショット 2016-09-15 14.08.34.png](https://qiita-image-store.s3.amazonaws.com/0/34166/91c7548f-ba29-a216-0242-0c966dddc928.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](https://qiita-image-store.s3.amazonaws.com/0/34166/c3c5b6b9-fd9d-d3b1-9f93-111e09452af5.png)

![qiita1.png](https://qiita-image-store.s3.amazonaws.com/0/34166/71e349fd-5977-038a-0f9a-d2067fe5f821.png)

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

```xml: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>
```


```xml: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](https://qiita-image-store.s3.amazonaws.com/0/34166/f97fd7cb-717d-c93e-d642-708d69137ed3.png)

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