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