[Xcode/Swift] SPMでLicensePlistを導入する

とあるプロジェクトで、CarthageとかCocoaPodsとかからSPMに管理移行するタスクをしていたので、その中でLicensePlistもSPMに移行することになったので備忘録。

LicensePlistのインストール

XcodeのAdd Package Dependenciesから追加、ビルドターゲットへの追加は不要。

Build Toolフローの追加

Pods管理自体は、Build Phaseでわちゃわちゃ書いて実行してましたが、SPMで入れるとBuild ToolフローにLicensePlistBuildToolを追加すればOKだそう。

ScriptCommandの自動追加

Xcode上でプロジェクトルート部分で右クリック、AddAcknowledgementsCopyScriptCommandを実行。

正常に実行されると、Build Phaseの最後に自動でスクリプトが追加されるので、これはいじらずにそのままにしておく。

license_plist.ymlの追加

プロジェクトルート直下に、license_plist.ymlを追加する。

中身は、プロジェクトがSPMオンリーなら以下でOK:

options:
 xcodeprojPath: "*.xcodeproj"

Podsなり、Carthageも混在している場合は、xcodeprojじゃなくてxcworkspacePathになる可能性があるので、この辺りのオプション指定はREADMEを読んで必要なものを入れておきましょう。

オプションデフォルト値説明
--cartfile-pathCartfileCarthageの Cartfile のパスを指定
--mintfile-pathMintfileMintの Mintfile のパスを指定
--nestfile-pathnestfile.yamlnestfile.yaml のパスを指定
--pods-pathPodsCocoaPodsの Pods ディレクトリのパスを指定
--package-pathPackage.swiftSwiftPMの Package.swift のパスを指定。未指定時は Package.resolved を自動探索します。
--package-pathsなし複数の Package.swift がある場合に、スペース区切りで複数指定。
--package-sources-pathなしクローン済みのSwift Packageのソースディレクトリを指定。指定するとGitHub APIの代わりにローカルファイルを使用。
--xcodeproj-path"*.xcodeproj".xcodeproj のパスを指定して、そこから Package.resolved を読み込ませる。
--xcworkspace-path"*.xcworkspace".xcworkspace のパスを指定して Package.resolved を読み込ませる(--xcodeproj-path より優先)。
--output-pathcom.mono0926.LicensePlist.Output生成されるライセンスファイルの出力先パスを指定。
--github-tokenなしGitHub APIのレートリミットを回避するためのGitHubトークンを指定(環境変数 LICENSE_PLIST_GITHUB_TOKEN でも可)。
--config-pathlicense_plist.yml設定ファイルのパスを指定(手動追加や除外ライブラリの設定用)。
--prefixcom.mono0926.LicensePlistデフォルトのファイル名に代わる、出力ファイルのプレフィックスを指定。
--html-pathなしパスを指定すると、HTML形式の謝辞(Acknowledgements)ファイルを生成する。
--markdown-pathなしパスを指定すると、Markdown形式の謝辞ファイルを生成。
--csv-pathなしパスを指定すると、CSV形式の謝辞ファイルを生成。
--license-file-namesLICENSE, LICENSE.*クローンされたSwift Packageのライセンスファイル名パターンを指定(--package-sources-path 併用時のみ有効)。
--forcefalse変更がない場合でも、プログラムを中断させずに強制的に再生成を実行する。
--add-version-numbersfalse有効にすると、ライブラリ名にバージョン番号を付与(例: SomeLibrary (X.Y.Z))。
--add-sourcesfalse有効にすると、ライブラリのソースURLが出力に含まれる場合にそれを追加する。
--suppress-opening-directoryfalseファイル生成・更新時にターミナルやFinderが自動で開く挙動を抑制する。
--single-pagefalse各ライセンスを別ページに分けず、1つのページにまとめてリスト化する。
--fail-if-missing-licensefalseライセンスが見つからないパッケージが1つでもある場合、終了コード 1 でエラーとする。
--silence-modefalseロガーの出力を完全に非表示(--verbose と同時指定時は verbose が優先)。
--verbosefalse通常よりも詳細なログを出力する。
--no-colorfalseログ出力をモノクロにする。CI/CD環境での文字化け防止に有効です。
--colorfalseログ出力を常にカラーにする(--no-color と同時指定時は color が優先)。
--sandbox-modefalseネットワーク通信を行わないサンドボックスモードを有効にする。Swift Packageの解析には --package-sources-path が必須。
--no-sandbox-modefalseサンドボックスモードを無効にする。

Settings.bundleの追加

XcodeからCommand + Nで追加してもよし、めんどくさければ公式RepoからSettings.bundleをそのまま貼り付けてもOKです。

en, jaはなくてもOK、表示する時のオプション要素ぽい。

ビルドして確認

一応Clean Build (Command + Shift + K)して、ビルドを実行。

設定アプリから対象のアプリ画面を選択して、LicenseセクションができていればOK。