この記事のゴール
以下の環境で GitHub へのプルリクエスト・プッシュ時にユニットテストが走る環境を構築することを目指します。
- GitHub は公開リポジトリ
- Swift
- CocoaPods 使用
全体の流れ
- Travis CI に登録
- XCode のプロジェクトの修正
- .travis.yml の作成
以下その手順です。
Travis CI に登録
Travis CI に登録をします。
Travis CI のプロフィールページに行き、 CI したいリポジトリを ON にします。
プロジェクトの修正
出展:Building an Objective-C Project
Travis CI を使うために XCode でプロジェクトに以下の修正をする必要があります。
- テスト対象のプロジェクトを Shared にする
- 依存モジュールを明示的にビルドするようにする
以下手順
- メニューから Product -> Scheme -> Manage Schemes を選択
- テスト対象のプロジェクトの Shared チェックボックスを ON にします
- Cocoa Pods などプロジェクト間の依存がある場合、明示的に依存関係を設定します
UITests を無効化
当方の環境では UITests が TravisCI で動かなかったため、これを無効化しました。
UITests が必要な人は頑張って下さい。
https://github.com/facebook/xctool/issues/534 あたりが関係あるかもしれません。
.travis.yml をリポジトリに追加
以下のような内容で .travis.yml を作ります。 TimeLogger の部分は自分のテスト対象に書き換えます。
language: objective-c
osx_image: xcode7.2
xcode_workspace: TimeLogger.xcworkspace
xcode_scheme: TimeLogger
xcode_sdk: iphonesimulator
- Swift の CI ですが language は objective-c で大丈夫です
- XCode のバージョンによってコードがコンパイルできないことがあるので、開発に使っている XCode のバージョンを osx_image に指定
- 公式では xcode_scheme は HogeHogeTests を指定するようになっていますが、テスト用の Scheme が無ければテスト対象の Scheme を指定すれば動きます
- xcode_sdk をつけないと code signing うんぬんで落ちます
以上を commit, push します
完了!
やったね!
(うまく動かないのを調べたりやり過ごしたりで1日つかいました。。)
Travis CI 対応での修正 PR サンプル
私の環境での差分です。
https://github.com/halhorn/TimeLogger/pull/3
その他はまったところ
.ruby-version があるとはまる
Travis CI は .ruby-version に従って ruby を install しようとするが失敗する。
結局 .ruby-version を消しました。悲しい。