Покрытие кода на iOS Использование Xcode 4.2 на Lion - PullRequest
3 голосов
/ 10 декабря 2011

Я пытаюсь создать gcd файлы из проекта iOS Xcode 4.2 (4D199) под названием CocoaTouchHax на Lion, и у меня невероятные проблемы.Я выполнил шаги здесь и дошел до попытки собрать llvm / clang из исходного кода, следуя шагам здесь .Однако я продолжаю получать эту ошибку:

Library not loaded: @executable_path/../lib/libprofile_rt.dylib

Где я иду не так?Я пытался использовать install_name_tool, чтобы исправить путь к исполняемому файлу, но безрезультатно.Я что-то анализирую?Я что-то упустил?Я установил это как фазу «Выполнить сценарий» перед установкой связи, чтобы убедиться, что я обновил путь @executable и использую инструмент для проверки файла после и обновления имени:

install_name_tool -id @executable_path/Users/cliff/dev/CocoaTouchHax/build/CocoaTouchHax/Build/Products/Debug-iphonesimulator/lib/libprofile_rt.dylib build/CocoaTouchHax/Build/Products/Debug-iphonesimulator/lib/libprofile_rt.dylib

Что такоеЯ делаю не так?Справка!

Обновление Простое добавление библиотеки lib profile_rt.dylib приводит к аварийному завершению моего тестового запуска, сразу же выдавая следующую ошибку при выполнении чего-либо: @executable_path /../ lib / libprofile_rt.dylib Так что я уверенчто-то должно произойти или что-то должно быть сделано с lib profile_rt.dylib перед выполнением.

Другое обновление Я попытался создать суммарную ссылку на / Developer / usr / lib в /Developer / Platforms / iPhoneSimulator.platform / Developer / SDKs / iPhoneSimulator5.0.sdk / Developer / usr Я считаю, что это часть базового пути, формирующего текущий рабочий каталог при запуске теста.(Предполагается, что он запускается из папки bin). Теоретически это завершило бы относительный путь поиска ../lib/libprofile_rt.dylib из этого базового пути, но это не сработало.Я попытался запустить команду install_name_tool перед копированием dylib, но я все еще получаю эту ошибку:

Библиотека не загружена: @executable_path /../ lib / libprofile_rt.dylib

Я не знаю, что я делаю не так.Мне каким-то образом удалось заставить файлы тестового покрытия излучать, используя некоторую комбинацию из вышеперечисленного, но я не уделял достаточно пристального внимания и не могу воспроизвести возникновение.Я знаю, что это может сработать, мне просто нужно немного помочь разобраться, как это сделать.

Ответы [ 2 ]

5 голосов
/ 12 декабря 2011

Обновление: В Xcode 4.3.2 (4E2002) , просто включите Создание файлов покрытия испытаний и Выполнение программы прибора ,система сборки свяжет libprofile_rt для вас.Xcode 4.3, и позже, является стандартным приложением Mac, и папка / Developer исчезла.Итак, пропустите шаги 5-7 ниже.Вам также потребуется создать файл класса, чтобы обойти ошибку в реализации Unix от Apple, как описано здесь .Вы захотите это в тестируемом проекте.

Для Xcode 4.2 (4C199) в Snow Leopard:

  1. Создайте проект, скажем, MyProduct.Отметьте Включить юнит-тесты .
  2. Как только Xcode выполнит свою задачу и загрузит новый проект, у вас должно быть две цели: MyProduct и MyProductTests .Дублируйте цель MyProduct .
  3. Выберите цель MyProduct .
  4. Перейти к Настройки сборки .В разделе Генерация кода включите Генерируйте файлы покрытия теста и Поток программы прибора .
  5. Перейдите на Фазы сборки .Развернуть Связать двоичные файлы с библиотеками .Нажмите +.Нажмите Добавить другое ... .Перейдите в / Developer / usr / lib.Выберите libprofile_rt.dylib.
  6. Выберите MyProductTests цель.
  7. Повторите шаги 4 и 5 для этой цели.
  8. Перейдите к Настройки сборки снова.Найдите Bundle Loader в разделе Linking .Измените путь к приложению MyProduct copy .Что-то вроде $ (BUILT_PRODUCTS_DIR) / MyProduct copy.app/MyProduct copy.
  9. Измените схемы так, чтобы тесты выполнялись по схеме MyProduct copy , а не MyProduct .Если вы компилируете Clang самостоятельно, вы можете узнать подробности здесь.

Это должно сработать.Шаг 8 потребовал у меня часов , чтобы понять, это ключ.Если вы видите только файлы gcda в каталоге тестовой сборки, это вероятная проблема.

3 голосов
/ 09 января 2012

В Lion вы можете использовать символическую ссылку dylib в / usr / lib, чтобы избежать этой ошибки

sudo ln -s /Developer/usr/lib/libprofile_rt.dylib /usr/lib/libprofile_rt.dylib

Однако я не могу гарантировать, что это не разрушит будущее.Помните, что вы сделали это.

Создайте новую конфигурацию под названием «Покрытие» (или как угодно).

В созданном вами варианте конфигурации Покрытия перейдите в Настройки сборки и ...

  • Добавьте -fprofile-arcs и -ftest-coverage к Другие флаги C
  • Включите Generate Test Coverage Files
  • Включите Instrument Program Flow
  • In Другие флаги компоновщика add -lprofile_rt

Причина, по которой вы можете сделать это с помощью конфигурации, заключается в том, что вы можете сохранить вашу обычную сборку без изменений.Также работает только на симуляторе.Так что не пытайтесь запустить это на устройстве.

И с http://mattrajca.com/post/8749868513/llvm-code-coverage-and-xcode-4

Наконец, откройте Intermediates / $ TARGET.build / $ CONFIG / $ TARGET.build / Objects-нормальная / $ ARCH подпапка.Внутри вы найдете вышеупомянутые файлы gcda и gcov

. Вы можете открыть эту папку с помощью CoverStory.

Обратите внимание, что покрытие не накапливается (в отличие от Coverity), поэтому каждый запуск начинается заново,Там может быть способ изменить это.

...