What's New in Xcode App Signingまとめ

WWDCの[What's New in Xcode App Signing](https://developer.apple.com/videos/play/wwdc2016/401/)、まとめてみました。

## 内容
What's New in Xcode App Signingの内容は以下の通りでした。

- Fundamentals
  - 02:30 - 07:30
  - どのようにしてXcodeがSigningを行うかを解説 
- Signing Certificate per Mac
  - 07:30 - 10:00
  - developmentのcertificateについて、PCごとにインストールするようになった点を説明
- Signing in Xcode
  - 10:00 - 29:00
  - Xcode8から、Signingがどう変化し、ワークフローがどう変化するかを解説
- Best Practices
  - 29:00 - 終わりまで

## Fundamentals
Fundamentalsは、アプリのSigningに必要なCertificates、Provisioning Profile、Entitlementについて早足での解説でした。
まずは、それぞれのファイルの役割について解説し、
<img width="1197" alt="Screen Shot 2016-06-20 at 00.28.17.png" src="https://qiita-image-store.s3.amazonaws.com/0/33395/d9ecc50f-5304-4ec3-4eca-a1ad4698b02b.png">
その後以下の画像のように、実際のSigningの流れについて解説をしていました。
<img width="1195" alt="Screen Shot 2016-06-20 at 00.28.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/33395/b4bb4218-3225-18e7-255a-6f2751abe470.png">

## Signing Certificate per Mac
Signing Certificate per Macは、「開発用p12ファイルを開発マシン間でやり取りする」、という複数台のPCで開発を行う際の問題に対する解決策として、Signing Certificate per Macという仕組みを導入した、という話でした。
<img width="1196" alt="Screen Shot 2016-06-20 at 00.33.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/33395/15764670-e561-280c-396a-665d22747f8a.png">
Signing Certificate per Macは、Debugビルド用の証明書については個々のMacで別個に作成して使えるようにしよう、というもので要点としては以下の通りです。

 - Debugビルドonly
 - XcodeとiOS Dev Centerの双方で生成できる
 - Xcode8移行から生成可能
 - Xcode7以前でも使用可能

## Signing in Xcode
Signing in Xcodeでは、Signingに関する問題を解決するためにXcodeのワークフローとUIを変更した、という話でした。

変更点としては、以下の通りです。

- SigningがBuild SettingsからGeneralタブに移動
- Automatic SigningとCustomized Signingという仕組みを導入
  - Automatic Signingでは、Capabilitiesに変更を加えた場合などに、自動的にProvisioning Profileが更新される
  - Customized Signingは今までのApp Signingと同じ。
- Provisioning Profileのエラーでは、**fix issue**のみではなく、説明的なエラーメッセージを表示するように
- Automatic SigningでのProvisioning Profileのステータス変更について、Report Navigatorペインで表示されるように。
- Provisioning Profileの更新に伴うProvisioning Profileの選択が不要に

まず、1点目については、以下の画像のようにSigningがGeneralタブに移動しており、TeamやProvisioning Profile、Certificatesの設定が一目でわかるようになりました。
<img width="1196" alt="Screen Shot 2016-06-20 at 07.36.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/33395/8bbe1e91-b622-8fa9-90f2-19f5238c4507.png">

Automatic Signingについてですが、Session動画の16:30-17:30あたりを確認するのが一番わかりやすいかと思います。
(backgroundでXcodeが全て処理するため)

次に**fix issue**の改善についてですが、Provisioning Profileで何かエラーが発生した場合に以下の画像のように、エラーの発生箇所について詳細に記述されるようになります(Push NotificationとiCloudを修正すれば良いことがわかる)。
<img width="1185" alt="Screen Shot 2016-06-20 at 07.44.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/33395/742c9aa7-83d8-57f4-59dc-e0e4835a4a78.png">

Automatic SigningによるProvisioning Profileのステータス変更については、以下の画像のように、Report Navigatorペインで確認することができます。
![スクリーンショット 2016-06-20 13.33.21.png](https://qiita-image-store.s3.amazonaws.com/0/33395/fd9a1cf2-3760-ead2-7308-d44ada955401.png)

Provisioning Profileの更新については、PROVISIONING_PROFILE_SPECIFIERという新たにBuild Settingsに追加された名前(Bundle Identifier？セッションではUnique IDと説明)により自動で解決が行われるため、開発者が選択しなおす必要がないそうです。
興味のある方は、22:00-22:30のあたりを確認してみてください。

## Best Practices

最後のBest Practicesは、Xcode8からのワークフローに対応して、以下のように開発を進めよう、というものでした。
- 開発時には、Automatic Signingを使おう
- GeneralタブのSigningとCapabilitiesタブで全てを管理しよう
- Customized Signingを使う場合にも、CODE_SIGNING_IDENTITYをデフォルトのままにしておこう(Signing Certificate per Macのため)

## 参考
- [What's New in Xcode App Signing](https://developer.apple.com/videos/play/wwdc2016/401/)
- [Presentation Slides (PDF)](http://devstreaming.apple.com/videos/wwdc/2016/401hmew12wifry4svvi/401/401_whats_new_in_xcode_app_signing.pdf)
- [今 Swift や iOS 8 について書くのは NDA 違反か調べてみた](http://qiita.com/uasi/items/4d17cd1b7f83a6814c83)