我尝试使用Swift 2的新@testable
声明将我的类暴露给测试目标。但是我收到了这个编译错误:
Intervals
是包含我试图公开的类的模块。我如何摆脱这个错误?
答案 0 :(得分:202)
在主目标中,您需要将Enable Testability
构建选项设置为是。
根据以下@earnshavian的评论,这应仅用于调试版本,根据Apple发行说明:" Enable Testability构建设置应仅在您的Debug配置中使用,因为它禁止依赖于优化不从应用程序或框架中导出内部符号" https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326
答案 1 :(得分:11)
答案 2 :(得分:8)
在我的情况下,我使用自定义构建配置进行测试(称为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_TESTABILITY
版本YES
设置Debug
答案 3 :(得分: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
答案 4 :(得分:4)
答案 5 :(得分:1)
使用Bitrise运行测试时,我开始收到此错误。
与其他用户说的不同,此不是(基于Target
或<{1}(基于Schema
)基础。
选择Configuration
-> Target
标签->查找Build Settings
->在您正在使用的配置上启用它。
请注意,Apple建议在用于调试而非AppStore的配置上启用此功能。
答案 6 :(得分:0)
如果您使用pods / Carthage,则上述解决方案很好。 但是,如果您使用的是iOS本身的框架,例如。联系人&#39;,您需要在图书馆搜索路径&#39;中添加这些框架的路径。您的主要项目的目标。
答案 7 :(得分:0)
如果您要测试框架:
转到测试目标->构建阶段->创建新副本文件阶段->选择框架->添加所有递归使用的框架
答案 8 :(得分: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 |configuration| do
configuration.build_settings["ENABLE_TESTABILITY"] = "YES"
end
end
答案 9 :(得分:-2)