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

Ошибки сборки XCTest для целевой цели Xcode 5:

Я установил проект iOS 7 XCode 5 для модульных тестов.

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

ld: building for iOS Simulator, but linking against dylib built for MacOSX file
'/Applications/Xcode5-DP5.app/Contents/Developer/Library/Frameworks/XCTest.framework/XCTest' 
for architecture i386

Любые идеи о том, как решить?

4b9b3361

Ответ 1

Проверьте свои пути поиска в вашем тестовом целевом параметре. Они могут быть повреждены при добавлении XCTest Framework.

Добавление XCTest к одному из моих проектов добавило "/" к путям, заставляя их не находить правильную версию.

Ответ 2

Ни один из вышеперечисленных ответов не работал у меня. Я нашел ответ здесь в комментарии, оставленном Тимом Макфарлейном.

Для ошибок компоновщика, ищущих класс в вашем приложении... установите для параметра "Символы, скрытые по умолчанию" значение "НЕТ" в вашем приложении цель. Это делает все ваши классы приложений доступными для вашей тестовой цели автоматически...

Итак, это означает:

  • Навигатор проектов > Выберите проект
  • Цели > Выберите приложение (не тесты)
  • Настройки сборки > Поиск "Символы, скрытые по умолчанию"
  • "Символы, скрытые по умолчанию" > Измените его с "ДА" на "НЕТ"

Ответ 3

У меня была такая же проблема; проблема (для меня, по крайней мере) заключалась в том, что параметр FRAMEWORKS_SEARCH_PATHS build перечислил папку фреймворков SDK после основной папки фреймворков разработчиков.

Фреймворки, включенные в Xcode, имеют три отдельные сборки: один для OS X, один для iOS (устройство) и третий для iOS Simulator. OS X build находится в главной папке разработчика, а две другие находятся под их соответствующими папками платформы. В данном случае, если вы не указали сначала поиск папок SDK (которые находятся в папках платформы), Xcode (или, вернее, компоновщик) сначала найдет сборку OS X и создаст ошибку, которую вы видите.

Решение прост, поместите:

FRAMEWORK_SEARCH_PATHS = $(SDKROOT)/Developer/Library/Frameworks $(inherited)

в настройках сборки. Если вы устанавливаете параметры сборки в файле проекта (я не рекомендую его, но этот еще один вопрос в течение другого дня), он просто называется "пути поиска Framework".

ПРИМЕЧАНИЕ. Иногда Xcode немного медленнее ловить; вам, вероятно, понадобится удалить вашу папку build (лучше, чем просто чистую), чтобы она вступила в силу.

Ответ 4

У вас такая же проблема после преобразования тестов из SenTestCase в XCTestCase. Исправлена ​​проблема восстановления исходных данных:

"$(SDKROOT)/Developer/Library/Frameworks" (non-recursive)
"$(DEVELOPER_LIBRARY_DIR)/Frameworks" (non-recursive)

Ответ 5

Итак, для меня то, что мне не хватало, пробовав все остальное в этом посте, было:

Другие флаги компоновщика:

-framework XCTest

В настоящее время я использую Xcode 6.0 (с iOS 8 SDK), поэтому я удивлен тем, что опция "Редактировать > Рефактоp > Преобразовать в XCTest..." не добавляет это автоматически.

Ответ 6

Я столкнулся с проблемой при добавлении рамки sentestingkit в xcode 5. Эти настройки работали для решения проблемы компоновщика. Search Paths

Ответ 7

У меня возникла проблема при добавлении другого файла для тестов. Если вы сделаете это с помощью (CMD + N), убедитесь, что тестовый комплект (т.е. "AppNameTests" ).

Я думаю, что только эти .xctest пакеты имеют доступ к XCTest Framework.

Ответ 8

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

Просто выберите файл .m, убедитесь, что у вас открыта правая панель.

XCode Test Target Image

Ответ 9

У меня была та же проблема, когда я пытался создавать тесты на основе XCTTest с помощью pre-7.0 SDK. Когда я выбрал 7.0 в качестве базового SDK, эта ошибка ссылки исчезла.

Ответ 10

Имел ту же проблему, но в итоге получилось несколько другое решение.

выберите XCTest.framework и убедитесь, что только целевая папка проверена только в тестовой папке.

Target Membership

Ответ 11

Убедитесь, что путь Framework для поиска (FRAMEWORK_SEARCH_PATHS) для цели YourProjectTests включает в себя путь $(SDKROOT)/Developer/Library/Frameworks и этот список указан до $(inherited).

В моем случае оба пути присутствовали, но $(inherited) был первым.

Кредит отправляется https://stackoverflow.com/users/181947/brian-clear в Предупреждение компоновщика Apple Mach-O (id): создание для MacOSX, но привязка против dylib, созданного для iOS