OSSのライセンスを設定アプリ内に表示する方法(Obj-C・Swift共通)

## はじめに

みなさん、OSSは使っていますか:interrobang:

OSSのライブラリ等を使用するには、ライセンスに則って著作権やライセンス条項を見えるところに表示する必要があります。
Webアプリだとソースを表示できるのであまり意識することはないかもしれませんが、ネイティブアプリは意識して表示しなければいけません。

iOSアプリだと標準の設定アプリ内に表示することが多いので、その方法を紹介します。

## 環境

- Xcode：10.0 (10A255)

## Settings Bundleの追加

設定アプリ内をカスタマイズするには「Settings Bundle」をプロジェクトに追加します。

__左のツリーでプロジェクトを右クリック > New File…__
<img width="283" alt="スクリーンショット_2018-12-30_15_28_10.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/08c4772f-6ef3-410f-f124-ab8cc6aecc05.jpeg">

__[iOS]タブ > Resource - 「Settings Bundle」を選択
[Next]をクリック__
<img width="730" alt="スクリーンショット_2018-12-30_15_29_26.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/a74268f5-3378-642a-e6b3-450577b95d53.jpeg">

__[Save As:]にファイル名を入力
[Create]をクリック__
<img width="840" alt="スクリーンショット_2018-12-30_15_29_56.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/1ee3e285-0b45-4f15-7293-aefef4f07032.jpeg">

ファイル名は特に理由がなければ `Settings.bundle` のままでいいと思います。

## Settings Bundleの編集

「Settings Bundle」をプロジェクトに追加できたら、次は編集していきます。

__`Settings.bundle` 内にある `Root.plist` を選択
Item 0〜3を削除__
<img width="680" alt="スクリーンショット_2018-12-30_15_35_36.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/26f7663a-c3d5-92b7-4478-aedbbe1b071a.jpeg">

デフォルトでテキストフィールドやトグルスイッチなどが配置されているので削除します。

__以下のItemを追加__
<img width="456" alt="スクリーンショット_2018-12-30_15_38_05.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/b6b7983a-f9b8-07d4-acd0-f1cba800811a.jpeg">

|Key|Type|Value|
|:--|:--|:--|
|Type|String|Child Pane|
|Title|String|Acknowledgements|
|Filename|String|Acknowledgements|

`Title` や `Filename` の `Value` は任意の値でOKです。
「Acknowledgements(謝辞)」とすることが多いです。

## プロパティリストの追加

次に、ライセンスを記述するプロパティリストを追加します。

__左のツリーでプロジェクトを右クリック > New File…__
<img width="311" alt="スクリーンショット_2018-12-30_15_40_03.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/1ee3dd4c-6bcf-17ea-b00a-a1ec379b59f8.jpeg">

__[iOS]タブ > Resource - 「Property List」を選択
[Next]をクリック__
<img width="729" alt="スクリーンショット_2018-12-30_15_40_26.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/0763b9e6-9d9d-096e-de87-860e3deb12d7.jpeg">

__[Save As:]に先ほど `Filename` で指定したファイル名を入力
[Create]をクリック__
<img width="841" alt="スクリーンショット_2018-12-30_15_40_45.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/1fbbfa12-dc2f-b17d-4b6a-f1416e478040.jpeg">

__ドラッグ&ドロップで `Settings.bundle` の中に入れる__
<img width="674" alt="スクリーンショット_2018-12-30_15_41_05.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/e935184c-d294-56ac-aa14-1dfabef63058.jpeg">

## プロパティリストの編集

プロパティリストにライセンス情報を記述します。

__`Root` に以下を追加__
<img width="400" alt="スクリーンショット_2018-12-30_15_55_33.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/adfaa0ea-c9a1-bbd0-a7fd-b0c7cdd22491.jpeg">

`StringsTable` はもしかしたら不要かもしれません。

__`PreferenceSpecifiers` に以下のItemを追加__
<img width="469" alt="スクリーンショット_2018-12-30_16_00_51.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/96836437-46e8-a15e-1da3-580f8ef84ef5.jpeg">

|Key|Type|Value|
|:--|:--|:--|
|Type|String|PSGroupSpecifier|
|Title|String|{OSS名}|
|FooterText|String| {ライセンス条項などの内容}|

例として [Realmのライセンス条項](https://github.com/realm/realm-cocoa/blob/v3.13.0/LICENSE) を記述しています。

OSSを複数使用している場合、Itemを1, 2, …と増やしていけばOKです。

## ライセンス表示までの画面遷移

これで実装は完了したので、実際に表示されているか確認します。

__[設定]アプリを起動__
<img width="373" alt="スクリーンショット_2018-12-30_16_02_21.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/76da5c8b-cd92-c19a-57ba-da74bb9270ca.jpeg">

__対象のアプリをタップ__
<img width="373" alt="スクリーンショット_2018-12-30_16_02_26.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/fa4ebb10-e0e7-e8a8-a3b9-d4d399556f4c.jpeg">

__「Acknowledgements」をタップ__
<img width="373" alt="スクリーンショット_2018-12-30_16_02_29.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/138245/58bfcedc-2467-ae5b-fd60-d9f973926fed.jpeg">

<img width="373" alt="スクリーンショット 2018-12-30 16.02.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/138245/33b87021-8eba-a469-2673-27dc6e72f3d2.png">

無事にRealmのライセンス条項が表示されました！

## おわりに

OSSはライセンスを遵守し、適切に使用しましょう:ok_hand: