🐥
[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