iOS Swift

【Swift】Cocoapodsライブラリのライセンス表示方法

2022年1月30日

Cocoapodsでサードパーティライブラリを利用する場合、ライセンス情報の表示が必須の場合があります。
その際のライセンス情報の自動取得と表示方法をご紹介します。
また、アプリ内に表示する方法も最後に説明します。


Settings.bundleを追加

プロジェクトフォルダ直下にSettings.Bundleを追加します。


名前はそのままでCreate



Root.plistを編集

追加されたSettings.bundle直下にあるRoot.plistを下記コードに丸ごと置き換えてください。
(FooterTextは適宜変更してください)

<?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 © 2020 XXXXXXXXXXXXXXXXXXX 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>



Acknowledgements.plistを追加

ライセンス情報用のplistファイルを追加します。


名前はAcknowledgements.plistにしてCreate


Acknowledgements.plistをSettings.bundle直下に移動します。





Podfileを編集

Podfileに下記コードを追加します。
(「●●●●●●●●」の箇所はプロジェクト名に置き換えてください)

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


Podファイルは以下のようになります。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

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

target 'Sample' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for Sample

end


ターミナルでpod installを行うと、Acknowledgements.plistが更新されて以下のようになります。



結果

設定アプリから対象のアプリを選択すると以下のようにバージョン情報とライセンス情報(Acknowledgements)の項目が追加されています。


Acknowledgementsをタップするとライセンス情報の詳細画面が開きます。





アプリ内にライセンス情報を表示する場合

設定アプリではなく、アプリ内に直接ライセンス情報を表示したい場合は下記コードでライセンス文字列を成形した状態で取得することができます。

/// Acknowledgements.plistからライセンステキストを成形して返す
///
/// - Returns: ライセンステキスト
func getAcknowledgementsText() -> String {
    let acknowledgementsPlistPath = "./Settings.bundle/Acknowledgements.plist"
    var acknowledgementsTextData: [String] = []
    let filePath = Bundle.main.path(forResource: acknowledgementsPlistPath, ofType: nil)
    if let infoList = NSMutableDictionary(contentsOfFile: filePath!) {
        if let acknowledgementsDataList = infoList.value(forKeyPath: "PreferenceSpecifiers") as? [[String: String]] {
            for acknowledgementsData in acknowledgementsDataList {
                if let titleData = acknowledgementsData["Title"] {
                    acknowledgementsTextData.append(String(describing: titleData))
                }
                if let footerData = acknowledgementsData["FooterText"] {
                    acknowledgementsTextData.append(String(describing: footerData))
                }
            }
        }
    }
    var acknowledgementsText: String = ""
    for text in acknowledgementsTextData {
        acknowledgementsText.append(text)
        acknowledgementsText.append("\n\n")
    }
    return acknowledgementsText
}
  • この記事を書いた人

ツシマ ショウヘイ

フリーランスのiOS/Androidアプリエンジニア。 自作アプリがストアのカテゴリ別ランキングで2位を達成!! 自分用のメモを兼ねてブログを始めました。