Подтвердить что ты не робот

Xcode 4 не может инициировать модульные тесты (с ошибкой компоновщика) после того, как я создал новую схему

Мои модульные тесты отлично работали в xcode4, пока мне не пришлось создавать новую схему для компиляции пакета для запуска на моем устройстве для тестирования.

Все, что я сделал, это создание нового Target и новой схемы, теперь я пытаюсь запустить модульные тесты и получить следующую ошибку:

Тестовый пакет в [...] Tests.octest не может быть загружен из-за ошибки связи. Вероятно, dyld не может найти инфраструктуру фреймворка или библиотеку, с которой был связан тестовый пакет, возможно, из-за того, что структура или библиотека имели неправильный путь установки во время ссылки.

Что я сломал?

4b9b3361

Ответ 1

Я также столкнулся с проблемами с Xcode 4 после добавления цели в существующий проект. В конечном итоге я понял, что Xcode DerivedData для проекта был поврежден. Удалив эти данные, я заставил Xcode перестроить данные, и проект вернулся в нормальное состояние. Я нашел данные в своей домашней библиотеке (~/Library/Developer/Xcode/DerivedData/).

Ответ 2

Как @Haoest и @Peter DeWeese над комментариями к Ответу 1 - у меня была точно такая же проблема, когда я изменил название продукта.

Чтобы исправить это для случая, когда вы переименовали продукт, вам нужно перейти на вкладку "Настройки сборки" целевой цели и изменить раздел "Связывание" - параметры загрузчика пакета Debug и Release. Если вы переименовали продукт - каталог и имя приложения могут быть неверными.

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

Ответ 3

Я пробовал все (включая другие ответы и отмеченные здесь http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/), но, наконец, нашел другое решение:

Установите постобработку развертывания (в разделе "Развертывание настроек сборки" ) значение "НЕТ" для цели "Отладка".

Прежде чем я это сделал, исполняемый файл был удален, а ссылка не удалась с помощью

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_SomeClassUnderTest", referenced from:
      objc-class-ref in SomeTest.o

Независимо от того, что разделители символов с разделителями Strip Link и Strip Debug Symbols во время копирования были установлены в НЕТ, это не имело никакого значения - только изменение настройки Postprocessing развертывания в конечном итоге убедило, что символы не были разделены.

Ответ 4

Такое же сообщение об ошибке, в моем случае я не связывал один из классов, которые были необходимы во время тестов.

Ответ 5

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

Ответ 6

Мы использовали nodejs-mobile, который собирался с приложением, но не собирался с тестами.

Undefined symbols for architecture x86_64:
  _start_node

В дополнение ко всем предыдущим ответам (настройки сборки, пути поиска, создание нового модульного теста, удаление DerivedData), в конечном итоге было решено создание нового нового теста пользовательского интерфейса вместо модульного теста в Xcode.

Он успешно построен. Затем вы можете скопировать определения тестов из текущего теста в один.

Если вам не нужна часть пользовательского интерфейса, вы можете раскомментировать XCUIApplication().launch() в setUp сгенерированных тестов, что делает его работающим так же быстро, как и раньше.