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

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

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

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



답변

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

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


답변

필자의 경우 테스트를 위해 사용자 정의 빌드 구성 (이라고도 함 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빌드


답변

앱 구성표에서 확인란을 올바르게 설정했는지 확인하십시오. 당신은해야한다 선택을 취소 아카이브 구축을위한 테스트 목표를.

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


답변

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

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


답변

기본 목표가 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


답변

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

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

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


답변

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