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


Answers

주 타겟에서 Enable Testability 빌드 사용 옵션을 Yes로 설정해야합니다.

아래 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 릴리스 노트에 따라 디버그 빌드에서만 사용해야합니다. "Testable 빌드 설정은 디버그 구성에서만 사용되어야합니다. 앱 또는 프레임 워크 " https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326

Question

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

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




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

여기에 답변을 게시해도 문제가 해결되지 않았습니다. 나에게는이 테스트가 필요하지 않으므로 버렸을뿐입니다. 따라서 테스트 버튼의 선택을 해제하십시오.

그리고 이제 오류가 사라졌습니다.




해결책은 꽤 간단합니다. 앱 구성표 아래에 체크 박스를 올바르게 설정했는지 확인하십시오. Archive Build에 대한 테스트 대상을 지정하지 않아야 합니다.




이것은 아마도 주요 타겟 Enable TestabilityNO 로 설정 되었기 때문일 수 있습니다. 테스트를 실행하는 데 사용되는 디버그 구성표에서 YES 로 설정해야합니다.

Carthage를 사용하는 경우 @testable 을 사용하여 프레임 워크를 가져 오면 릴리스 스키마로 빌드되기 때문에이 문제가 발생할 수 있습니다.

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




Xcode Profiler를 실행할 때만이 문제가 발생하는 사용자 : 구성표 관리에서 테스트 기능이 활성화 된 프로필로 빌드 구성을 전환하면 대부분의 경우 디버그됩니다.




필자의 경우에는 테스트 ( Test )에 대한 사용자 정의 빌드 구성과 종속성 관리자로 cocoapods 를 사용했습니다

테스트 가능성을 가능하게하기 위해 다음 PodfilePodfile 의 끝에 추가해야했습니다.

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

기본적으로 cocoapodsDebug 빌드에 대해서만 ENABLE_TESTABILITYYES 설정합니다.




포드 / 카르타고를 사용하는 경우 위의 솔루션을 사용할 수 있습니다. 하지만 iOS 자체 (예 : Contacts)의 프레임 워크를 사용하는 경우 기본 프로젝트 대상의 '라이브러리 검색 경로'에서 이러한 프레임 워크에 대한 경로를 추가해야합니다.