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

  • 37
    Like
  • 0
    Comment
More than 1 year has 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投げていきたい