Mac
Linux
iOS
Swift

SwiftがOSSになったのでSwift Package Managerとか試してみた

More than 3 years have passed since last update.

この記事はOUCC Advent Calendar 2015年12月4日記事として当日に書かれました。SwiftがOSS化されてすぐなので書かれている内容はすぐに古い間違ったものになる可能性があるので悪しからず


Swift OSS化!

本日未明、SwiftがAppleの予告通りOSS化されました

https://swift.org

GitHub(Apple)では以下のようなRepositoryがあります

* swift

* swift-package-manager

* swift-corelibs-foundation

* swift-llbuild

* swift-evolution

などなど…


Swift 2.2

Linuxでも使えるようになったらしいですが、とりあえずMacでやります

OS: El Capitan

% swift --version

Apple Swift version 2.1 (swiftlang-700.1.101.6 clang-700.1.76)
Target: x86_64-apple-darwin15.0.0

swift-package-managerを使ってみたいので、Swift 2.1ではダメです

https://swift.org/download を見ると、Swift 2.2 Snapshotがあるので、これ(swift-2.2-SNAPSHOT-2015-12-01-a-osx.pkg)をダウンロード&インストールします

ここで、これでインストールしたものは/Library/Developer/Toolchainsに入ります

% cd /Library/Developer/Toolchains/

% ls
swift-2.2-SNAPSHOT-2015-12-01-a.xctoolchain/
swift-latest.xctoolchain@

swift-latest.xctoolchain@は最新のやつへのシンボリックリンクです

肝心の2.2のswiftとかswift-build-toolはswift-latest.xctoolchain/usr/bin/にあり、既存のSwift 2.1は/usr/bin/にあるので、この状態でTerminalで% swift --versionしても2.1のままです

なので、今回インスコしたやつらを使うために

% cat ~/.zprofile

PATH="/Library/Developer/Toolchains/swift-latest.xctoolchain/usr/bin:${PATH}"
export PATH

としてPATHを通します

こうすると

% swift --version

Apple Swift version 2.2-dev (LLVM 46be9ff861, Clang 4deb154edc, Swift 778f82939c)
Target: x86_64-apple-macosx10.9

となります


swift-package-manager

よくわからないけどとりあえずPackage Managerっての気になるので使ってみたい

githubのドキュメントを見よう見まねでやってみる

Package.swiftってのがManifest Fileで、main.swiftってのがエントリポイント的なアレっぽい

% tree swiftpm_test 

swiftpm_test
├── Package.swift
└── Sources
├── hoge.swift
└── main.swift


Package.swift

import PackageDescription

let package = Package(
name: "SwiftpmTest"
)



Sources/hoge.swift

class Hoge {

func hoge() {
print("hoge")
}
}


Sources/main.swift

let hoge = Hoge()

hoge.hoge()

% swift build

% .build/debug/SwiftpmTest
hoge


Package.swift

import PackageDescription

let package = Package(
name: "SwiftpmTest",
dependencies: [
.Package(url: "git@github.com:hayashikun/Regex.git", majorVersion: 1, minor: 1),
]
)


% swift build

Cloning Packages/Regex
<unknown>:0: error: no such file or directory: '/path/to/swiftpm_test/Packages/Regex/Package.swift'

とりあえずRegexのライブラリにPackage.swiftを追加して、RegexTestsをTestsにリネームして、swift buildしてみて通ったので、branch切ってtagつけてリリース

HogeTestsみたいなのはダメ、Testsに要リネームっぽい (#16がmargeされれば変わるかも?)

majorVersion: 2, minor: 0に変更してswift buildするも結果変わらず

Cloneされたやつはmasterのbranchだった


感想

これまで書いてた記事をやめて、突然出てきたSwift OSS化を記事にしたのでちょっとつらぽよだった

これからCarthageどうなるんだろう…

正直まだまだ謎いというかバグってるっぽいとこ多い気がする

D言語のdubに親しい物を感じた(SwiftもD言語リスペクトしてるんじゃね?D言語最高!!!)

documentのミスをPR送ったけど別の人に先越されてdupでcloseされたし悲しい…

SwiftはC++だからよくわからないけどこっちはだいたいわかるので、PR投げていきたい