iOSアプリのCIについて調べてみた。

~~この記事は[Wanoグループ Advent Calendar 2016](http://qiita.com/advent-calendar/2016/wano-group)の11日目です。~~
嘘です。一日忘れてたら他メンバーにとられたので12日目になりました。

# 結論
* とりあえずやってみるならbuddybuildがイケてそう。

# 以下詳細
## 事の経緯
最近うちでアプリ開発してて、人的なテストにかける工数がかなり大きくなってきたので、そろそろいい感じにCIとか回して全体の工数減らせたらいいよねー、って話がでてきた。
なので、iOSアプリでCI回す方法ってどんなのあるんかね、ってことで調べてみた。

## 前提条件
* bitbucket対応
* 外部ホスティング
* iOSとAndroid対応
* FabricとかSlackとかbitbucketとかJIRAとかと連携できたら嬉しいよね

## 調べてみたCI
http://engineering.otobank.co.jp/entry/ios-build-switch-to-bitrise-from-circleci
だいたいのことはこの辺に書いてある。
ちょっと情報が古いのでCI一覧をアップデートしておく。

| | [CircleCI](https://circleci.com/) | [Travis CI](https://travis-ci.com/) | [BITRISE](https://www.bitrise.io) | [GREENHOUSE](https://greenhouseci.com/) | [buddybuild](https://www.buddybuild.com/) |
|:-:|:-:|:-:|:-:|:-:|:-:|
| 値段      | $39/月  | $69/月 | Free     | Free | Free |
| メンバー数 | 2人     | ？      | 2人      | 1人  | 1人 |
| ビルド回数 | 5回/日   | なし   | 200回/月 | なし     | なし | 
| ビルド時間 | 500分/月 | なし   | 10分/回  | なし     | なし |
| 同時ビルド数 | 2      | 1     | 1        | 1    | 1 |
| その他    |         | bitbucket非対応だった | workflow機能が充実  | 実機によるテストらしい | クラッシュレポート/手動テストサポート機能 |

## どれを選択するか
とりあえず無料でしばらくまわしてみてから考えたかったんだけど、現状無料枠があるのはBitrise、Greenhouse、buddybuildの3つしかない。
そのうち、サクッとできそうなBitriseとbuddybuildをいじってみて比較してみた。

## 比較
### セットアップの容易さ
どちらもフローに従ってリポジトリ設定してゴニョゴニョやるだけでだいたい設定できる。
個人的にはbudybuildのほうが余計な機能がない分設定しやすかった気がする。

ちなみに
bitriseの設定方法は[このへん](http://qiita.com/keygx/items/ab6149476f43ec51eb5c)を参考に、
buddybuildの設定方法は[このへん](http://engineering.otobank.co.jp/entry/ios-build-by-buddybuild)を参考にすれば良いと思う。
どちらも画面のフローに従って設定すればいいだけだからそんなに問題はないと思うけど。

あと、buddybuildでbitbucketのリポジトリを設定する際に、github/bitbucket/gitlab/sshのうちどれでリポジトリ設定するか聞かれるんだけど、自分はなぜかbitbucketで設定してもうまく動かなかったので、sshの項目か項目からリポジトリ設定したらうまく行った。

### 特徴
#### **Bitrise**
workflowすげぇ。
これだけの機能（Step）と連携できる。
https://www.bitrise.io/integrations

しかもこんな感じでそれぞれのStepを管理画面上でポチポチっと数珠つなぎにしてやればCIのworkflowができあがる。
![スクリーンショット 2016-12-12 19.42.47.png](https://qiita-image-store.s3.amazonaws.com/0/69711/77ff22c2-9b6e-d0ad-7906-35c8c1dc1302.png)
さらにそれぞれのStepは全部gitにソースコードがのっていて、どういう挙動をするのか見ることができる。
もちろん自分でもStepを作れる。

#### **buddybuild**
手動テストフィードバックがすげぇ。
CIでテストとか回して最終的にテスターに配布した時に、テスターからのバグ報告をスムーズに受け取る機能がSDKに仕込まれていてこれがかなりアツい。

![TSiwjSoWQHqs8RFIt7JU_Phone - Feedback.png](https://qiita-image-store.s3.amazonaws.com/0/69711/99af2e5b-e987-b719-c44c-487ac1bbfc2d.png)
(参考) http://docs.buddybuild.com/docs/leaving-feedback


Step 1のように適当な箇所でスクリーンショットを撮る
↓
Step 2の画面になるので、テスターがフィードバックしたいエリアをドラッグして赤枠で囲む
↓
囲んだらStep 3の画面でフィードバック内容を送信する

以上、3ステップでOK。

この機能はサイトに行くとbuddybuildが用意した適当なアプリで一連の流れを体験できるので、是非やってみてほしいところ。
https://dashboard.buddybuild.com/demo

### 制約等
実際のプロジェクトを回してみたらわかるけど、Bitriseの無料枠のビルド時間10分がかなりキツい。
うちではCarthageとCocoaPodsの両方をつかってるのだが、Carthageのビルドが毎回走るとそれだけで15分とかかかってしまう。
しょうがないのでリポジトリにビルド済みframeworkを突っ込んでみたけど、それでも10分ギリギリなので、無料枠で継続して運用するのは難しそう。

また、Bitriseのworkflow機能は魅力的だが、実はbuddybuildでもシェルスクリプトをCIのサイクルで回すことができるので、ぶっちゃけこれである程度のことができてしまう。
http://docs.buddybuild.com/docs/custom-prebuild-and-postbuild-steps

もちろん、slackとかjiraとかbitbucketとかの基本的なサービスとの連携は両者ともできる。

# まとめ
* Bitriseほど多機能なworkflowはなくても大丈夫だった
* 遠方のテスターにテストをお願いすることが多々あるため、手動テストフィードバック機能が魅力的
* とりあえず無料枠で最初はある程度動かせそう

というわけでbuddybuildでしばらくまわしてみようと思います。