Спасибо за всю информацию о stackoverfow и CubicleMuses
У меня есть покрытие кода, работающее как для симулятора, так и для устройства!Вот шаги и конфигурация, которые работали для меня:
Конфигурация: Xcode 4!
Настройки проекта XCode
Настройки сборки
Другие флаги компоновщика: добавьте "-lgcov"
GCC_GENERATE_TEST_COVERAGE_FILES: Установите в YES
GCC_INSTRUMENT_PROGRAM_FLOW_ARCS: установлено в YES
- Версия компилятора C / C ++: GCC 4.2 (если вы используете XCode 4) Цель развертывания iOS: 4.2
- Заголовок префикса прекомпиляции: NO
Info.plist
- Установите для флага UIApplicationExitsOnSuspend в вашем Info.plist значение YES
Вышеуказанные действия одинаковы для симулятора иУстройство, однако, у нас есть дополнительная работа, чтобы заставить его работать на устройстве.
Main.m : Скопируйте и вставьте приведенный ниже код в main.m
const char *prefix = "GCOV_PREFIX";
const char *prefixValue = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] cStringUsingEncoding:NSASCIIStringEncoding]; // This gets the filepath to the app's Documents directory
const char *prefixStrip = "GCOV_PREFIX_STRIP";
const char *prefixStripValue = "1";
setenv(prefix, prefixValue, 1); // This sets an environment variable which tells gcov where to put the .gcda files.
setenv(prefixStrip, prefixStripValue, 1); // This tells gcov to strip the default prefix, and use the filepath that we just declared.
Примечание: Убедитесь, что приведенный выше код находится перед:
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool release];
return retVal;
Почему мы устанавливаем вышеуказанные переменные покрытия?
http://gcc.gnu.org/onlinedocs/gcc/Cross_002dprofiling.html
Как получитьфайлы .gcda?
Используйте Организатор в Xcode для загрузки пакета приложения с устройства, чтобы получить файлы .gcda из каталога Documents.
Примечание: Я не смог получить покрытие кода, используя Xcode 3.2.5 с теми же настройками.Но Xcode 4 был пирогом: -)