iOS10から必要になったユーザデータにアクセスする為に表示する文言をローカライズする

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/baf5ccd2-38b1-4816-c104-3002c7edf0b6.png" width="600">


## ⛔️iOS10からユーザでにアクセスする際には理由を明示する

>
iOS 10 introduces several changes and additions that help you improve the security of your code and maintain the privacy of user data. To learn more about these items, see https://developer.apple.com/security/.

https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html

概要は[こちら](http://dev.classmethod.jp/smartphone/iphone/ios10-privacy-data-purpose-description/)の記事からどうぞ🔗

実際にはplistファイルの```Value```の```string```として文言を設定します。
[こちら](https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html)の表の```Xcode name``` でPrivacyの表記があるモノですね。

ただInfo.plistに設定してしまうと、ローカライズが出来ません。
（ここで設定しているものが優先的に表示される為）

なので、Info.plistの設定をローカライズする必要があります。

## 🌐plistをローカライズする

サンプルを作成した環境は以下となります。

- macOS 10.11.6
- Xcode8.0
- Swift3

やり方
>
Localized values are not stored in the Info.plist file itself. Instead, you store the values for a particular localization in a strings file with the name InfoPlist.strings. You place this file in the same language-specific project directory that you use to store other resources for the same localization. The contents of the InfoPlist.strings file are the individual keys you want localized and the appropriately translated value. The routines that look up key values in the Info.plist file take the user’s language preferences into account and return the localized version of the key (from the appropriate InfoPlist.strings file) when one exists. If a localized version of a key does not exist, the routines return the value stored in the Info.plist file.

[About Information Property List Files](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/AboutInformationPropertyListFiles.html)

ドキュメントにあるままなので、問題ないかと思いますが、

1.  InfoPlist.stringファイルを作成
2.  作成したファイルをローカライズ

という流れになります。
簡単にローカライズファイルの作成方法を説明すると、

```File -> New -> File...``` を選択

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/a9c533a0-5a7e-2ef5-566a-70f0312238e1.png" width="480">

```Strings File``` を選択
 
<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/783f17de-dc74-3c23-de41-01cdaac0da96.png" width="500">

```InfoPlist``` という名前で保存

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/9e4bfe52-6b1a-b11b-d123-5a434d6b20be.png" width="400">

これで```InfoPlist.strings``` が作成されます。

次にそのファイルをローカライズしていきます。
効率の良いやり方、ツールなどあれば是非教えてください。

あとは、このファイルをローカライズしてきます。
プロジェクトファイルを選択した状態で、```Info``` タブの ```Localizations``` の"＋"を選択して、対応した言語を選択します。

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/87837a62-4751-c9a5-cd20-f3cfe917c57b.png" width="800">

例えば、フォトライブラリーにアクセスする時は

```InfoPlist.strings
"NSPhotoLibraryUsageDescription" = "アップロードする画像を選択するために必要です";
```

といって感じで設定すれば、OKです。
対応させる言語なんて１つしかないよという場合は

<img src="https://qiita-image-store.s3.amazonaws.com/0/25250/d126cdf2-bdc3-619f-0e8c-ecf765d2cdf9.png" width="800">

Info.plistの設定に```“Privacy - Photo Library Usage Description”``` を追加するだけです。

## 🔚終わりに

また、冒頭でも書いたように ```Info.plist``` でも ```InfoPlist.strings``` でも設定する事ができますが、その場合はローカライズファイルの内容は無視されてInfo.plistの内容が優先されてしまいますので注意してください😱


間違いあったら教えていただけるとうれしいです。
よろしくお願いいたします🙏

## 💬余談
因みに、Androidではこんな感じにやるみたいです。

- [AndroidStudioでいかにラクしてローカライズするかを考えた（しかも無償で） - Qiita](http://qiita.com/okey01/items/e2cfd9f1264f3b7a81f2)
- [Localize the UI with Translations Editor | Android Studio](https://developer.android.com/studio/write/translations-editor.html)

ぱっと見、Android Studioのエコシステム上で編集も出来るのがいいなと思いました。

## 🔗Refs
- [How to localise a string inside the iOS info.plist file?](http://stackoverflow.com/questions/25736700/how-to-localise-a-string-inside-the-ios-info-plist-file)

- [[iOS 10] ユーザーのプライバシー情報にアクセスするときは理由を書こう | Developers.IO](http://dev.classmethod.jp/smartphone/write-description-for-privacy-data-access/)

- [[iOS 10] 各種ユーザーデータへアクセスする目的を記述することが必須になるようです](http://dev.classmethod.jp/smartphone/iphone/ios10-privacy-data-purpose-description/)

- [About Information Property List Files](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/AboutInformationPropertyListFiles.html)

- [What's New in iOS#Security and Privacy Enhancements](https://developer.apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS10.html)
- [Information Property List Key Reference](https://developer.apple.com/library/prerelease/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html)
- [iOS10ではカメラアクセスなどの目的を明示しないと強制終了する](http://qiita.com/Takumi_Mori/items/f53c6eec1676d3df59dc)

## 2017年1月25日 追記

- Apple申請時にもし、plistに該当の項目の記述がなかった場合はメールが届き、iTunes connectにて、バイナリはアップロードできますが、```ビルド```の欄に該当のバイナリが表示されません。
- リジェクトされる旨の投稿もあるようなのですが、再現手順（無いにこした事はないですが）がわからなかったです><