iOSアプリの設定画面にOSSのライセンスの情報とバージョンを自動で記載する

OSSのライブラリをiOSのアプリで利用している場合、使用したライブラリのライセンスをしかるべき場所に記載する必要があります。

ライブラリを追加する度にそれらを手動で更新すると手間になるので、それらをCocoaPodsの仕組みを使いながら自動で更新するようにしたいと思います。

dev.classmethod.jp

本記事は上記の記事を一部追記・修正する形で投稿しております。上記の記事ではBuildも設定画面に追記するようにしているので、そうしたい場合は上記も合わせて参照ください。

環境

Settings.bundle の作成

Settings.bundleという仕組みを使うことで、簡単にアプリの設定画面を実装することができます。今回はSettings.bundleを使ってアプリの設定画面を実装し、その中にアプリのバージョンとAcknowledgement(謝辞)を表示するようにしたいと思います。

さっそくSettings.bundleを作ってみます。Projectフォルダを右クリックし、 'New File' のオプションからSettings Bundleを選択し、ファイルを作成してください。

f:id:siro_uma:20190326222118p:plain

ファイル名はそのままで良いと思います。作成後は以下のようなディレクトリ構成になるかと思います。

f:id:siro_uma:20190326222925p:plain:w350

Settings.bundleができたら、その中にあるRoot.plistを書き換えます。Property listの表示のままだと編集しずらいので、Root.plistを右クリックし、Open as > Source Code を選択してください。

Source Codeを選択後、以下の内容を、そのまま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>Title</key>
                <string>About</string>
                <key>Type</key>
                <string>PSGroupSpecifier</string>
                <key>FooterText</key>
                <string>Copyright © 2019 hogehoge 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>
        <key>StringsTable</key>
        <string>Root</string>
    </dict>
</plist>

Copyrightのところだけ、ご自身の名前などに書き換えておいてください。その他の部分はそのままで結構です。

続いて、Acknowledgements.plistを作成します。Settings.bundle配下にAcknowledgement.plistを作成したいのですが、Settings.bundleを右クリックしNew Fileから直接Property listを作成できないようなので、Settings.bundleを作ったときと同様に、Projectのフォルダーを右クリックしNew FileからProperty Listを作成してください。名前はAcknowledgement.plistで良いかと思います。

f:id:siro_uma:20190326224015p:plain

作成したら、そのファイルをSettings.bundleの配下に移動させておいてください。移動後は以下のようなフォルダ構成になっているかと思います。

f:id:siro_uma:20190326224105p:plain:w350

これでSettings.bundleの準備は完了です。

CocoaPodsによるAcknowledgementsの書き出し

前項で準備したAcknowledgement.plistに対し、CocoaPodsからOSSのライセンスの情報を直接書き出します。

post_install do | installer |
  require 'fileutils'
  FileUtils.cp_r('Pods/Target Support Files/Pods-VolleyScorer/Pods-VolleyScorer-acknowledgements.plist', 'VolleyScorer/Settings.bundle/Acknowledgements.plist', :remove_destination => true)
end

上記のスクリプトをPodfileの末尾に追記してください。上記は私のプロジェクト名 VolleyScorer を使用しているので、その部分はご自身のプロジェクト名に書き換えておいてください。

上記を設定後、 pod install を実施することで、ライセンスの情報がAcknowledgement.plistに追記されます。

バージョンの書き出し

続いてバージョン情報の書き出しです。バージョン情報の書き出しは、Build Phasesの中でスクリプトを呼ぶことでそれを実現します。

Build PhasesからNew Run Script Phaseを選択し、Phaseを追加してください。

f:id:siro_uma:20190326224816p:plain

追加したら、Shellのコマンドに以下をコピペしてください。

APP_VERSION=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" $PRODUCT_SETTINGS_PATH)
/usr/libexec/PlistBuddy -c "Set :PreferenceSpecifiers:1:DefaultValue ${APP_VERSION}" "${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Settings.bundle/Root.plist"

以下のような形になるかと思います。

f:id:siro_uma:20190326225010p:plain

以上で、設定は完了です。

使ってみる

上記の設定が終われば、後はアプリをビルドし、デバイスにインストールすれば設定画面から今回の設定した項目が確認可能になります。

f:id:siro_uma:20190326225717p:plain:w300

まとめ

以上で、いい感じにバージョン情報とOSSのライセンス情報が設定画面から見えるようになりました。

ほぼ転載元の記事のままですが、一部の手順(Acknowledgement.plistを事前に用意すうなど)がなかったので、今回は改めて記事として投稿してみました。みなさま、元の記事と合わせて、ぜひ参考にしてみてください。