🐥
[TIPS]SwiftPMでライブラリが複数ある時のパッケージ導入方法
背景
先日、swift-collectionsに含まれるOrderedSetを利用する機会がありました。
これまでの経験上、パッケージ名とライブラリ名が同じものばかりを利用しており、パッと導入する方法がわからなかったのでメモ代わりに解決方法を残しておきます。
問題
下記はswift-collectionsに定義されているPackage.swiftの一部です。
見て分かる通り、productsには複数のライブラリがそれぞれ別々に定義されています。
let package = Package(
name: "swift-collections",
products: [
.library(name: "Collections", targets: ["Collections"]),
.library(name: "DequeModule", targets: ["DequeModule"]),
.library(name: "OrderedCollections", targets: ["OrderedCollections"]),
]
// 以下省略
)
解法
例えば、開発しているアプリをDemoAppとし、swift-collectionsに含まれるOrderedCollectionsを利用したい場合は下記のように記述できます。
なお、今回はサンプルコードとしてわかりやすさのために最低限の定義しかしていません。
let package = Package(
name: "DemoApp",
dependencies: [
.package(url: "https://github.com/apple/swift-collections.git", from: "0.0.1"),
],
targets: [
.target(
name: "DemoApp",
dependencies: [
.product(name: "OrderedCollections", package: "swift-collections")
]
),
]
)
- いつも通り
dependenciesに利用したいpackageのURLなどを定義する - ターゲットの
dependenciesにnameを指定して追加する
という順序を踏めば正しくライブラリを利用できるようになります。
Discussion