↓のものはCarthageだったが、そのSwift Package Manager (Swift 4)でのやりかた
外部ライブラリをimportして実行可能な*.swiftファイルをつくる
https://qiita.com/banjun/items/3f22b4951bca07cc55c7
次のような先頭行をもつ main.swift
を使うと、 cloneしてきて ./main.swift
で(ビルド&)実行できる。
#!/bin/sh
":" //#; DIR=$(dirname $(readlink $0 || echo $0))
":" //#; env -i PATH=$PATH swift build --package-path "$DIR" -Xswiftc -suppress-warnings -Xswiftc -sdk -Xswiftc $(xcrun --show-sdk-path --sdk macosx) && exec "$DIR/.build/debug/bansan" "$@"
import Foundation
import SourceKittenFramework
// SourceKittenFrameworkをつかうコード
※実行モジュール名(Package.swiftのexecutable)が bansan
のとき
SPMでは、メインファイルは main.swift
で決め打ちのようで、メインのスクリプトとして他のファイル名を使うことはできない。executableのターゲットの、メインファイルではないファイルでは、トップレベルに #!
を置くとビルドエラーになる(Hashbang line is allowed only in the main file
)。つまり1パッケージに複数の hoge.swift
, fuga.swift
を置くという運用をしたい場合は、もうすこし複雑になりそう。
追記
iOSアプリのビルドフェーズから実行すると、環境変数に引きずられて、iPhone SDKで swift build
してしまい失敗することがある(失敗しないこともある)。env -i PATH=$PATH
で PATH
以外の環境変数をクリアし、そのような場合にも影響しないようにしている。