Travis CI と GitHub を連携して iOS アプリをテストする

最近 [DeviceWallpaper](https://github.com/starhoshi/DeviceWallpaper) というアプリをリリースして、勉強のためテストも書いているため[Travis CI](https://travis-ci.org/) と連携してテスト結果を README に表示させる手順をまとめてみる。

Travis CI は OSS なら無料で、 private は有料になっている。
[Travis CI \- Test and Deploy with Confidence](https://travis-ci.com/plans)

# 0. 前提

CocoaPods や Carthage はソース管理されていること。
ソース管理していない場合は毎回 Clone & Build が必要になるため、それらの設定を別途 .travis.yml に書く必要がある。

# 1. Sign Up と Switch ON

[Travis CI](https://travis-ci.org/) から Sign Up する。
そのあと CI したいレポジトリのスイッチを ON にする。

<img width="426" alt="スクリーンショット 2017-05-14 15.47.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/5678/3c5971d6-73d8-43a9-1c6b-d63f6efefb34.png">

## 設定

.travis.yml が無いと Build しないようにした。
しかし OSX Project の場合はいずれにしろ .travis.yml が無いと success することはない、 Linux で Build しようとしてしまうので。

<img width="645" alt="スクリーンショット 2017-05-14 15.53.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/5678/9533ddf8-b6bd-0e29-fb40-d7e179197f08.png">

# 2. fastlane test

テストは `bundle exec fastlane test` で動くようにした。

## Scheme の Shared をチェック

テストを実行するために Scheme を共有する必要がある。

<img width="723" alt="スクリーンショット 2017-05-14 16.26.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/5678/0882006d-324c-391b-6eee-40bacb905043.png">

## fastlane
### Scanfile

こんな感じで書いた、実物は [Scanfile](https://github.com/starhoshi/DeviceWallpaper/blob/master/fastlane/Scanfile) にある。

```rb
scheme "DeviceWallpaper"
configuration "Debug"

device "iPhone SE"
workspace "DeviceWallpaper.xcworkspace"

open_report true
clean true
skip_build true
output_types "html"
```

### Fastfile

scan するだけ。実物は [Fastfile](https://github.com/starhoshi/DeviceWallpaper/blob/master/fastlane/Fastfile) にある。

```rb
  lane :test do
    scan
  end
```

## fastlane を使わない場合

[Default Test Script](https://docs.travis-ci.com/user/languages/objective-c/#Default-Test-Script) に書いてある書き方でできそう、試してはいない。

# 3. Ruby version

[Travis CI: Precompiled Ruby Versions](http://rubies.travis-ci.org/) にあるように、2017/05/14時点で Ruby 2.4.1 は使えないので 2.4.0 以下にする必要がある。

.travis.yml に `rvm: 2.4.0` と書くか .ruby-version ファイルに 2.4.0 と書いておけば良い。

[CocoaPods \+ Swift で Travis CI を使う \- Qiita](http://qiita.com/halhorn/items/df448cc8b5ba4f1f17d4) には .ruby-version があるとコケるとあったが、[Using .ruby-version](https://docs.travis-ci.com/user/languages/ruby/#Using-.ruby-version) にあるように問題なく利用できる。

# 4. .travis.yml

[Building an Objective\-C or Swift Project \- Travis CI](https://docs.travis-ci.com/user/languages/objective-c/) を見ながら yml を書いた。

```yaml
osx_image: xcode8.3
language: swift
script:
  - bundle exec fastlane test --verbose
```

# 5. 結果

[starhoshi/DeviceWallpaper \- Travis CI](https://travis-ci.org/starhoshi/DeviceWallpaper)

成功した :congratulations: 

<img width="561" alt="スクリーンショット 2017-05-14 16.15.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/5678/324b0d97-d10b-082e-3c24-87e08286d4a6.png">

# 6. badge を README に貼る

Travis CI 上の `build: passing` をクリックするとダイアログが出るので、それを Markdown でコピーして README に貼る。

<img width="658" alt="スクリーンショット 2017-05-14 16.17.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/5678/82605537-6a54-2663-3f57-e8a68253fb58.png">

すると [こんな感じ](https://github.com/starhoshi/DeviceWallpaper#devicewallpaper) で README に badge が表示される :relaxed: 

<img width="287" alt="スクリーンショット 2017-05-14 16.21.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/5678/efb07657-b3d8-8d8b-c825-b037ae451934.png">

# 実際に動くサンプル

[GitHub - starhoshi/DeviceWallpaper: Device information wallpaper \(VIPER Architecture\)](https://github.com/starhoshi/DeviceWallpaper)
[Travis CI: starhoshi/DeviceWallpaper](https://travis-ci.org/starhoshi/DeviceWallpaper)