code coverage for xcode 5 & ios 7
DESCRIPTION
TRANSCRIPT
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_flush() すると .gcda しか出ない
■ 今は、普通にテスト走らせて、 次に__gcov_flush()付きで走らせてる(無駄)
Wednesday, December 11, 13
動いているサンプル
http://github.com/tokorom/ReplaceImageCategoryForXcode
Wednesday, December 11, 13