LicensePlistの実装方法［Swift］

# LicensePlistとは
<br>

『license-plistというCLIツールを実行すると、そのプロジェクトで依存しているライブラリを収集して、iOS設定アプリ上に載せられる形式のplist群を生成してくれます』(開発者記事抜粋)

<br>

リリースしたアプリにオープンソースのライセンスを表示させる実装方法です。
アプリの設定画面で企業で開発したなどで見ることができますが、個人アプリでも仕様したものは記載した方が良いです。
その際に必要なXcodeでの実装方法となります。
UIKitでもSwiftUIでも実装方法は一緒です。

<br>


アプリの設定画面を開くと『Licenses』と表示されるようになってタップすると使っているライブラリを全て表示してくれます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/c184c342-0aa4-cc81-75fa-140346abc424.png" width="50%">
アプリの設定画面に表示されるようになります。

<br>


:::note info
開発者の方の記事内容
:::
[LicensePlist というiOSアプリ利用ライブラリのライセンス一覧を生成するツールを作りました](https://medium.com/swift-column/license-plist-c0363a008c67")

https://medium.com/swift-column/license-plist-c0363a008c67

Qiita記事

https://qiita.com/mono0926/items/973752b69c881e00c507

GitHub

https://github.com/mono0926/LicensePlist?source=post_page-----c0363a008c67--------------------------------


使用するためにのライブラリはCocoaPodsを使っています。
<br>
ここではCocoaPodsを使用した実装方法で記載します。
CocoaPodsの使い方はこちらに記載してあります。

https://sunny10side.com/how-to-use-cocoapods/

詳しいやり方はこちらを参考にして下さい。

<br>
CocoaPodsインストールしており、かつPodfileを作っている前提での方法です。
Podfileを作るなどの方法はこちらの記事を参考にして下さい。


https://sunny10side.com/understanding-how-to-handle-podfile-and-external-libraries/


<br>

# Podfileに書き込む


![podfile.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/c893f9fe-93d7-3cae-5e99-4d9241225785.png)

『Podfile』があります。
『Podfile』をテキストエディットかターミナルのVimコマンドで開いて以下を追記して下さい。
![2.5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/e29b0dcc-04d9-7d7c-18b0-8a8558955e9b.png)

```
pod 'LicensePlist'
```
コピペできます。

<br>

```
pod install
```
そしてファイルのディレクトリでコマンド使用してインストールします。

<br>

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/ee47f508-4eba-f53d-5a61-0c999faa94eb.png)
白い『xcworkspace』ファイルに書き込んでいきます。





# Xcodeのメインファイルを選択する
![スクリーンショット 2024-02-05 0.17.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/8dbaaff4-5dee-fab7-7e9d-bf94bf13bd36.png)

ショートカットキーの『⌘+N』でファイルの新規作成画面を開きます。

<br>

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/48f97c43-cc01-4c38-204f-bf560a9ae7b4.png)

『Filter』に『Setting』と入力して下さい。


```
Settings
``` 
コピペできます。

<br>

![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/c2e74191-417d-65bf-df7e-2b180f68e173.png)
『Settings Bundle』が表示されたら『Next』をクリックして下さい。

<br>

![SettingsP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/a973774d-8b71-082f-5f5f-b686ef1a43b8.png)
ファイル名はそのまま『Settings』で「Create」をクリックして下さい。

<br>

![enP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/f19ab812-fda3-0a94-8925-4e197c1642c7.png)
最初に作られている『en.lproj』と『Root』を削除します。
削除する時は『⌘ command』を押しながらクリックすると2つ選択して「Delete」をクリックして下さい。

<br>

![move.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/ee1dc464-998d-e302-2002-0d1fe0189f09.png)
右の「Move to Trash」を選択して削除します。


<br>

![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/99d61f6c-d25a-81d9-b11a-62d72a48da92.png)
自分の設定でデスクトップのXcodeのファイルをiCloudに自動バックアップ設定をしてると削除出来ないポップが表示されます。
iCloudの設定を外すためにデスクトップ以外にファイルを移してからDeleteすると削除できるようになります。

<br>

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/a192c4a6-6572-f4b7-098c-2489a4728864.png)
次にもう一度メインファイルを選択します。
『⌘+N』で新規作成ファイル画面を再度開きます。

<br>

![PropertyP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/d12031bf-93dd-945b-f4e2-cf5fe5daf9b7.png)
検索ボックスで『Property』と入力して下さい。

```
Property
``` 
コピペできます。
『Property List』が出たら「Next」をクリックして下さい。

<br>

![RootP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/8ca86667-afab-fcf9-1a22-882184687abd.png)
ファイル名を『Root』に変えて下さい。


```
Root
``` 
ファイル名を変更したら「Create」をクリックして下さい。

<br>

![SourceCodeP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/27443760-d775-0b57-be48-0e3aad1671c7.png)
Rootができたら『Root』→『Open As』→『Source Code』の順で選択して下さい。

<br>

```Root.plist
<?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>StringsTable</key>
 <string>Root</string>
 <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>
</dict>
</plist>
``` 
最初に入力されている内容は全て削除して下さい。
そして上記の内容をコピペします。

![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/4485e889-84f2-e18a-5b3c-69535c8f21d4.png)
このようになります。

<br>

![SettingsP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/bc2a44b8-0d04-700f-c7c0-1b06311c118b.png)
Root.plistに書き込んだら、RootをSettingsファイルの中に入れます。
カーソルで動かすと段落にプラスマークが表示されるので入れて下さい。

<br>

![RootPP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/57d2ea3d-43e7-83ea-cd45-8f08fb33c4be.png)
ちなみにファイル左の矢印が右を向いていて下にRootが表示されている時はファイル内に入ってないです。

<br>

![Build PhasesP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/2421fe57-19d4-65ee-7783-54bfafa981c2.png)
次に『プロジェクトを選択』→『TARGETS』→『Build Phases』→『+』をクリックして下さい。

<br>

![New RunP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/d2b5f63a-6dfe-e23b-a58d-6a3f40e42876.png)
『New Run Script Phase』を選択して下さい。

<br>

![ScriptP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/eb79f1d6-04e7-b88c-9811-6d2c3480e655.png)
最初に表示されている箇所を削除して以下を入力します。


```shell
if [ $CONFIGURATION = "Debug" ]; then
    ${PODS_ROOT}/LicensePlist/license-plist --output-path $PROJECT_NAME/Settings.bundle
fi
``` 
こちらを入力して下さい。

```shell
if [ $CONFIGURATION = "Debug" ]; then
cd $SRCROOT
/usr/local/bin/license-plist --output-path $PRODUCT_NAME/Settings.bundle
fi
``` 
自分の場合リリースしたアプリに最初のコードを入力してもエラーになってしまったので、こちらの『/usr/local/bin/』のパスが入っているコードを入力してビルドしたところ上手く出来ました。

<br>

![スクリーンショット 2024-02-06 23.02.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1344207/420b4591-3f28-311a-d0ac-fc3b07d11100.png)
```
pod update
```
そしてファイルのディレクトリでコマンド使用してアップデートします。
これで実装は終了です。


# ビルドする
ビルドしてみて下さい。
何も書いてない状態だとエラー表示にはなるもののビルドは出来て設定画面にLicenseが表示されています。

<br>

# 参考

[LicensePlist というiOSアプリ利用ライブラリのライセンス一覧を生成するツールを作りました](https://medium.com/swift-column/license-plist-c0363a008c67")

https://medium.com/swift-column/license-plist-c0363a008c67

<br>

[iOSアプリのライセンス一覧のplistを半自動生成して設定画面にキレイに表示するプログラムをGo言語で作った](https://qiita.com/mono0926/items/973752b69c881e00c507")

https://qiita.com/mono0926/items/973752b69c881e00c507

<br>

LicensePlist GitHub

https://github.com/mono0926/LicensePlist?source=post_page-----c0363a008c67--------------------------------

<br>


【Swift】LicensePlistの使い方

https://qiita.com/SNQ-2001/items/dc6433f63799ef76dd04