Help us understand the problem. What is going on with this article?

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 にする。
setting1.jpg

・Instrument Program Flow を YES にする。
setting2.jpg

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

最後に、ビルド実行すると下のようなカバレッジが表示されます。
(まだテストケースが殆ど入ってない状態なのでアレですが・・・)

coverage.png

参考にしたサイト

Generate gcda-files with Xcode5, iOS7 simulator and XCTest

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away