SenTestingKitとJenkinsを使用したiOSプロジェクトへのCIの導入(Xcode5編)

直近2回の投稿では、SenTestingKitとJenkinsを使用したiOSプロジェクトへのCIの導入を解説しましたが、最近、Xcodeを入れたところで問題が。


jenkinsでビルドを実行したところ、
"/Applications/Xcode.app/Contents/Developer/Tools/RunUnitTests:44: error:
RunUnitTests is obsolete. To run unit tests for your target, use the Test scheme action in the Xcode IDE and the test action in xcodebuild." との文言が出る(´・ω・`)


どうやら、 TEST_AFTER_BUILD=YESが使えなくなったらしい。修正すべき点はxcodebuildのコマンド周りなので、今回のポストでは前回のブログでの設定で修正すべき点を説明していきます。

基本的には、TEST_AFTER_BUILD=YESが使えなくなった対策ですので、
作業の流れとしては、


1. Xcode内の設定を変更し、テスト結果がプロジェクト内に生成されるように修正
 (Xcode5からrun Testをコマンドラインから呼び出せるようになったが、DerivedData配下にテスト結果が生成されてしまうため、それを修正)

2. コマンドの変更を、jenkinsの"Xcode"部分に当てはめ、jenkinsから呼ばれるコマンドが変更されるようにする。
となります。


では、実際に設定変更を行います。


1. Xcode内の設定を変更し、テスト結果がプロジェクト内に生成されるように修正
"Xcode"->"Preferences..."を選択し、
f:id:nerd0geek1:20130923202540p:plain
"Locations"を選択。Derived Dataを"Default"から"Relative"に変更します。その変更が終わったら"Advanced..."をクリックし、
f:id:nerd0geek1:20130923202942p:plain
"Custom"を選択。プルダウンは"Relative to Derived Data"となるようにします。
f:id:nerd0geek1:20130923203145p:plain
これで設定の変更は完了です。cmd + UでUnit Testを行うとプロジェクトファイルがあるディレクトリに"Derived Data"が生成されるので確認できると思います。


2. コマンドの変更を、jenkinsの"Xcode"部分に当てはめ、jenkinsから呼ばれるコマンドが変更されるようにする。
実行すべきコマンドが

xcodebuild -sdk iphonesimulator6.0 -configuration Debug build TEST_AFTER_BUILD=YES
から
xcodebuild test -sdk iphonesimulator6.0 -configuration Debug -destination OS=6.1,name=iPhone
に変更になったため、それをJenkinsの"Xcode"部分に当てはめていきます。
f:id:nerd0geek1:20130923204538p:plain
"Xcode Scheme File"を指定する必要が出たこと、"Custom xcodebuild arguments"の内容を修正する必要が出たことに注意が必要です。


また、ローカルのプロジェクトでコマンドを実行した場合は成功するけど、jenkins上でジョブを実行しても正常に動作しない場合、
.xcschemeファイルがpushされていないことが考えられますので、試してみては?

参考にしたサイト:
http://petosoft.wordpress.com/2013/06/25/running-unit-tests-using-jenkins-and-xcodebuild-on-xcode-5-0/