Travis CIがこのほどXcode 6をサポートしました。
Xcode 6をサポートしたということは、Swiftもサポートしたということです。これでようやくOSSなSwift libraryをCIできるようになりました。めでたい
さっそくSwiftライブラリをCIしてみましたが、ハマりどころが沢山ありましたので共有します。以下のプロジェクトで実際にCIでunit testを実行しているのでご覧ください。
Travis CIの設定のポイント
ポイントは以下のとおり。
- test schemeをsharedにする
- Xcodeのscheme managerでtest用のschemeをsharedにし、リポジトリにコミットする。これがないとtest schemeを認識できません
- 最新のxctoolを使う
- xcodebuildでパラメータを変えて試してみたのですがどうしてもうまく行きませんでした
- Travis CIが用意しているxctoolだとバージョンが低いので、xctool 0.2.1 以上にアップデートして使う必要があります
- .travis.yml の xcode_sdk ないし xctool の -sdk オプションに iphonesimulator を指定する
- xctool testコマンドは自動的に -sdk iphonesimulator を指定してもよさそうですが、0.2.1 の時点だと明示的に指定する必要がありました
.travis.yml (xctool版)
これを踏まえると.travis.ymlは以下のようになります。実際には、makeコマンドにこの設定を全部いれて、.travis.ymlはmake一発にしておくほうが簡単かもしれないですね。
language: objective-c
before_script:
- brew update && brew upgrade xctool
xcode_project: JsonSerializer.xcodeproj
xcode_scheme: JsonSerializerTests
xcode_sdk: iphonesimulator
ところでTravis CIのために試行錯誤する場合、一度branchを作ってそこで試行錯誤し、終わったらそのブランチを git merge --squash
するとメインストリームにtravisのためだけの試行錯誤の記録を残さずに済むのでいいですね。
追記: xctoolがうまくいかないとき
どういう条件かわかりませんが、xctoolではだめでxcodebuildを使わなければならないプロジェクトもあります。たとえば次のリポジトリがそうです。
その場合、Makefileでxcodebuildを呼ぶようにして、.travis.ymlはmakeコマンドを呼ぶだけにして解決できます。