Edited at
SwiftDay 3

Swift Package Managerの使い方

More than 1 year has passed since last update.


Swift Packager Manager(SwiftPM)とは?

ライブラリの依存関係を管理してくれるツールで、

CocoaPodsCarthage と同じようなものです。

マルチプラットフォームで使えるのでサーバーサイドSwift1で採用されています。

GitHub: apple/swift-package-manager

略称は SPMSwiftPM の2つが見られますが、

ドキュメントでは後者が使われているので SwiftPM を使います。

ここでは使い方を紹介します。なおライブラリの作り方は別にまとめました。

SwiftPM ライブラリとシステムモジュールを作る方法


SwiftPMの使い方


セットアップ

まずは作業ディレクトリを作成します。

$ makedir Sample

$ cd $_
$ swift package init --type=executable

Creating executable package: Sample

Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/main.swift
Creating Tests/


依存パッケージ(ライブラリ)を指定する

Package.swift に依存パッケージを指定します。

import PackageDescription

let package = Package(
name: "Sample",
dependencies: [
.Package(url: "git@github.com:tid-kijyun/SamplePackage.git", majorVersion: 1)
]
)


バージョンの指定

依存パッケージの指定部分は複数のイニシャライザが用意されています。

これらを使うことで、より細かいバージョン指定が可能です。

.Package(url: String, versions: Range<Version>)

.Package(url: String, versions: ClosedRange<Version>)

.Package(url: String, majorVersion: Int)

.Package(url: String, majorVersion: Int, minor: Int)

.Package(url: String, _ version: Version)

// バージョン1.0.0以上1.2.0以下

.Package(url: "git@github.com:tid-kijyun/SamplePackage.git", versions: "1.0.0"..."1.2.0")

// バージョン1.0.0以上2.0.0未満
.Package(url: "git@github.com:tid-kijyun/SamplePackage.git", versions: "1.0.0"..<"2.0.0")

// メジャーバージョン1の最新版(上と同じ)
.Package(url: "git@github.com:tid-kijyun/SamplePackage.git", majorVersion: 1)

// メジャーバージョン1、マイナーバージョン2の最新版
.Package(url: "git@github.com:tid-kijyun/SamplePackage.git", majorVersion: 1, minor: 2)

// バージョンを固定する
未実装、ピン機能というのが実装されるようです。(SE-0145)

バージョンを文字列で指定する場合は下記フォーマットに従う必要があります。

このフォーマットに従っていないパッケージは利用できません。

"major.minor.patch[-prereleaseIdentifiers][+buildMetadata]"


@swift-3

GitHubを見ているとフォーマットに一致していない 3.0.1@swift-3 のようなタグを見かけるかもしれません。

この @swift-3 はSwiftPMが自動判別して利用するオプションなので使う側は気にする必要はありません。

詳細はVersion-specific tag selectionを参照してください。


依存パッケージのビルド

$ swift build

Cloning git@github.com:Alamofire/Alamofire.git

HEAD is now at 7a17b1d Added release notes to the CHANGELOG and bumped the version to 4.2.0.
Resolved version: 4.2.0
Compile Swift Module 'Alamofire' (17 sources)
Compile Swift Module 'Sample' (1 sources)
Linking ./.build/debug/Sample


コーディング

Sources/main.swift にコードを記述します。

import SamplePackage

sayHello()


ビルド

$ swift build

Compile Swift Module 'Sample' (1 sources)

Linking ./.build/debug/Sample


実行

$ .build/debug/Sample


その他


Xcodeを使う

コマンドでXcodeのプロジェクトを生成できます。

ただし依存パッケージを追加・削除するたびに実行する必要があります。

$ swift package generate-xcodeproj

generated: ./Sample.xcodeproj


SwiftPMを使用した時だけ実行するコード

SwiftPMのビルド環境では SWIFT_PACKAGE が定義されているのでこれを利用します。

#if SWIFT_PACKAGE

import SamplePackage
#endif

このようにすると、SwiftPMを使用した時だけ import SamplePackage が実行されます。


参考

Swift Package Manager Documentation





  1. IBM-Swift/Kituraなど。