@testable을 사용할 때 '모듈이 테스트를 위해 컴파일되지 않았습니다'


146

Swift 2의 새로운 @testable선언을 사용하여 클래스를 테스트 대상에 노출하려고합니다. 그러나이 컴파일러 오류가 발생합니다.

여기에 이미지 설명을 입력하십시오

Intervals노출하려고하는 클래스가 포함 된 모듈입니다. 이 오류를 어떻게 제거합니까?

답변:


238

기본 대상에서 Enable Testability빌드 옵션을 예로 설정해야합니다 .

아래 @earnshavian의 의견에 따르면, 이것은 애플 릴리스 노트에 따라 디버그 빌드에서만 사용해야합니다. "테스트 가능 빌드 빌드 설정은 내부 심볼 내보내기에 의존하지 않는 최적화를 금지하므로 디버그 구성에서만 사용해야합니다. 응용 프로그램 또는 프레임 워크 " https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326


안녕하세요, 같은 오류가 발생하지만 테스트 가능 옵션이 표시되지 않고 xcode 7을 사용하고 있습니다.
user1601259

2
@ user1601259-최상위 프로젝트를 선택하고 빌드 설정으로 이동 한 후 빌드 옵션 제목 아래에서 옵션을 찾을 수 있습니다.
hgwhittle

@hgwhittle-최상위 프로젝트를 선택할 때 빌드 옵션에서 볼 수있는 것은 "디버그 정보 형식"과 "빌드 빌드 확인"뿐입니다. 빌드 옵션에서 대상을 선택하면 "내장 된 컨텐츠에 신속한 코드가 포함되어 있습니다"가 표시됩니다. 그게 다야. 빌드 설정을 검색 할 때 찾을 수 없습니다. xcode 7 때문입니까?
user1601259

1
"빌드 설정"에서 "기본"을 선택했을 수 있습니다. 왼쪽에서 "All"을 선택하면 "Enable Testability"
Array

1
테스트가 실행 @testable되지만 (필요한 ) App Store에 제출해야하는 릴리스 빌드에서 정확히 어떻게 작동 합니까? 경우는 Enable Testability단지 디버그 빌드에 대해,이 주변의 방법은 무엇입니까? 테스트 코드를 풀어야합니까?
timgcarlson

15

필자의 경우 테스트를 위해 사용자 정의 빌드 구성 (이라고도 함 Test)과 cocoapods종속성 관리자를 사용했습니다.

Podfile테스트 가능성을 활성화 하기 위해 끝에 다음 줄을 추가해야했습니다.

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            if config.name == 'Test'
                config.build_settings['ENABLE_TESTABILITY'] = 'YES'
            end
        end
    end
end

기본으로 cocoapods세트 ENABLE_TESTABILITYYES대해서만은 Debug빌드



8

Xcode 프로파일 러를 실행할 때만이 문제가 발생하는 경우 : 계획 관리에서 프로파일 빌드 구성을 테스트 가능성이 활성화 된 구성으로 전환하십시오. 대부분의 경우 디버그됩니다.

여기에 이미지 설명을 입력하십시오


4

기본 목표가 Enable Testability로 설정되어 있기 때문일 수 있습니다 NO. YES테스트를 실행하는 데 사용되는 디버그 구성표로 설정해야합니다 .

Carthage를 사용 @testable하는 경우 릴리스 스키마를 사용하여 빌드 된 프레임 워크를 가져 와서이 문제가 발생할 수 있습니다 .

대부분의 경우 접두사가있는 프레임 워크를 가져 오는 것은 좋지 않으므로 피할 수 있습니다. 당신이 할 수 없다면, 당신은 Enable Testability프레임 워크의 릴리스 계획에 있어야합니다 . https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326


2
@testable을 사용하여 프레임 워크를 가져 오는 것을 피하려면 어떻게해야합니까? 좋은 방법은 무엇입니까?
Jonathan Cabrera

3

Bitrise를 사용하여 테스트를 실행할 때이 오류가 발생하기 시작했습니다.

다른 사용자가 말한다 달리이 없는Target으로, 또는 당 Schema으로, 그것은 입니다Configuration기준. 사용중인 구성 에서 Target-> Build Settings탭-> 찾기 testability-> 사용 을 선택하십시오 .

Apple은 AppStore가 아닌 디버깅에 사용중인 구성에서이 기능을 활성화 할 것을 권장합니다.


0

포드 / 카트리지를 사용하는 경우 위의 해결책이 좋습니다. 그러나 iOS 자체의 '예 : 연락처'에서 프레임 워크를 사용하는 경우 기본 프로젝트 대상의 '라이브러리 검색 경로'에 이러한 프레임 워크에 대한 경로를 추가해야합니다. 여기에 이미지 설명을 입력하십시오


0

프레임 워크를 테스트하려는 경우 :

테스트 대상으로 이동-> 빌드 단계-> 새 사본 파일 작성 단계-> 프레임 워크 선택-> 재귀 적으로 사용되는 모든 프레임 워크 추가


0

만일 당신이 우연히

install! 'cocoapods',
         generate_multiple_pod_projects: true,
         incremental_installation: true

그런 다음이 방법입니다.

    # generated_projects only returns results if the we run "pod install --clean-install"
    # or install a pod for the first time

    installer.generated_projects.each do |project|
        project.build_configurations.each do |configuration|
            configuration.build_settings["ENABLE_TESTABILITY"] = "YES" 
        end
    end

-3

이것은 Xcode 8 이전의 프로젝트에서 발생하지 않았지만 Xcode 8로 업그레이드 한 후에 당황했습니다.

여기에 게시 된 답변으로 문제가 해결되지 않았습니다. 나를 위해, 나는이 테스트가 필요하지 않기 때문에 방금 버렸습니다. 테스트 버튼을 체크 해제하십시오 :

여기에 이미지 설명을 입력하십시오 이제 오류가 발생했습니다.


1
테스트가 필요하지 않은 경우 모든 빌드에서 테스트 대상을 제거하는 대신 프로젝트에서 테스트 대상을 제거하는 것이 좋습니다.
Jonathan Cabrera
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.