今回はライセンス機能についてです。
OSSのライブラリをiOSのアプリで利用している場合、使用したライブラリのライセンスをしかるべき場所に記載する必要があります。
ライブラリを追加する度にそれらを手動で更新すると手間になるので、それらをCocoaPodsの仕組みを使いながら自動で更新するようにしたいと思います。
Settings.bundleの作成
Settings.bundleという仕組みを使うことで、簡単にアプリの設定画面を実装することができます。
今回はSettings.bundleを使ってアプリの設定画面を実装し、その中にAcknowledgement(謝辞、ライセンス情報)を表示するようにしたいと思います。
さっそくSettings.bundleを作ってみます。Projectフォルダを右クリックし、 New File
のオプションからSettings Bundle
を選択し、ファイルを作成してください。
Settings.bundleができたら、その中にあるRoot.plistを書き換えます。
Root.plistはアプリの設定に表示させる項目を設定するファイルです。
Root.plistを右クリックし、Open as > Source Code を選択してください。
下記は一例ですが、下記のように修正してください。
<?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>PSGroupSpecifier</string> <key>Title</key> <string>Group</string> </dict> <dict> <key>Title</key> <string>About</string> <key>Type</key> <string>PSGroupSpecifier</string> <key>FooterText</key> <string>Copyright © 2021 sample All Rights Reserved.</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>PSChildPaneSpecifier</string> <key>Title</key> <string>Acknowledgements</string> <key>File</key> <string>Acknowledgements</string> </dict> </array> </dict> </plist>
FooterText
はその名の通り、Footerに表示させる機能で、Version
はバージョンを表示させる機能、Acknowledgementsは謝辞を表示させるためにあります。
続いて、ライセンス用のplistファイルを作成します。
Settings.bundle配下にAcknowledgement.plistを作成します。
Projectのフォルダーを右クリックしNew FileからProperty List
を作成してください。名前はAcknowledgements.plistで いいと思います。
作成したら、そのファイルをSettings.bundleの配下に移動させておきましょう。
CocoaPodsによるAcknowledgementsの書き出し
次に、CocoaPodsからOSSのライセンスの情報を直接書き出します。
PodFileに下記設定を追加しましょう。
post_install do | installer | require 'fileutils' FileUtils.cp_r('Pods/Target Support Files/Pods-(プロジェクト名)/Pods-(プロジェクト名)-acknowledgements.plist', '(Acknowledgements.plistのパス)', :remove_destination => true) end
上記の設定を追加することでpod installやpod updateでライブラリの更新があった場合に変更が反映されます。
pod installやpod updateを行うことで、Acknowledgements.plistにライセンス情報が格納されます。
上記の設定が終われば、アプリをビルドするとアプリの設定画面から今回の設定した項目が確認できます。
アプリの設定に表示させたくない場合には該当の
アプリの中でライセンスを表示させる場合にはAcknowledgements.plistからライセンスの情報を取得すれば可能です。
Acknowledgements.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>FooterText</key> <string>○○○○○○○○○○○○○○○○○○○○○○</string> <key>License</key> <string>MIT</string> <key>Title</key> <string>○○○○○○</string> <key>Type</key> <string>PSGroupSpecifier</string> </dict> </array> </dict> </plist>
FooterText
がライセンス表記、License
がライセンス種類、Title
がライブラリ名となります。
info.plistから情報を取得するのと同じようにタグの情報を取得して画面に表示させることが可能です。
if let path = Bundl.url(foeResource: "Acknowledgements", withExtension: "plist", subdirectory: nil, in: Bundle.main.url(forResource: "Settings", withExtensions: "bundle")!) { var items: [Any] = [] let acknowledgements = NSDictionary(contentsOf: path)! items = acknowledgements["PreferenceSpecifiers"] as! [Any] items.removeFirst() items.removeLast() }
removeFirst()とremoveLast()をしているのは最初と最後には関係のない情報が入っているためです。
最後に
ここまでライセンス表記の方法について説明しましたが、LicensePlist
というライブラリで実現する方が便利かもしれません。