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

Ошибка компоновщика блока Xcode 4

ПРИМЕЧАНИЕ. "Использовать GHUnit" не является приемлемым ответом на этот вопрос. Я знаю, что большинство думает, что GHUnit лучше, чем Xcode4 OCUnit, но это не то, о чем я прошу. Я буду оценивать это отдельно.

У меня есть проект Xcode, который я создал в Xcode4 с нуля, с флажком "Включить модульные тесты", установленным во время создания. Я также включил некоторые библиотеки, которые я разработал в предыдущем проекте. Они были добавлены в проект через диалог "Добавить файлы в x..." и добавлены только к целевому объекту приложения (а не к цели тестирования). Они отлично работают при запуске приложения, поэтому я думаю, что они настроены правильно. У меня также есть несколько различных классов, написанных для этого проекта.

Мои тестовые файлы настроены стандартным способом, названным [AppName] Tests.h и .m.
Код для заголовка:
  #import < SenTestingKit/SenTestingKit.h >

@interface [AppName]Tests : SenTestCase {
@private
}
@end

Код для реализации:
  #import "[AppName]Tests.h"

@implementation [AppName]Tests

- (void)setUp
{
    [super setUp];
    // Set-up code here.
}

- (void)tearDown
{
    // Tear-down code here.
    [super tearDown];
}  
// Test methods go here
@end

Это всего лишь основной скелет. Он отлично работает в моем другом проекте и в этом проекте, пока я не импортирую никаких других файлов. Когда я импортирую другой файл из этого проекта и использую его, я вижу следующую ошибку в журнале вывода Xcode:
The test bundle at /Users/[Me]/Library/Developer/Xcode/DerivedData/[AppName]-dwuuuwcpmdqxqmgxomoniplwhlpb/Build/Products/Debug-iphonesimulator/[AppName]Tests.octest could not be loaded because a link error occurred. It is likely that dyld cannot locate a framework framework or library that the the test bundle was linked against, possibly because the framework or library had an incorrect install path at link time.

Я уже проверил, что:

  • Все рамки, которые я использую, были добавлено в "Link Binary with Библиотеки "для приложения и теста цели.
  • Целевая аудитория настроена правильно строить и что все мои методы тестирования отображаются в Edit Схема...- > Тест- > Испытания
  • Каждый вопрос, кроме этого, был разрешено и нет компилятора ошибки.
  • Все обсуждаемые параметры здесь настроены правильно и идентичны к моему другому проекту, который проверяет правильно.

Любые мысли о том, что может быть причиной этого?

4b9b3361

Ответ 1

Мне нужно было установить свойство "Test Host" на целевом unit test на $(BUNDLE_LOADER). Это решило мою проблему!

Ответ 2

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

В итоге я просто создал новую цель unit test, выполнив следующие шаги: http://twobitlabs.com/2011/06/adding-ocunit-to-an-existing-ios-project-with-xcode-4/

И теперь все в порядке.

Итак - если у вас есть странные, необъяснимые ошибки ссылок, вам может быть лучше просто создать новую цель unit test. Требуется 2 минуты.

Ответ 4

Когда я получаю ошибки компоновщика, выполняющие модульные тесты, две вещи исправляют проблему для меня. Первое решение - установить для параметра "Настройка после сборки" значение "ДА" и выбрать "Продукт" > "Создать для" > "Создать для тестирования" для запуска тестов. Это решение проще реализовать.

Второе решение - добавить файлы реализации приложения в цель unit test. Откройте инспектор файлов, выбрав "Просмотр" > "Утилиты" > "Инспектор файлов". Выберите файл реализации в навигаторе проекта. Установите флажок рядом с целью unit test в инспекторе файлов.

Для приложений iPhone, работающих в симуляторе, убедитесь, что параметр сборки тестового хоста пуст. Симулятор не поддерживает модульные тесты, размещенные на сервере.

Ответ 5

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

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

TestTarget → Фазы сборки → Скомпилировать источники

Ответ 6

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

Что сработало для меня, было добавление новой цели: cocoa touch unit test (убедитесь, что параметры загрузчика пакетов и тестовых хостов пустые), просмотр ошибок сборки и добавление вручную отсутствующих зависимостей - по одному один из всех исходных файлов из моего проекта, которые были необходимы, а затем Framework. Не очень элегантный, но я был счастлив заставить его работать. Не знаю, почему я еще не пробовал эту библиотеку GHUnit.

Ответ 7

Убедитесь, что целевая целевая аудитория настроена как зависимая (Build Phases → Target Dependencies).

Ответ 8

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

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

Я знаю, что это может быть не очень полезно для целевых объектов iOS, но, по крайней мере, пойдите в тестовую целевую ссылку Binary Binary With Libraries и посмотрите, есть ли какие-либо красные библиотеки. Это дало мне идею, возможно, это также поможет некоторым из вас.

Ответ 9

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

Решение:

  • Выберите небольшой диапазон ваших файлов .m (используйте "Фильтр в навигаторе" (cmd-opt-j) для поиска .m)
  • Показать инспектор файлов (cmd-opt-1) для просмотра целевых членов файлов
  • Убедитесь, что соответствующие файлы являются членами вашей тестовой цели.

Примечание. Если флажок тестовой цели показывает - вместо + или неконтролируемый, это означает, что некоторые, но не все из выбранных файлов являются членами цели.

Я пытался делать более интеллектуальные вещи во время слияния с файлом .xcodeproj project.pbxproj, но каждый раз отказывался от разочарования своей непостижимостью и отказывался от этого метода.

(Другое примечание: я выбираю только несколько файлов одновременно по двум причинам:

  • Производительность Xcode для инспекторе файлов при выборе более 7-10 файлов плохая.
  • Некоторые файлы не являются и не должны быть участниками тестовой цели, и легче выполнять процесс устранения, когда выбранный диапазон мал)