Xcode 6에서 빌드 된 이전 프로젝트에서 XCTest / XCTest.h를 찾을 수 없습니다.


82

Xcode 6 Beta 2로 빌드하려고하는 프로젝트가 몇 개 있습니다. 모든 프로젝트에는 XCTest / XCTest.h에서 빌드하지 않는 XCTest (Kiwi / XCTest 및 Specta)를 사용하는 라이브러리 유형이 있습니다. 찾을 수 있습니다.

fatal error: 'XCTest/XCTest.h' file not found
#import <XCTest/XCTest.h>

XCTest.framework가 더 이상 "Link Libraries with Binaries"빌드 단계 목록에 없다는 것을 알았습니다.하지만 Xcode 6 으로 프로젝트를 만들 때 라이브러리가 자동으로 연결된 것처럼 보이기 때문에 괜찮 습니다.

아마도 약간의 관련성이 있지만 XCTest가 필요한 종속성은 모두 Cocoapods를 통해 가져옵니다.

프로젝트로 업데이트해야한다는 사실을 모르는 것이 있습니까?

답변:


142

참고 : Xcode 7에서 생성 된 프로젝트에는 필요하지 않을 수 있습니다.

CocoaPods에는 여기여기에 대한 수정 사항이 있습니다 .


CocoaPod 종속성에 대해이 문제를 해결 FRAMEWORK_SEARCH_PATHS하려면 XCTest가 필요한 모든 Pod 대상 (예 : Kiwi, Specta, FBSnapshotTestCase 등)에 다음을 추가해야합니다 .

$(PLATFORM_DIR)/Developer/Library/Frameworks

스크린 샷

이렇게하면 모든 종속성에서 XCTest를 참조 할 수 있습니다. 이것은 CocoaPods의 향후 업데이트 또는 참조하는 Pod에서 수정 될 수 있으므로 나중에 제거 할 수 있습니다.

이전 버전의 Xcode에는 해롭지 않으므로 사용하기에 안전해야합니다.


squarefrog 감사합니다. 관련 문제는 여기에
fatuhoku

1
다음 릴리스는 언제 예정됩니까?
fatuhoku

6
이것은 xcode 6 GM에서 KIM과 작동하지 않는 것 같습니다 ..?
Thomas Clowes 2014-09-14

3
나는 "Xcode 7과 관련이 없음"에 동의하지 않습니다. Xcode 7.1에서 문제가 발생했습니다. 위에서 설명한대로 프레임 워크 검색 경로를 추가 한 후 문제가 사라졌습니다. 나는 Xcode 7에서 시작된 프로젝트에 문제가 없을 것이라고 생각하지만 여기서 문제는 최신 Xcode로 이전 프로젝트를 빌드하는 것입니다.
Jerry Krinock 2015

1
XCode 9부터 FRAMEWORK_SEARCH_PATHS 빌드 설정을 $ (DEVELOPER_FRAMEWORKS_DIR) 및 $ (상 속됨)으로 설정해야합니다.
berbie

40

프로젝트에서 파일을 옮기고있었습니다. 당신이해야 할 모든 테스트 파일 선택이다 xxxTests.m에 등을하고 file inspector선택 target으로 test아닌 일반 대상으로.


1
정확히 나에게 일어난 일. 이동했을 때 파일의 대상이 "변경"된 것을 알지 못했습니다. 나는 그것이 어떻게 옮겨 졌는지 (Xcode에서 삭제하고 다시 추가)에 따라 생각 했어야했습니다. 감사.
chadbag

1
나를 위해 일한 간단한 대답. 파일 이름을 바꿀 때 문제가 있었고 이것이 내 경우 해결 방법이었습니다.
Simon

17

XCTest는 테스트 대상 (Xcode 6)에서만 사용할 수 있습니다. 어떤 이유로 든 다른 대상에 XCTest를 사용하는 경우 XCTest.h not found오류가 표시됩니다.


그게 다야. Cocoapods는 정적 라이브러리 프로젝트 / 타겟을 생성합니다. 좋은 찾기!
Erik Kerber

1
대부분의 경우 모든 XCTest 관련 코드를 테스트 대상으로 이동해야합니다.
Mustafa

CocoaPods를 사용하여 프로젝트에 Kiwi 또는 Specta를 포함하는 경우 어렵습니다.
squarefrog 2014-07-09

2
그래서 ... 수정은 무엇입니까?
fatuhoku 2014-07-28

12

이 오류는 XCTest가 테스트 대상 외부에서 사용되는 파일을 추가 한 경우 발생합니다. AppCode에서이 문제를 해결하려면 의심되는 파일을 마우스 오른쪽 버튼으로 클릭하고 '대상 관리'를 선택한 다음 테스트 대상 만 선택되었는지 확인하십시오.


나는이 문제에 두 번 이상 부딪쳤다.
pshah 18:32 :

이것은 프로젝트에서 파일을 이동하고 잘못된 대상 아래에 다시 추가 한 후 발생했습니다.
Giles

11

@squarefrog에 정답이 있지만 포드를 업데이트 할 때마다 수동으로 계속해야합니다.

이것을 podfile에 추가하면 자동으로 추가 경로가 추가됩니다. 예를 들어 Specta 에 추가 $(PLATFORM_DIR)/Developer/Library/Frameworks하려는 FRAMEWORK_SEARCH_PATHS경우 :

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

"Pods-Tests-Specta"프로젝트 설정과 일치 하도록 변경 하거나 @squarefrog가 모든 대상을 반복하도록 제안한 루프를 사용해야 할 수도 있습니다.
pix0r 2014 년

1
@squarefrog가 루프를 제안하지 않았습니다. 내 말은 @deanWombourne의 솔루션에서 2-3 줄 installer.project.targets.each do |target을 모든 대상을 반복하고 변경 사항을 적용하는 것입니다.
pix0r 2014 년

2

빌드 단계에서 XCTest 프레임 워크를 가져 와서 문제를 해결 한 후 얼마 후에 동일한 문제에 직면했습니다.

빌드 단계-> XCTest.Framework> 정리 및 실행. 누군가에게 도움이 되길 바랍니다 ..

참고로 ... XCTest를 기존 프로젝트로 가져 오기


이것은 나를 위해 일했지만 새 테스트를 위해 대상 설정으로 이동하고 일반 탭에서 앱의 API를 테스트하기위한 상자를 선택해야했습니다.
Fran K.

1

글을 쓰는 시점에서 최신 버전의 Cocoapods (0.33.1)에는 문제에 대한 수정 사항이 없습니다.

그러나 최첨단 버전은 그렇습니다.

이 가이드 에 따라 소스에서 최신 버전의 Cocoapod를 설정하십시오. 나는 pod-dev그것을 gem이 설치된 포드 버전과 구별하기 위해 내 (가이드에서 다룬) 라고 부릅니다 .

이 접근 방식의 이점은 Podfile에 추가 스크립팅이 필요하지 않다는 것입니다. pod-dev install평상시 대신 a를 수행하는 것을 기억해야합니다 pod install.


1

XCTest를 얻는 가장 좋은 방법은 Test Nagigator (왼쪽 창의 다섯 번째 아이콘)에서 추가하는 것입니다.

따라서 새 xx.m 테스트 파일은 오른쪽 창에서 앱 (왼쪽 창> Target, Wrapper Extension : app)을 대상으로하지 않고 번들 (Wrapper Extension : xctest)을 대상으로합니다.

  • XCTest.framework는 빨간색으로 유지됩니다.
  • 일부 수정으로 인해 오류가 발생할 수 있습니다. 'XCTest/XCTest.h' file not found파일이 앱을 대상으로해야하기 때문입니다.

0

이것은 내가 찾은 가장 쉬운 해결 방법입니다. 프로젝트 변경이 필요하지 않습니다. 그리고이 변경 사항은 다음 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

이것의 단점은 Xcode 업데이트가있을 때마다이 작업을 수행하도록해야하기 때문에 다른 사람들과 프로젝트를 공유하는 경우입니다. 이것은 Cocoapods 구현의 문제이므로 Cocoapods를 사용하여 해결하는 것이 좋습니다!
squarefrog 2014 년

동의합니다. 그리고 이것은 완벽하지 않습니다. 그러나 그것은 정말 쉽고 당신이 가지고있는 포드의 수 (O (1))에 따라 잘 확장됩니다. Xcode 6 버전의 수도 제한하는 것이 좋습니다. :-)
Steven Kramer

프레임 워크 검색 경로에 경로를 추가해도 잘리는 것 같지 않습니다. 테스트는 빌드되지만 실행되지는 않습니다. 분명히 테스트 번들이 XCTest 프레임 워크를 해결할 수 없기 때문입니다.
Steven Kramer

0

Cocoapods가없는 프로젝트에서 (따라서 OP의 질문에 직접 답하지는 않지만 나중에 저나 다른 사람들에게 도움이 될 수 있음) 동일한 문제가 발생했습니다. 이전 OCTest 항목을 XCTest로 대체하여 해결되었습니다. 예를 들어 MyApp.xcodeproj / project.pbxproj 파일에는이 diff (축약 됨)가 있습니다. - path = MyAppUnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + path = MyAppUnitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.