Posted at

Xcode5でカバレッジをJenkinsに表示する

More than 5 years have passed since last update.


はじめに

Xcode5になってからか、iOS7になってからかは不明ですが

.gcdaファイルが出力されなくなったので、カバレッジが出せなくなりました。

ネット上で色々調べたのですが、なかなか上手く行かず試行錯誤したので、自分の環境でやったことをまとめておきます。


環境


  • Xcode5

  • iOS7


Xcode側でやったこと


1.Build Settings から次の設定をする。

・Generate Test Coverage Files を YES にする。

・Instrument Program Flow を YES にする。


2.以下のコードを追加

・AppDelegate に追加


AppDelegate.m

#ifdef DEBUG

+ (void)initialize {
[[NSUserDefaults standardUserDefaults] setValue:@"XCTestLog,GcovTestObserver"
forKey:@"XCTestObserverClass"];
}
#endif

//途中省略

- (void)applicationWillTerminate:(UIApplication *)application
{
#ifdef DEBUG
extern void __gcov_flush(void);
__gcov_flush();
#endif
}


・GcovTestObserver.m をテスト用ターゲットに作成して、以下のコードを追加。


GcovTestObserver.m

#import <XCTest/XCTestObserver.h>


@interface GcovTestObserver : XCTestObserver
@end

@implementation GcovTestObserver

- (void) stopObserving
{
[super stopObserving];
UIApplication* application = [UIApplication sharedApplication];
[application.delegate applicationWillTerminate:application];
}

@end


と、ここまででテストを実行すると以下の場所に *.gcda が作成されます。

※シミュレータでのテスト終了時に出力されます。


/Users/UserName/Library/Developer/Xcode/DerivedData/アプリ名-XXXXXXXX/Build/Intermediates/アプリ名.build/Debug-iphonesimulator/アプリ名.build/Objects-normal/i386

Jenkinsでグラフィカルに表示させる必要がない方は、CoverStory等のツールで上のファイルを開いてやればカバレッジを取得することができます。


Jenkinsでの設定


まず最初に


  • Git や SVNのリポジトリからソースを取得する設定をしてください

  • Jenkinsの管理 > プラグインの管理 より 「Jenkins Cobertura Plugin」をインストールしてください


ビルド設定

ビルド手順の追加 > シェルの実行 を選択して、以下を入力してください。

xcodebuild test 

-scheme "テスト用スキーム名"
-sdk iphonesimulator
-project アプリ名.xcodeproj
-configuration Debug
-destination "platform=iOS Simulator,name=iPad,OS=7.0"
OBJROOT=build
SYMROOT=build

さらに、シェルの実行を追加します。


/usr/local/bin/gcovr -r . --object-directory build/アプリ名.build/Debug-iphonesimulator/アプリ名.build/Objects-normal/i386/ --exclude '.*Tests.*' --exclude '.*ExternalFrameworks.*' --xml > build/coverage.xml


カバレッジレポートの設定

ビルド手順の追加 > Cobertura カバレッジ・レポートの集計 を追加。

Cobertura XMLレポート パターンに以下を入力して下さい。


build/coverage.xml

最後に、ビルド実行すると下のようなカバレッジが表示されます。

(まだテストケースが殆ど入ってない状態なのでアレですが・・・)


参考にしたサイト

Generate gcda-files with Xcode5, iOS7 simulator and XCTest