рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдпрд╣ рд╡рд┐рд╖рдп
рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдИрдУрдПрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рдЙрдкрдпреБрдХреНрддрддрд╛ рдкрд░ рд╕рд╡рд╛рд▓ рдирд╣реАрдВ рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЕрднреА рднреА рдХрд┐рд╕реА рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ)ред
рдкреНрд░реЗрд░рдгрд╛
рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм рдкреНрд░реЛрдлрд╛рдЗрд▓ / рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рдЖрдИрдбреАрдИ рдореЗрдВ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред XCode рдореЗрдВ рдХреЛрдб рдХрд╡рд░реЗрдЬ рд╡рд╛рд▓рд╛ рдЗрддрд┐рд╣рд╛рд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХреНрд▓рд╛рдЙрдбрд▓реЗрд╕ рдирд╣реАрдВ рд╣реИ: xCode 3.x рдФрд░ GCC рдХреЗ рджрд┐рдиреЛрдВ рдореЗрдВ рд╕рдмрдХреБрдЫ рд╕рд░рд▓ рдерд╛ рдФрд░ рдПрдХ рд╕рдордп рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд▓рд┐рдВрдХ рдФрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдлреНрд▓реИрдЧ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред XCode 4.1 рдХреЗ рдЖрдЧрдорди рдХреЗ рд╕рд╛рде, LLVM-GCC рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЧрдпрд╛, рдореБрдЭреЗ рдХреБрдЫ рддрд░рдХреАрдмреЛрдВ (рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ LLVM рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХрд╛ рдЕрдзрд┐рдХрд╛рд░) рдкрд░ рдЬрд╛рдирд╛ рдкрдбрд╝рд╛ред рдФрд░ 4.3 рдореЗрдВ libprofile_rt рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рджреВрд╕рд░реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЧрдпрд╛, рдЬрд┐рд╕рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реБрдИрдВред
рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рддреМрд░ рдкрд░ рдпрд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ xCode 4.4 рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╡рд░реЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрдИ рдорд┐рдирдЯ рд▓рдЧрддреЗ рд╣реИрдВ, рдФрд░ рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рд╕реНрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ? рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рд┐рджреНрдз рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рд╣реИ, рд╕реАрдзреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдФрд░ 'рдореГрдд' рдХреЛрдб рдХреА рдЦреЛрдЬ рдХрд░рдирд╛, рдЗрд╕рдХреЗ рдмрд╛рдж рдЙрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╕рдлрд╛рдИред
XCode 4.4 рдореЗрдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрдЕрдк
рдЪреЗрдХрдорд╛рд░реНрдХ
рдпреВрдирд┐рдЯ рдпреВрдирд┐рдЯ рдЯреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (iOS / OS X) рдмрдирд╛рдПрдВред рдЖрдк рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд░реА
рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдореЗрдВ рджреЛ рдЪрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
1. рд▓рдХреНрд╖реНрдп% рдкреНрд░реЛрдЬреЗрдХреНрдЯ-рдирд╛рдо% рдЦреЛрд▓реЗрдВ, рдФрд░
рдХреЛрдб рдкреАрдврд╝реА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЭрдВрдбреЗ рд╕реЗрдЯ рдХрд░реЗрдВ:
рдЯреЗрд╕реНрдЯ рдХрд╡рд░реЗрдЬ рдлрд╝рд╛рдЗрд▓реЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ = рд╣рд╛рдБ
рд╕рд╛рдзрди рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рд╡рд╛рд╣ = рд╣рд╛рдБ
2.
рдХреЗрд╡рд▓ iOS рдХреЗ рд▓рд┐рдПред рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рдХреНрд░реИрд╢ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ * .c рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛:
#include <stdio.h> FILE* fopen$UNIX2003(const char* filename, const char* mode); size_t fwrite$UNIX2003(const void* ptr, size_t size, size_t nitems, FILE* stream); FILE* fopen$UNIX2003(const char* filename, const char* mode) { return fopen(filename, mode); } size_t fwrite$UNIX2003(const void* ptr, size_t size, size_t nitems, FILE* stream) { return fwrite(ptr, size, nitems, stream); }
рд╡рд╣ рдкреВрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрдЕрдк рд╣реИред рдЕрдм% рдкреНрд░реЛрдЬреЗрдХреНрдЯрдиреЗрдо% рдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (iOS рдХреЗ рд▓рд┐рдП) /
/User/%user%/Library/Developer/Xcode/DerivedData/%project-nameBLABLABABABLA%/Build/Intermediates/%project-name%.build/name/ рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
"рдбрд┐рдмрдЧ-рдЖрдИрдлрд╝реЛрдирд┐рдореБрд▓реЗрдЯрд░ /% рдкреНрд░реЛрдЬреЗрдХреНрдЯ-рдирд╛рдо% .build / рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕-рд╕рд╛рдорд╛рдиреНрдп / i386" ред рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ, рд╣рдо * .gcda рдФрд░ * .gcno рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдХрд╡рд░реЗрдЬ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред
рдорд╣рддреНрд╡рдкреВрд░реНрдг : рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЗ рдХрд╡рд░реЗрдЬ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ, рддреЛ рдЖрдкрдХреЛ * .plist рдореЗрдВ
UIApplicationExitsOnSuspend = YES рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ * .gcda рдлрд╛рдЗрд▓реЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ "рддреНрд░реБрдЯрд┐" рддрд░реАрдХреЗ рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИрдВред
рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╡рд░реНрдЧ рдФрд░ рдХрдИ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдХреЛрдб рджреЗрддрд╛ рд╣реВрдВ:
#import "MyCalc.h" @implementation MyCalc - (CGFloat)performOperation:(MyMathOperation)operation withA:(CGFloat)a B:(CGFloat)b { CGFloat result = 0.f; switch (operation) { case MyMathOperationAdd: result = a + b; break; case MyMathOperationSubtract: result = a - b; break; case MyMathOperationDivide: result = a / b; break; case MyMathOperationMultiply: result = a * b; break; default: NSLog(@"Unsupported operation"); break; } return result; } - (CGFloat)negate:(CGFloat)number { //this method works incorrectly return number; } @end
- (void)testNegation { CGFloat input = 3; CGFloat expected = -3; CGFloat result = [self.calculator negate:input]; STAssertEquals(result, expected, @"Negation failed. Expected: %f, Actual: %f", expected, result); } - (void)testAddition { CGFloat a = 3; CGFloat b = 4; CGFloat expected = a + b; CGFloat result = [self.calculator performOperation:MyMathOperationAdd withA:a B:b]; STAssertEquals(result, expected, @"Addition failed. Expected: %f, Actual: %f", expected, result); } - (void)testMultiplication { CGFloat a = 14; CGFloat b = 3; CGFloat expected = a * b; CGFloat result = [self.calculator performOperation:MyMathOperationMultiply withA:a B:b]; STAssertEquals(result, expected, @"Addition failed. Expected: %f, Actual: %f", expected, result); }
рдкрд░рд┐рдгрд╛рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг
рдорд╛рдирд╡-рдЕрдиреБрдХреВрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЖрдВрдХрдбрд╝реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
gcov
gcov рдПрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ рдЬреЛ * .gcda рдФрд░ * .gcno рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╡рд░реЗрдЬ рдЖрдБрдХрдбрд╝реЗ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИред рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рддрдХ, рдпрд╣ рдХреЗрд╡рд▓ рдЬреАрд╕реАрд╕реА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рдлрд┐рд▓рд╣рд╛рд▓ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрд▓рдПрд▓рд╡реАрдПрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдПрдХ рд╕рд╛рджрд╛ рдкрд╛рда рд░рд┐рдкреЛрд░реНрдЯ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ MyCalc.gcda рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдЪрд▓рдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╡рд░реЗрдЬ рдХреЗ рдкреНрд░рддрд┐рд╢рдд рдкрд░ рдЖрдВрдХрдбрд╝реЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рдлрд╛рдЗрд▓ MyCalc.m.gcov:
-: 0:Source:/Users/dlebedev/src/sandbox/Coverage/iOS/iOSCoverage/../../Common/MyCalc.m -: 0:Graph:MyCalc.gcno -: 0:Data:MyCalc.gcda -: 0:Runs:0 -: 0:Programs:0 -: 1:// -: 2:// MyCalc.m -: 3:// iOSCoverage -: 4:// -: 5:// Created by Denis Lebedev on 23.08.12. -: 6:// Copyright (c) 2012 Denis Lebedev. All rights reserved. -: 7:// -: 8: -: 9:
#####: - рд▓рд╛рдЗрди рдкреВрд░реА рдирд╣реАрдВ рд╣реБрдИред
n: - рд▓рд╛рдЗрди рдХреЛ n рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдЖрд╡рд░рдг
CoverStory gcov рдХреЗ рд▓рд┐рдП рдПрдХ GUI рдРрдб-рдСрди рд╣реИ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ Apple рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ HTML рд░рд┐рдкреЛрд░реНрдЯ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

lcov
lcov gcov рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЪрд┐рддреНрд░рдордп рдлреНрд░рдВрдЯ-рдПрдВрдб рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ HTML рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рд╕рдореВрд╣рд┐рдд рдХрд░рддреА рд╣реИ, рд╕рд╛рде рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди - рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИред
Lcov рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
34 рд▓рд╛рдЗрди рдкрд░ (-D $ SOURCE $ TARGET рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ), -D рдзреНрд╡рдЬ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред
рд░рд┐рдкреЛрд░реНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, .gcda-files рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
lcov -t 'Code coverage report' -o report.info -c -d . genhtml -o html-report report.info
HTML- рд░рд┐рдкреЛрд░реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд░рд┐рдгрд╛рдо:

рд╕реНрд╡рдЪрд╛рд▓рди
рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрд▓рд╕реАрдУрд╡реА рдирд┐рд░рдВрддрд░рддрд╛ рдПрдХреАрдХрд░рдг рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдХрд╛рджрдорд┐рдХ рд╣реЛрдЧрд╛ рдФрд░ рдХрд╖реНрдЯрдкреНрд░рдж рдЦрд╛рдорд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде (рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреЛрдХреЛрдкреЛрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб (рдпрд╣ iOS рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рднреА рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ):
Settings.xcconfig рдХреА рд╕рд╛рдордЧреНрд░реА (рдЖрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЭрдВрдбреЗ рдХреЛ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ):
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS = YES GCC_GENERATE_TEST_COVERAGE_FILES = YES
рд╣рдордиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдЧреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред Xcconfig рдлрд╝рд╛рдЗрд▓ рд░рдЦреА (рдкрд╣рд▓реЗ рд╣рдо рд▓рдХреНрд╖реНрдп рдФрд░ рдПрд╕рдбреАрдХреЗ рдирд╛рдо рдЪрд░ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВ), рдЪрд▓рд╛рдПрдВ ... рдФрд░ рд╣рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИред рдЪреВрдВрдХрд┐ рд╢реБрд░реВ рдореЗрдВ iPhone рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИред рдЗрд╕ рдХрд╖реНрдЯрдкреНрд░рдж рдЧрд▓рддрдлрд╣рдореА рдХреЛ рдХреИрд╕реЗ рдареАрдХ рдХрд░реЗрдВ, рдЗрд╕рдХрд╛ рд╡рд░реНрдгрди
рдпрд╣рд╛рдБ рдХрд┐рдпрд╛ рдЧрдпрд╛
рд╣реИ ред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд▓рд╛рдПрдВ рдФрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде HTML-рд░рд┐рдкреЛрд░реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
UPD: рдЬреЗрдирдХрд┐рдВрд╕ рдХреЗ рд╕рд╛рде рдШрдирд┐рд╖реНрда рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк
gcovr +
Cobertura Plugin рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЯрд┐рдк рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж
рдореЛрдмреЛрд░ ред