【iOS】ライセンス表示ライブラリ「LicensePlist」を使ってみた

# はじめに
個人アプリにライセンス表示をしたく、有名なライセンス表示ライブラリを使ってみました。

# 手順
https://github.com/mono0926/LicensePlist

導入手順はGithubのページに丁寧に書かれておりますが、それでも少し詰まったのでメモしておきます。

##### 1. LicensePlistのインストール
- **Recommended**の`CocoaPods`を使う場合
`Podfile`に`pod 'LicensePlist'`を追加して、`pod install`する


- **Also Recommended**の`Homebrew`を使う場合
ターミナルにて`brew install mono0926/license-plist/license-plist`する
だけですが、
私の場合（環境の問題で）は、`Error: Cannot install under Rosetta 2 in ARM default prefix (/opt/homebrew)!`と怒られたので、
`arch -arm64 brew install mono0926/license-plist/license-plist`
と`arch -arm64`を付けて無事インストールできました。

##### 2. LicensePlistの生成
今回対象のアプリは`CocoaPods`でライブラリ管理を行なっており、ディレクトリに`Pods`があるので
対象アプリに移動して`license-plist`を実行するだけで
`com.mono0926.LicensePlist.Output`というディレクトリが自動生成されました。
![スクリーンショット 2022-02-08 19.35.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631585/da65618f-0c20-ce83-725a-984bcae64811.png)

##### 3. SettingBundleの生成
`Setting Bunndle`そのものがなかったので、アプリのディレクトリ直下に新規追加します。
![スクリーンショット 2022-02-07 20.47.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631585/7d597077-4b42-6bf4-72a7-a60478f4681a.png)

新規追加後はこのような状態ですが、
![スクリーンショット 2022-02-07 20.48.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631585/b961cbf0-133a-6569-6e79-d4ab29604b1e.png)

そこに`com.mono0926.LicensePlist`と`com.mono0926.LicensePlist.plist`を自動生成されたディレクトリから移動させます。
![スクリーンショット 2022-02-07 20.50.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631585/ad947df7-b20b-ea7d-0d89-b38b5e7180c5.png)


##### ４. Root.plistの修正
デフォルトはこんな感じ
![スクリーンショット 2022-02-08 19.37.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631585/65533d7e-2624-295b-dfef-510baef9ab9a.png)
そのまま表示するとこんな感じ
![スクリーンショット 2022-02-07 20.53.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631585/bcee7362-2ae0-034a-f0a2-7545123c5d01.png)

なので、修正します
`Root.plist`を右クリックで`Open As`->`Source Code`で表示して👇のように修正します

```swift
<?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>PreferenceSpecifiers</key>
        <array>
            <dict>
                <key>Type</key>
                <string>PSChildPaneSpecifier</string>
                <key>Title</key>
                <string>Licenses</string>
                <key>File</key>
                <string>com.mono0926.LicensePlist</string>
            </dict>
        </array>
        <key>StringsTable</key>
        <string>Root</string>
    </dict>
</plist>
```

`Property List`で表示するとこんな感じに
![スクリーンショット 2022-02-08 20.27.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631585/5ff5bb7b-b421-a6d9-a0a7-71b8e05837fd.png)

これで想定通りライセンスが表示されました👏
![スクリーンショット 2022-02-08 20.29.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631585/6e41b35c-331a-023e-cb27-b338744057e1.png)

##### 5. ビルド時に`LicensePlist`の更新がされるようにする
`Build Phases`の`New Run Script Phase`を追加して下記内容（[LicensPlist](https://github.com/mono0926/LicensePlist)参照)をコピペする

- `CocoaPods`を使った場合

```shell
if [ $CONFIGURATION = "Debug" ]; then
${PODS_ROOT}/LicensePlist/license-plist --output-path $PRODUCT_NAME/Settings.bundle --github-token YOUR_GITHUB_TOKEN
fi
```

- `Homebrew`を使った場合

```shell
if [ $CONFIGURATION = "Debug" ]; then
/usr/local/bin/license-plist --output-path $PRODUCT_NAME/Settings.bundle --github-token YOUR_GITHUB_TOKEN
fi
```

しかし、私の場合は、`/usr/local/bin`ではなく`/opt/homebrew/bin`でしたが。

それと、`Setting.bundle`が直下にない場合は、`$PRODUCT_NAME/〇〇/Settings.bundle`とすること。

これで準備完了。

ビルドしたらLicensePlistの情報が最新に更新されました👏
![スクリーンショット 2022-02-09 19.14.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/631585/dc204878-a30a-5618-6775-33492baa71db.png)


# 感想
`Homebrew`を使うと`LicesePlist`自体のライセンス表示がされないので、`CocoaPods`で入れて生成した方が良いのだろうなと思いました。

# 参考

https://www.reigle.info/entry/2020/05/05/000000_1

http://harumi.sakura.ne.jp/wordpress/2019/06/09/cocoapods%E3%81%A7licenseplist%E3%82%92%E4%BD%BF%E3%81%86/

https://nexus1.hatenablog.com/entry/2021/01/20/215441