Xcode11以降で「設定」アプリ内にバージョン・ビルド番号・ライセンスを表記する。[LicensePlist]

Xcode11以降で設定アプリ内に、にバージョン・ビルド番号・ライセンスの表記の仕方です。

Xcode11からVersionとBuildのRunScriptが変わったらしいです。

今回使用するライブラリは、[LicensePlist](https://github.com/mono0926/LicensePlist)です。
# 注意事項
**・必ずバージョン番号とビルド番号を作業開始前にメモしておいてください。**

# ライセンスの表示
### ライブラリのインストール
Cocoapodsで`pod 'LicensePlist'`を追加して、ライブラリをアップデート(`pod update`)します。

### Run Scriptの追加
`.xcworkspace`ファイルを開いて、以下の画像の手順で新しいRun Scriptを作成します。
![スクリーンショット 2020-05-27 16.03.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/6d589448-df0f-831d-bd44-925a6b2e6b13.png)

※この記事では執筆の都合上、Run Scriptとなっている名前を変更し、『License Plist(Run Script)』としていますが、変更の必要はありません。

![スクリーンショット 2020-05-27 16.08.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/b45840c6-3d63-661a-5598-0a129c8bfb66.png)

ここまでできたら、以下のスクリプトをそのままコピペします。

```sh
if [ $CONFIGURATION = "Debug" ]; then
${PODS_ROOT}/LicensePlist/license-plist --output-path $PRODUCT_NAME/Settings.bundle --github-token YOUR_GITHUB_TOKEN
fi
```
![スクリーンショット 2020-05-27 16.12.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/2f513772-0ccc-cbc3-6c43-a7a84ecbe4e9.png)

ここまでで、一旦ビルド（`⌘+B`)します。
問題がなければ、そのままアプリのビルドが通るはずです。

### `Root.plist`を作成
次にRoot.plistを作成します。
![スクリーンショット 2020-05-27 16.17.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/57521a3e-228d-862d-399f-73bf4da9d6d9.png)

ここまでできたら、ファイル名は`Root.plist`で作成します。
![スクリーンショット 2020-05-27 16.22.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/5dc0896b-cdc9-83c1-163d-ecebbd86e169.png)

### `Root.plist`を編集

作成できたら、`Root.plist`をSource Codeで表示します。
![スクリーンショット 2020-05-27 16.27.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/ede0d617-9be6-9855-19b4-2edb0a6f9ea2.png)

表示できたら、以下のコードをコピペします。

```XML
<?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>PSGroupSpecifier</string>
            <key>FooterText</key>
            <string>Copyright</string> <!--コピーライトを変更したい場合はこの部分を変更してください-->
        </dict>
        <dict>
            <key>Type</key>
            <string>PSTitleValueSpecifier</string>
            <key>DefaultValue</key>
            <string>1.0.0</string>
            <key>Title</key>
            <string>Version</string>
            <key>Key</key>
            <string>sbVersion</string>
        </dict>
        <dict>
            <key>Type</key>
            <string>PSTitleValueSpecifier</string>
            <key>DefaultValue</key>
            <string>1</string>
            <key>Title</key>
            <string>Build</string>
            <key>Key</key>
            <string>sbBuild</string>
        </dict>
        <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>
```

### `Setting.bundle`を追加
プロジェクトファイルの直下に生成された`Settings.bandle`をXcodeにドラッグ&ドロップして同じ位置に読み込みます。
![スクリーンショット 2020-05-27 16.32.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/b05807eb-0073-1cfc-98ba-9678700f80b1.png)

さっき編集した`Root.plist`は`Setting.bundle`の中に移動させます。
![スクリーンショット 2020-05-27 16.34.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/a1e80b78-ca9f-311a-8d4d-c1ec948b3e82.png)

# バージョン・ビルド番号を表示
### 新規Run Scriptを作成
先ほどRun Scriptをを作成した時と同じ要領で、もう一つ新しいRun Scriptを作成します。

作成したら、以下のスクリプトをコピペします。

```sh
APP_VERSION="$MARKETING_VERSION"
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:1:DefaultValue ${APP_VERSION}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Settings.bundle/Root.plist"

BUILD_NUMBER="$CURRENT_PROJECT_VERSION"
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:2:DefaultValue ${BUILD_NUMBER}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Settings.bundle/Root.plist"
```

※今回も執筆の都合上、Run Scriptの名前を変更していますが、特にその必要はありません。

![スクリーンショット 2020-05-27 16.41.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/72a42ee4-6ccf-aa19-760b-9fa52e046524.png)

### `info.plist`を編集
`info.plist`を先ほどと同じSource Codeで表示して、`CFBundleShortVersionString`と`CFBundleVersion`を以下のように書き換えます。

```XML
	<key>CFBundleShortVersionString</key>
	<string>$(MARKETING_VERSION)</string>
	<key>CFBundleVersion</key>
	<string>$(CURRENT_PROJECT_VERSION)</string>
```
### プロジェクトのVersionとBuildを確認
VersionとBuildが空になっている(ことがある)ので、空になっていたら元の値を入力してあげましょう。
![スクリーンショット 2020-05-27 17.12.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/5c1e82a9-4ca4-2f30-f66e-7c5550b1215a.png)

# いざビルド
では、ビルドして設定をみてみましょう！
このように表示できました！
![ezgif-1-7519e6669b0c.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/1cc350fe-4c66-b125-f871-32b0e5f36e2c.gif)

# 追記 (2021/02/06）
### 項目名を日本語にする
![q_Xcode11以降で「設定」アプリ内にバージョン・ビルド番号・ライセンスを表記する。.001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/66517359-a021-9c83-7022-b9152529ace8.jpeg)

#### 変更方法
変更方法は簡単で、`Root.plist`を以下のように変更するだけです。
![q_Xcode11以降で「設定」アプリ内にバージョン・ビルド番号・ライセンスを表記する。.002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328477/9098e608-e7a4-df9a-61fe-0f25bed2ef7b.jpeg)

# 参考記事
[iOS13の設定アプリにつまずいた - Qiita](https://qiita.com/am10/items/75fa014b250a8a8c625b)
[Xcode11でのsetting.bundleのバージョン更新スクリプト - Qiita](https://qiita.com/ONICHAN717/items/f4d0fd9f1df3ab115cc0)
[[iOS][Swift] 設定画面に【アプリのバージョン番号】【CocoaPods導入したライブラリのライセンス】を表示する - Qiita](https://qiita.com/4q_sano/items/5d94aafd92cee901d786)
[[iOS] アプリの設定画面にバージョン表記と謝辞を自動で設定する - Developers.io](https://dev.classmethod.jp/articles/settings-bundle-acknowledgements/)
[CocoaPodsでLicensePlistを使う - 野生のプログラマZ](http://harumi.sakura.ne.jp/wordpress/2019/06/09/cocoapods%E3%81%A7licenseplist%E3%82%92%E4%BD%BF%E3%81%86/)

# サンプルプロジェクト
https://github.com/rea-sna/VersionSample

最後までご覧いただきありがとうございました☺︎