Конфигурирование XCode для покрытия кода
Q: Как я могу сконфигурировать свой проект XCode работать с инструментом покрытия кода ГКОВА?
A: Покрытие кода позволяет Вам идентифицировать, какие части Вашего исходного кода выполнялись во время теста. XCode поддерживает тестирование покрытия кода с GCOV для iOS и приложений OS X. Когда приложение выходит, когда установлено для использования ГКОВА, XCode генерирует .gcno файлы при компиляции приложения и .gcda файлов данных. Следующие шаги показывают Вам, как установить Ваш проект в XCode для генерации этих файлов ГКОВА.
Создайте отдельную названную конфигурацию сборки
GCov_Build.Для разделения сборки покрытия кода от Отладки и Выпуска сделайте новую конфигурацию сборки названной
GCov_Buildпутем дублирования Отладки. Посмотрите Добавляет Конфигурация сборки для получения дополнительной информации о дублировании конфигурации сборки.Сконфигурируйте свое рвение с
GCOVна уровне проекта.Перейдите к области Build Settings Вашего проекта, затем обновите свои настройки для
GCov_Buildследующим образом:


Скомпилируйте свой проект генерировать .gcno файлы.
Сначала установите свою схему использовать
GCov_Buildпри создании и запуске приложения как показано на рисунке 2, затем выберите Product> Build для компиляции проекта. Компилятор создаст .gcno файлы в Вашей папке сборки. Используйте организатора Проектов в XCode для навигации к папке производных данных приложения, затем ищите в каталоге Build/Intermediates .gcno файлы.


Запустите свое приложение для генерации .gcda файлов.
Выберите Product> выполненный для запуска приложения. Как Ваше выполнение приложения, XCode собирает данные о том, какие части Вашего кода используются. Важно дать вводы приложению, которое осуществит код, который Вы хотите протестировать. Когда Ваше приложение выйдет, XCode выпишет данные покрытия к .gcda файлам.
Разработчики OS X должны использовать пункт меню Quit своего приложения для завершенного выхода из него.
приложения для iOS не выходят. Поэтому разработчики iOS должны временно изменить свое приложение, чтобы вынудить данные покрытия быть выписанными к .gcda файлам. Используйте любой из следующих методов, чтобы сделать так:
Установите
UIApplicationExitsOnSuspendключ к YES в Вашем файле Info.plist и посылает Ваше запущенное заявление в фон путем нажатия кнопки «Домой».Добавьте вызов к __ gcov_flush () в Вашем приложении, чтобы вынудить данные покрытия быть выписанными к .gcda файлам. Например, можно хотеть вставить вызов в __ gcov_flush () в
applicationDidEnterBackground:как показано в Перечислении 1, чтобы выписать информации о покрытии каждый раз кнопка «Домой» нажимается.Перечисление 1 Используя __ gcov_flush (), чтобы вынудить данные покрытия, которые будут выписаны к .gcda файлам
#import "AppDelegate.h"
#include <stdio.h>
extern void __gcov_flush();
@implementation AppDelegate
- (void)applicationDidEnterBackground:(UIApplication *)application
{__gcov_flush();
}
…..
@end
Получите .gcda файлы.
.gcda файлы обычно помещаются в тот же каталог сборки, содержащий Ваши .gcno файлы. Однако, если Ваше приложение поигралось в песочнице, то Вы не можете быть в состоянии записать в этот каталог сборки. Вы можете обходное решение эта проблема при помощи
GCOV_PREFIX_STRIPиGCOV_PREFIXпеременные окружения для изменения местоположения .gcda файлов.GCOV_PREFIX_STRIPуказывает число компонентов контура, которые будут удалены из каталога сборки по умолчанию иGCOV_PREFIXуказывает путь для замены в их месте.Например, если Ваш каталог сборки расположен в “/Users/Me/Library/Developer/Xcode/DerivedData / <приложение> / сборка”, и Вы хотите записать его в каталог Documents своего приложения, тогда первый запрос фактический путь песочницы Вашего приложения, затем присвоить этот путь к
GCOV_PREFIXиспользование setenv () функционирует следующим образом:NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
setenv("GCOV_PREFIX", [documentsDirectory cStringUsingEncoding:NSUTF8StringEncoding], 1);и наконец набор
GCOV_PREFIX_STRIPк 7 для разделения полного пути приложения как показано на рисунке 3.


После этого .gcda файлы записаны в Вашу тестовую среду приложения, копируют их в тот же каталог, содержащий Ваши .gcno файлы. разработчики iOS должны выполнить шаги, описанные в Копировании Данных Приложения от Контейнера на устройстве на iOS для получения .gcda файлов от их устройств. Разработчики OS X должны перейти к контейнеру песочницы их приложения (~/Library/Containers/<bundle_id>) на их Mac для получения этих файлов.


Используйте ГКОВА для просмотра результатов.
Перейдите к каталогу, содержащему и Ваш .gcno и .gcda файлы в Терминальном приложении, затем выполните gcov инструмент на каждом исходном файле, для которого Вы хотите видеть данные покрытия, как замечено в Перечислении 2.
Перечисление 2 , Работающее gcov на исходном файле
$ cd <path/to/directory with .gcda and .gcno files>
$ls
AppDelegate.d MyApplication_dependency_info.dat main.d
AppDelegate.dia ViewController.d main.dia
AppDelegate.gcda ViewController.dia main.gcda
AppDelegate.gcno ViewController.gcda main.gcno
AppDelegate.o ViewController.gcno main.o
MyApplication.LinkFileList ViewController.o
$ xcrun gcov </path/to>/MyApplication/MyApplication/ViewController.m
File '</path/to>/MyApplication/MyApplication/ViewController.m'
Lines executed:69.23% of 13
</path/to>/MyApplication/MyApplication.m:creating 'ViewController.m.gcov'
$ cat ViewController.m.gcov
-: 0:Source:</path/to>/MyApplication/MyApplication/ViewController.m
-: 0:Graph:ViewController.gcno
-: 0:Data:ViewController.gcda
-: 0:Runs:0
-: 0:Programs:0
-: 1:
-: 2:#import "ViewController.h"
-: 3:
-: 4:@interface ViewController ()
1: 5:@property (strong) NSMutableArray *menuArray;
-: 6:@end
-: 7:
#####: 8:@implementation ViewController
-: 9:
-: 10:
1: 11:- (void)viewDidLoad
-: 12:{1: 13: [super viewDidLoad];
1: 14: [self loadData];
1: 15:}
-: 16:
1: 17:-(void)loadData
-: 18:{1: 19: NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Menu" ofType:@"plist"];
1: 20: self.menuArray = [NSMutableArray arrayWithContentsOfFile:plistPath];
-: 21:
1: 22:}
-: 23:
-: 24:
#####: 25:- (void)didReceiveMemoryWarning
-: 26:{#####: 27: [super didReceiveMemoryWarning];
-: 28: // Dispose of any resources that can be recreated.
#####: 29:}
-: 30:
-: 31:@end
История версии документа
| Дата | Примечания |
|---|---|
| 12.03.2014 | Обновленный для Xcode 5. Был ранее назван как «Используя ГКОВА от XCode». |
| 23.02.2007 | Новый документ, иллюстрирующий, как установить XCode для покрытия кода. |