LicensePlist を導入し、アプリで使用している OSS のライセンスを表示する

LicensePlist を使うと

  • iOS アプリに依存している OSS のライセンス表記をまとめることができる
  • CocoaPods も Carthage どちらも対応している

これを試してみる。

セットアップ

Homebrew 経由で LicensePlist をインストールする。

$ brew install mono0926/license-plist/license-plist


プロジェクトにルートに CarfilePodfile を配置する。 プロジェクトルートで LicensePlist を実行する。

$ license-plist 

成功すると com.mono0926.LicensePlist.Output フォルダが生成される。

原理的にはこれを Settings.bundle 直下にコピーすれば iOS の設定アプリ内で、使用している OSS ライセンスが表示されるようになる。

次に Integrate 継続的に Settings.bundle に LicensePlist の成果物ができるように Xcode の RunScript に以下を追加する。

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

これでビルドごとにプロジェクトルートの下の $PRODUCT_NAME フォルダ下の Settings.bundle 内に LicensePlist の成果物ができるようになる。

最後に Settings.bundle 内の 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>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>

結果のスクリーンショット

f:id:daisuke-t-jp:20190823134151p:plain:w300 f:id:daisuke-t-jp:20190823134154p:plain:w300

サンプル

今回試した LicensePlist を使用したサンプルは GitHub にある。

注意点

  • LicensePlist は GitHub API を使用しているため、API 制限により時々失敗するかもしれない。その場合は license-plist コマンドにトークンを --github-token で指定すると良い。
  • Settings.bundle はあるが、設定画面に反映されない場合
    • アプリを再インストールしてみる
    • iOS を再起動してみる
    • .bundle がターゲットに含まれるかを確認する(プロジェクトのツリーにはあるが、ビルドに含まれていないと反映されない)