Ошибка связи при построении цели модульного теста



у меня есть проект XCode4 / iOS с обычной целью и целью модульного тестирования. Все работает нормально, за исключением случаев, когда я пытаюсь #импортировать один из моих классов в мой тестовый класс и попытаться использовать его. Если я попытаюсь построить цель модульного теста, я получаю следующую ошибку ссылки:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_FRRCategory", referenced from:
      objc-class-ref in CategoryTests.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

В Категорийных Тестах.m я импортирую файл заголовка следующим образом:

#import "../todoro/FRRCategory.h"

что я делаю не так?

136   4  

4 ответов:

убедитесь, что исходный файл FRRCategory добавлен в исходные файлы компиляции для целевого объекта модульного теста.

Xcode 4:

навигатор проекта - > "[Имя проекта] " - > в разделе Цели выберите цель модульного теста - > этапы сборки - > разверните источники компиляции - > Нажмите + в нижней части источников компиляции и добавьте правильный исходный файл.

следуйте инструкциям здесь. Это не требует добавления каких-либо файлов для компиляции источников.

Я сначала пропустил ,что "символы, скрытые по умолчанию=нет" должны быть для вашего app цель, а не цель теста.

Это сработало для меня в любом случае (tm).

еще один gotcha, который вы можете ударить, если ваш модульный тест использует функции C (или аналогичные), которые не используются в реальном приложении.

Это может быть ограничено наличием подпроекта. В моем случае

  • приложения
    • суб-проекта
      • встроенная библиотека C (т. е.с и. H-файлы, скомпилированные непосредственно внутри)

мой модульный тест использовал несколько функций C, которые больше нигде не использовались, и они были удалены из двоичного файла приложения (а не из подпроекта .папка.)

исправление для

  1. выключите "мертвый код зачистки" для отладки сборки приложения.* и
  2. убедитесь, что модульные тесты используют Debug, а не Release, в настройках схемы.

(*Не делайте этого с конфигурациями выпуска, поскольку это раздует приложение с кодом, который никогда не вызывается).

вы должны ссылаться только на папку внутри вашего импорта, если ваш файл находится внутри рамки. В противном случае, как только вы добавили свой файл в проект, просто сделайте #import "FRRCategory.h". Ну, если вы не сделали что-то странное с вашими поисковыми путями заголовка.

    Ничего не найдено.

Добавить ответ:
Отменить.