しばらくiOSのCI環境がローカルのJenkinsだけで、メンテめんどいわPCのリソース食うわログ共有めんどいわでずっとクラウドに移行したかったんですが、ようやくTravisCIでうまくいったのでハマりどころをメモしておきます。

最終形

とりあえず2014年12月15日現在動いてる.travis.ymlはこちらです。

1
2
3
4
5
6
7
8
# .travis.yml

language: objective-c
xcode_workspace: xxxx.xcworkspace # xxx.xcodeprojな人はxcode_projectを使ってください
xcode_sdk: iphonesimulator
xcode_scheme: Development # 自作スキーム。適宜変更してください
notifications:
  slack: xxxxxxxxxxxxxxxxx
SPONSERD LINK

ハマりどころその1: Timed out waiting 120 seconds for simulator to boot

ちょっと前に本家のドキュメント見ながらやって挫折したんですが、とりあえずぐぐって出てきたのがこの辺。

上の方はRakefileでごりごりがんばる感じなんですが、どちらも最終的に叩くのはxcodebuildコマンドです。テスト流すのに必要最低限のRakefileだけ書いてローカルで叩いてみると・・・

2014-12-15 20:47:58.094 xcodebuild[72054:4135139]  iPhoneSimulator: Timed out waiting 120 seconds for simulator to boot, current state is 1.

っていうエラーが出てきました。そういえば最近ローカルのJenkinsもずっと失敗しっぱなしやし(だからTravis化に踏み切ったんですが)まあ環境の問題かなーと思って、.travis.ymlをこんな感じで書きました。

1
2
3
4
5
6
7
8
# .travis.yml

language: objective-c
install:
  - bundle install --path=vendor/bundle --binstubs=vendor/bin
  - bundle exec pod install
script:
  - bundle exec rake test

これをpushしたら、なんとTravisでもおんなじエラーが出てしまいました。

ここでこのエラーをだいぶぐぐってStack Overflowの英語とにらめっこしたりしてたんですが、結局Rakefileは一旦諦めて、やっぱり本家の通りやってみようということでこうなりました。

1
2
3
4
5
# .travis.yml

language: objective-c
xcode_workspace: Best10.xcworkspace
xcode_scheme: Development

ログをよくよく見ると、Xcode 6ではxcodebuildではなくxctoolというコマンドを使う必要があるようです。ローカルJenkinsで失敗してたのもこのせいっぽいです。

$ xctool -workspace xxxx.xcworkspace -scheme Development -sdk iphonesimulator build test

すると先ほどのエラーとは別のエラーが出てました。

ハマりどころその2: CodeSign error

これは実は見たことあったんですが、Xcodeでコマンド+Uでテスト流す時にターゲットが実機やと出ます。ちゃんと設定すればいいのかもしれませんが、とりあえずシミュレーターにしたら成功するので放置してたやつです。こんな感じ

Code Sign warning: Specified PROVISIONING_PROFILE (...) not found and no CODE_SIGN_IDENTITY specified. Ignoring PROVISIONING_PROFILE for now. This will become an error in the future.
CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 8.1'

まあクラウドやとProvisioning Profileとかよりめんどそうな気しかしなかったので、今回もシミュレータに設定しました。

1
2
3
4
5
6
# .travis.yml

language: objective-c
xcode_workspace: Best10.xcworkspace
xcode_sdk: iphonesimulator # ←これ
xcode_scheme: Development

なんのことはない、本家のドキュメントをちゃんと読めば素直にいけたっていう話ですが、適当に読み飛ばして遠回りしたのでブログに残しておきました。

どうせならTestflightに配るところまでやりたいけどまた気が向いた時に。といいつつ今回調べながらもっと安そうなサービスも見つけちゃったのでそっち先試すかも。こっちの方がいいよーみたいなのがあれば教えてください。

Railsアプリもあって既にcircleciにお金払ってるからそこがiOS対応してくれたら一番嬉しい・・・
と思ってたらこの記事の二日後にcircleciがiOS対応しました。
https://circleci.com/docs/ios