##はじめに
Xcode5になってからか、iOS7になってからかは不明ですが
.gcdaファイルが出力されなくなったので、カバレッジが出せなくなりました。
ネット上で色々調べたのですが、なかなか上手く行かず試行錯誤したので、自分の環境でやったことをまとめておきます。
##環境
- Xcode5
- iOS7
#Xcode側でやったこと
###1.Build Settings から次の設定をする。
・Generate Test Coverage Files を YES にする。
・Instrument Program Flow を YES にする。
###2.以下のコードを追加
・AppDelegate に追加
#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 をテスト用ターゲットに作成して、以下のコードを追加。
#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