狠狠撸

狠狠撸Share a Scribd company logo
Xcode 5 & iOS 7
でも
コードカバレッジとか
取りたい!
@tokorom

Wednesday, December 11, 13
これのiOS 7版

Wednesday, December 11, 13
Xcode 4.x 以前の
テスト実行
xcodebuild 
-project $(PROJECT) 
-target $(TEST_TARGET) 
-sdk iphonesimulator 
-configuration Debug 
TEST_AFTER_BUILD=YES 
TEST_HOST=

Wednesday, December 11, 13
Xcode 5 以降の
テスト実行

xcodebuild test 
-scheme $(SCHEME) 
-destination $(DESTINATION)

Wednesday, December 11, 13
Xcode 5 の
xcodebuild は
大幅パワーアップ!

Wednesday, December 11, 13
コードカバレッジ

Wednesday, December 11, 13
xxx.gcno & xxx.gcda

GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES 
GCC_GENERATE_TEST_COVERAGE_FILES=YES

Wednesday, December 11, 13
iOS 6 ではうまくいくのに

Wednesday, December 11, 13
iOS 7 では

xxx.gcda が
出ない!?
Wednesday, December 11, 13
自分でこれを呼ばないと
ダメらしい

extern void __gcov_flush(void);
__gcov_flush();

Wednesday, December 11, 13
いつ呼ぶの?

Wednesday, December 11, 13
今...
ではなくて
テストが全部
実行し終わった後

Wednesday, December 11, 13
XCTestObserver

Wednesday, December 11, 13
XCTestObserver

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:@"XCTestLog,XXXObserver"
forKey:XCTestObserverClassKey];
[defaults synchronize];

Wednesday, December 11, 13
XCTestObserver
@interface TKRGcovFluserTestObserver : XCTestObserver
@end
@implementation XXXObserver
- (void)stopObserving
{
[super stopObserving];
extern void __gcov_flush(void);
__gcov_flush();
}
@end

Wednesday, December 11, 13
現状の悩み
■ 普通にやると .gcno しか出ない
■ __gcov_?ush() すると .gcda しか出ない
■ 今は、普通にテスト走らせて、
次に__gcov_?ush()付きで走らせてる(無駄)

Wednesday, December 11, 13
動いているサンプル

http://github.com/tokorom/ReplaceImageCategoryForXcode

Wednesday, December 11, 13

More Related Content

Code Coverage for Xcode 5 & iOS 7