Ubuntu16.04 で SwiftPackageManager を使ってみる
Swift が OSS になってしばらく経ち、サーバサイドなどにも使われるようになってきたので、僕も Ubuntu に入れてみました。
Swift.org の手順通りにやってもダメだったので備忘録で残しておきます。
あと、Swift3.0 で導入された Swift PackageManagerも簡単に使ってみました。
インストールするバージョン
- Swift 4.0.2
動作環境
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.3 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.3 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
インストール方法
ツールのインストール
$ sudo apt-get install clang libpython2.7 libxml2
Swift.org の手順では、clang のインストールだけで良いと書いてあったが、libpython2.7 がないとエラーが出たので、追加しておきました。libxml2 も同様。
error while loading shared libraries: libxml2.so.2: cannot open shared object file: No such file or directory
Swift のダウンロードとインストール
$ wget https://swift.org/builds/swift-4.0.2-release/ubuntu1604/swift-4.0.2-RELEASE/swift-4.0.2-RELEASE-ubuntu16.04.tar.gz
$ tar zxfv swift-4.0.2-RELEASE-ubuntu16.04.tar.gz
$ sudo mv swift-4.0.2-RELEASE-ubuntu16.04 /usr/local/swift
URL は変わる可能性もあるので、公式サイトで確認してください。 あとは /usr/local/swift/usr/bin に PATH を通せばOK。
確認
$ swift --version
Swift version 4.0.2 (swift-4.0.2-RELEASE)
Target: x86_64-unknown-linux-gnu
Swift Package を使ってみる
swift_test という名前のディレクトリを作って、Package の初期化を行います。
$ swift package init --type executable
Creating executable package: swift_test
Creating Package.swift
Creating README.md
Creating .gitignore
Creating Sources/
Creating Sources/swift_test/main.swift
Creating Tests/
すると、Hello, world!
を出力するだけのテンプレートが生成されます。
ビルドしてみましょう。
$ swift build
Compile Swift Module 'swift_test' (1 sources)
Linking ./.build/x86_64-unknown-linux/debug/swift_test
.build/x86_64-unknown-linux/debug/swift_test に実行ファイルが生成されるので、それを実行します。
$ .build/x86_64-unknown-linux/debug/swift_test
Hello, world!
デフォルトでは debug ビルドになりますが、-c release
をつけることで release ビルドになります。
$ swift build -c release
Compile Swift Module 'swift_test' (1 sources)
Linking ./.build/x86_64-unknown-linux/release/swift_test
デバッグ情報がなくなりバイナリサイズが小さくなるので、リリース時にはこちらを使うのが良いでしょう。Hello, world!
を出力しているだけでも 3KB 減ったのでもっと大きいプロジェクトになると差が歴然としてくるでしょう。バイナリサイズは小さいにこしたことはない。
$ ls -lh .build/x86_64-unknown-linux/debug/swift_test .build/x86_64-unknown-linux/release/swift_test
-rwxr-xr-x 1 takuya takuya 18K Nov 13 11:24 .build/x86_64-unknown-linux/debug/swift_test
-rwxr-xr-x 1 takuya takuya 15K Nov 13 11:25 .build/x86_64-unknown-linux/release/swift_test
プラグインなどを使用したい場合やもっと細かい挙動を変えたい場合は Package.swift
を修正してください。このあたりは僕も勉強して記事にしていきたいと思います。
Apple が公式でサンプルを出しているので、こちらも参考にしてみてください。
apple/example-package-playingcard
TravisCI との連携
SwiftPackageManager を使って作成したプロジェクトも TravisCI でビルド・テストができます。 一番シンプルな設定は以下の通りです。 Linux 上で実行する方法が分からなかったので、osx で動かしています。知っている人がいたらこっそり教えてください・・・
language: objective-c
osx_image: xcode9.3beta
script:
- swift build
- swift test