Ответ 1
Проверьте свои пути поиска в вашем тестовом целевом параметре. Они могут быть повреждены при добавлении XCTest Framework.
Добавление XCTest к одному из моих проектов добавило "/" к путям, заставляя их не находить правильную версию.
Я установил проект 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
Любые идеи о том, как решить?
Проверьте свои пути поиска в вашем тестовом целевом параметре. Они могут быть повреждены при добавлении XCTest Framework.
Добавление XCTest к одному из моих проектов добавило "/" к путям, заставляя их не находить правильную версию.
Ни один из вышеперечисленных ответов не работал у меня. Я нашел ответ здесь в комментарии, оставленном Тимом Макфарлейном.
Для ошибок компоновщика, ищущих класс в вашем приложении... установите для параметра "Символы, скрытые по умолчанию" значение "НЕТ" в вашем приложении цель. Это делает все ваши классы приложений доступными для вашей тестовой цели автоматически...
Итак, это означает:
У меня была такая же проблема; проблема (для меня, по крайней мере) заключалась в том, что параметр 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
(лучше, чем просто чистую), чтобы она вступила в силу.
У вас такая же проблема после преобразования тестов из SenTestCase в XCTestCase. Исправлена проблема восстановления исходных данных:
"$(SDKROOT)/Developer/Library/Frameworks" (non-recursive)
"$(DEVELOPER_LIBRARY_DIR)/Frameworks" (non-recursive)
Итак, для меня то, что мне не хватало, пробовав все остальное в этом посте, было:
Другие флаги компоновщика:
-framework XCTest
В настоящее время я использую Xcode 6.0 (с iOS 8 SDK), поэтому я удивлен тем, что опция "Редактировать > Рефактоp > Преобразовать в XCTest..." не добавляет это автоматически.
Я столкнулся с проблемой при добавлении рамки sentestingkit в xcode 5. Эти настройки работали для решения проблемы компоновщика.
У меня возникла проблема при добавлении другого файла для тестов. Если вы сделаете это с помощью (CMD + N), убедитесь, что тестовый комплект (т.е. "AppNameTests" ).
Я думаю, что только эти .xctest пакеты имеют доступ к XCTest Framework.
У меня была такая же проблема после переименования моего целевого имени и перемещения вещей. Оказалось, что мои тесты были частью моей главной цели. Убедитесь, что все ваши тестовые файлы принадлежат только вашей тестовой цели.
Просто выберите файл .m, убедитесь, что у вас открыта правая панель.
У меня была та же проблема, когда я пытался создавать тесты на основе XCTTest с помощью pre-7.0 SDK. Когда я выбрал 7.0 в качестве базового SDK, эта ошибка ссылки исчезла.
Имел ту же проблему, но в итоге получилось несколько другое решение.
выберите XCTest.framework и убедитесь, что только целевая папка проверена только в тестовой папке.
Убедитесь, что путь 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