TravisCI
Swift

CocoaPods + Swift で Travis CI を使う

More than 3 years have passed since last update.


この記事のゴール

以下の環境で GitHub へのプルリクエスト・プッシュ時にユニットテストが走る環境を構築することを目指します。


  • GitHub は公開リポジトリ

  • Swift

  • CocoaPods 使用


全体の流れ


  • Travis CI に登録

  • XCode のプロジェクトの修正

  • .travis.yml の作成

以下その手順です。


Travis CI に登録

Travis CI に登録をします。

Travis CI のプロフィールページに行き、 CI したいリポジトリを ON にします。

image


プロジェクトの修正

出展:Building an Objective-C Project

Travis CI を使うために XCode でプロジェクトに以下の修正をする必要があります。


  • テスト対象のプロジェクトを Shared にする

  • 依存モジュールを明示的にビルドするようにする

以下手順


  1. メニューから Product -> Scheme -> Manage Schemes を選択


    • image



  2. テスト対象のプロジェクトの Shared チェックボックスを ON にします


    • image



  3. Cocoa Pods などプロジェクト間の依存がある場合、明示的に依存関係を設定します


    1. テスト対象プロジェクトを選択して Edit を選択


      • image



    2. 左パネルの Build タブを選択


    3. + ボタンから、各依存モジュールをプロジェクトに追加。 CocoaPods は Pods という名前で表示されています


      • image



    4. 依存モジュールをテスト対象より上にドラッグして移動


      • image






UITests を無効化

image

当方の環境では 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 します


完了!

image

やったね!

(うまく動かないのを調べたりやり過ごしたりで1日つかいました。。)


Travis CI 対応での修正 PR サンプル

私の環境での差分です。

https://github.com/halhorn/TimeLogger/pull/3


その他はまったところ


.ruby-version があるとはまる

Travis CI は .ruby-version に従って ruby を install しようとするが失敗する。

結局 .ruby-version を消しました。悲しい。


Cocoa-Pods 導入時は最低一つはライブラリ入れてる必要あり?

一つも入っていない場合、

image

のオレンジ色のアイコンが出なかった。