iOS アプリでライセンス表記を自動化する

アプリ開発をする際には、
大概他の方々が作られたライブラリを使うことが当たり前で、
その使用したライブラリのライセンス表記も用意しないといけない。

昔、自分はライセンス表記されている md ファイルをコピペして1つの md ファイルにまとめるという、
とても効率の悪い方法でライセンスを表示していた。

このライセンス表記を自動化するために LicensePlist - Github を使用した。
これを使うとどういう風にライセンス表記されるかは本家 LicensePlist - Github を参考。

インストール

バージョン管理は cocoapod を使用。

/your/xcode/project/Podfile

# 追加
pod 'LicensePlist'

Podfile 更新

cd /your/xcode/project
$ pod update

Settings.bundle 作成

  • ⌘ + n でファイル作成する
  • 検索フィルターで「setting」と入力すると「Settings Bundle」が出てくるので選択して作成
  • 作成する場所は LicensePlist で自動生成する場所に合わせた方がいいかなと思う
    • LicensePlist での出力先はサンプルコードだと $PRODUCT_NAME/Settings.bundle に指定されている
Settings.bundle
  ├ en.lproj 
  │  └ Root.strings
  └ Root.plist

Build Phases

  • 「左ツリー: プロジェクト.xcodeproj」 → 「TARGETS」 → 「YOUR_PROJECT_NAME」 → 「Build Phases」
  • 「+」 → 「New Run Script Phase」で「Run Script」が作成される。
  • 「Run Script」 を適当に名前変更する。

Run Script

  • Shell: /bin/sh
# Type a script or drag a script file from your workspace to insert its path.
#if [ $CONFIGURATION = "Debug" ]; then
#/usr/local/bin/license-plist --output-path $PRODUCT_NAME/Settings.bundle --github-token YOUR_GITHUB_TOKEN
#fi
if [ $CONFIGURATION = "Debug" ]; then
${PODS_ROOT}/LicensePlist/license-plist --output-path YOUR_PROJECT_NAME/Settings.bundle
fi

--output-path YOUR_PROJECT_NAME/Settings.bundle で出力先を指定する。
--github-token YOUR_GITHUB_TOKEN は特に必要ないと判断して削除した。

  • 必要な設定か分からないのでデフォルトのまま
    • Run script: 「Bases on dependency analysis」チェック
    • 「Show environment variables in build log」チェック

Settings.bundle

Run Script を追加してビルドすると、
Settings.bundle 内にライセンス表記に必要なファイルが自動生成される。

Settings.bundle
  ├ com.mono0926.LicensePlist
  │  └ ライセンス表記に必要なファイル.plist
  ├ com.mono0926.LicensePlist.latest_result.txt
  ├ com.mono0926.LicensePlist.plist
  ├ en.lproj 
  │  └ Root.strings
  └ Root.plist

Root.plist

  • Preference Items に Item を追加。
  • Settings.bundle を作成した時に生成された他の Item はいらないので削除する。
  • Item は下記のように設定。
iPhone Settings Schema
  ├ Strings Filename: Root
  └ Preference Items
     └ Item
        ├ Type: Child Pane (PSChildPaneSpecifier を入力すると Child Pane になる)
		├ Title: Licence
		└ Filename: com.mono0926.LicensePlist

再びビルドすると端末の「設定」→「YOUR_APP_NAME」のところに Licence が追加されている。
すごい便利。