🛠️
Swift Packageのライブラリを使っているXcodeProjectで依存リストを出力する方法
事前準備
Homebrewなどでjq
コマンドをインストールしておく
SourcePackages/workspace-state.jsonをパースする
Packageの依存解決をすると、DerivedData
の中のSourcePackages
にworkspace-state.json
というファイルが生成されます。この中にSPMで入れたライブラリの情報が格納されています(内容は大体Package.resolvedと同じです)。これをパースすることでライブラリ名とそのバージョンの一覧を出力できます。
cat [SourcePackagesのパス]/workspace-state.json | \
jq -r '.object.dependencies[] | .packageRef.name + ":\t" + .state.checkoutState.version'
出力例
BoringSSL-GRPC: 0.9.0
Slash:
KeychainAccess: 4.2.2
LicenseChecker: 0.1.0
LicenseList:
nanopb: 0.4.6
ObjectMapper: 4.2.0
PactSwiftToolbox:
Reachability: 5.1.0
RxSwift: 6.2.0
swift-collections: 1.0.2
Assimp: 2.1.0
プロジェクトのBuild PhasesのRunScriptでこれを行う場合は${BUILD_DIR%Build/*}SourcePackages
でパスを取得できます。
また、Xcode -> Preferences -> Locations -> Derived Data からDerivedDataをFinderで開けます。SourcePackagesのフォルダを選択してOption + Command + C
でフォルダへのパスをコピーできます。
備考:Package.resolvedを参照しない理由
Package.resolvedのJSONオブジェクトの形式はSwift Packageの導入方法やプロジェクトの構成の仕方によって変わるので中の構成を見てみないとjq
でのパースの仕方が定りません。
例えば、(1)XcodeのGUIだけでPackageを導入している場合、(2)ローカルPackageの中で外部Packageを導入している場合、(3)(1)と(2)を組み合わせている場合など。なのでPackage.resolvedを参照する場合のjq
のパース方法は各自調整してください。
Discussion