【追記】Swift版の mono0926/LicensePlist を作ったのでそちらがオススメです
以下、 mono0926/ios-license-generator の紹介記事ですが、Swiftで作り直した mono0926/LicensePlist を使うことをオススメします。
移植ではなく、手法自体がらりと変えました。
(生成物の形式はほぼ一緒です。)
しばらく前ですが、今開発中のPlayer!向けに、このようなキレイなライセンス一覧を半自動生成するプログラムをGo言語で書きました。
もちろんすでに何かやり方無いか調べたのですが、やりたいことを満たすものが見つからなかったので。
プログラムの置き場所など
- レポジトリ: mono0926/ios-license-generator
-
go get -u github.com/mono0926/ios-license-generator
でインストール出来ます。- あるいは、Releases · mono0926/ios-license-generatorからダウンロードしてください。
Go言語、実行ファイル作るの簡単で良いですねと改めて思いました。
plistのtemplateファイルも go-bindataを使って簡単に同梱出来ちゃいました。
参考: go-bindata でコンパイル時にリソースを埋め込んじゃおう! - Qiita
Goのプログラム自体は初心者レベルなので、お手柔らかにお願いします( ´・‿・`)
他のやり方の問題点
カスタムで画面作る方法
これは、初めに画面組むのもその後のメンテナンスもけっこう手間なので、避けたかったです。
CocoaPodsでライセンス表記を自動生成
これはけっこう有名な方法なので、やっている人多いと思います。
以下の問題があって選択肢から外れました。
- CocoaPods以外で導入しているライブラリに対応できない(ですよね??)
- Carthage経由
- 何らかの事情でソースそのまま追加したり、Git Submoduleで導入している場合など
- あまりキレイじゃない
- 全てのライセンスが単一のplistとして出力されて、ライセンス一覧としてキレイじゃない
今回やった方法
「CocoaPods以外で導入しているライブラリに対応」するためには、別途簡単なリストで管理しているライセンス一覧をソースにするしか無さそう、という判断の下、以下のような仕組みにしました。
- Markdownで簡単なライセンス一覧を記述
- プログラムでそれをパースして、ライセンス文章をダウンロードしてきて、Settings.bundle(設定アプリ内に表示するやつ)形式のplistとして出力
- CocoaPodsからの自動生成と違って、冒頭に貼ったスクリーンショットのようにテーブルビュー + 詳細という構成
使い方
ライセンス一覧のMarkdownファイルを用意
こんなファイルを用意します。(テキストで貼ってもちゃんと表示されないのでスクリーンショット)
多少ですが、面倒ではあります( ´・‿・`)
一応OSS使うマナーとして、ライセンスなど確認した上で導入するはずなので、そのついでにやれば許容範囲じゃないでしょうか。
外部参照リンク形式で記述し、末尾のものがプログラムでパースする対象となります。
[ライブラリ名
]:ライセンスURL
となっているのが肝です( ´・‿・`)
プログラム実行
以下のコマンドで、output_dir
にライセンスのplistファイル群が出力されます。
ios-license-generator generate [License.md] [output_dir]
- 一覧:
LicenseList.plist
- ライセンス詳細:
ライブラリ名.plist
- こちらはライブラリの数だけ生成されます
iOSアプリソースに配置
Settings.bundle
が無い場合は適当に用意してください。
そして、生成されたファイル群をSettings.bundleに放り込みます。
(上述の[output_dir]
で直接指定すればこの手順不要です。)
初回のみ、以下の手順も必要です。
Root.plist
に以下を追加してください。
<dict>
<key>Type</key>
<string>PSChildPaneSpecifier</string>
<key>Title</key>
<string>License</string>
<key>File</key>
<string>LicenseList</string>
</dict>
国際化必要な場合、Root.strings
に以下を追加してください。
"License" = "ライセンス情報";