XCTest/XCTest.h не найден на старых проектах, построенных в Xcode 6
У меня есть несколько проектов, которые я пытаюсь построить с помощью Xcode 6 Beta 2. У всех проектов есть библиотека определенного типа, которая использует XCTest (Kiwi/XCTest и Specta), которые не строятся в Xcode 6, потому что XCTest/XCTest.h не может быть найден.
fatal error: 'XCTest/XCTest.h' file not found
#import <XCTest/XCTest.h>
Я заметил, что XCTest.framework больше не находится в списке фаз сборки "Связи с бинарниками", но это прекрасно, потому что, когда я создаю новый проект с Xcode 6, кажется, что библиотека связана автоматически.
Возможно, из-за некоторой релевантности мои зависимости, связанные с XCTest, все вносятся через Cocoapods.
Есть ли что-нибудь, о чем я не подозреваю, что мне нужно обновить мой проект?
Ответы
Ответ 1
Примечание.. Это может не понадобиться для проектов, созданных в Xcode 7.
У CocoaPods есть исправление для этого здесь и здесь
Чтобы исправить это для любых зависимостей CocoaPod, вам нужно добавить следующее в FRAMEWORK_SEARCH_PATHS
в любой объект Pod, для которого требуется XCTest (например, Kiwi, Specta, FBSnapshotTestCase и т.д.).
$(PLATFORM_DIR)/Developer/Library/Frameworks
![screenshot]()
Это позволит вам ссылаться на XCTest в любых зависимостях, которые могут возникнуть. Это может быть исправлено в будущем обновлении CocoaPods или Pod, на который вы ссылаетесь, поэтому вы можете удалить его позже.
Это не вредно для более ранних версий Xcode, поэтому их следует использовать безопасно.
Ответ 2
Я перемещал файлы в проекте. Все, что вам нужно сделать, - это выбрать тестовые файлы xxxTests.m
и т.д., а в file inspector
выбрать target
как test
, а не как обычную цель.
Ответ 3
Я заметил, что XCTest доступен только для тестовой цели (в XCode 6). Если вы используете XCTest для любой другой цели (по какой-либо причине), вы увидите ошибку XCTest.h not found
.
Ответ 4
@squarefrog имеет правильный ответ, но вам придется делать это вручную каждый раз, когда вы обновляете свои модули: (
Если вы добавите это в свой podfile, он автоматически добавит дополнительный путь для вас. Например. если вы хотите добавить $(PLATFORM_DIR)/Developer/Library/Frameworks
в FRAMEWORK_SEARCH_PATHS
для Specta:
post_install do |installer|
target = installer.project.targets.find { |t| t.to_s == "Pods-Tests-Specta" }
if (target)
target.build_configurations.each do |config|
s = config.build_settings['FRAMEWORK_SEARCH_PATHS']
s = [ '$(inherited)' ] if s == nil;
s.push('$(PLATFORM_DIR)/Developer/Library/Frameworks')
config.build_settings['FRAMEWORK_SEARCH_PATHS'] = s
end
else
puts "WARNING: Pods-Tests-Specta target not found"
end
end
Ответ 5
Эта ошибка возникает, когда вы добавили файл, в котором XCTest используется вне тестовой цели. Чтобы исправить это в AppCode, вы можете щелкнуть правой кнопкой мыши по любому подозреваемому файлу и выбрать "Управлять целевыми объектами", а затем проверить только контрольную цель.
Ответ 6
Я столкнулся с такой же проблемой через некоторое время, когда я импортировал инфраструктуру XCTest из фаз сборки и решил проблему.
Сформировать фазы- > XCTest.Framework > очистить и запустить. Я надеюсь, что это будет полезно для некоторых.
для справки... Импортировать XCTest в существующий проект
Ответ 7
На момент написания последней версии Cocoapods (0.33.1) не было исправления проблемы.
Но режущая версия делает.
Следуйте этому руководству, чтобы установить последнюю версию Cocoapods из источника. Я называю мой pod-dev
(описанный в руководстве), чтобы отличить его от установленной gem версии контейнеров.
Преимущество этого подхода в том, что вам не нужны дополнительные скрипты в вашем подфайле. Вам просто нужно запомнить pod-dev install
вместо обычного pod install
.
Ответ 8
Это самая легкая работа, которую я нашел. Никаких изменений проекта не требуется. И это изменение сохранится до следующего обновления Xcode:
cd /Applications/Xcode6-Beta7.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/Developer/Library/Frameworks
ln -s ../../../../../Library/Frameworks/XCTest.framework
Ответ 9
В проекте без Cocoapods (так что напрямую не отвечая на вопрос OP, но, возможно, полезный для меня или других в будущем), у нас была та же проблема. Он был решен путем замены наших предыдущих элементов OCTest на XCTest. Например, файл MyApp.xcodeproj/project.pbxproj имеет этот diff (сокращенный);
- path = MyAppUnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };
+ path = MyAppUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
Ответ 10
Лучший способ иметь XCTest - добавить его из Test Nagigator (пятый значок в левой панели).
Действуя так, новый тестовый файл xx.m не нацелен (в правой панели) приложение (в левой панели > Цель, расширение Wrapper: приложение), но пакет (расширение Wrapper: xctest)
- XCTest.framework остается в Red,
- Из-за некоторых изменений вы можете получить ошибку
'XCTest/XCTest.h' file not found
, потому что ваш файл попал в приложение.
Ответ 11
добавить путь к каркасу поиска
/Applications/Xcode6-Beta.app/Contents/Developer/Library/Frameworks