使用@testable时,'模块未被编译进行testing'

我试图使用Swift 2的新的@testable声明来暴露我的类到testing目标。 不过,我得到这个编译器错误:

在这里输入图像说明

Intervals是包含我试图公开的类的模块。 我如何摆脱这个错误?

在您的主要目标中,您需要将“ Enable Testability构build选项设置为“是”。

根据下面的@earnshavian的评论,这应该只用于每个苹果发行说明的debugging版本:“启用可testing性构build设置应该只用于您的debuggingconfiguration,因为它禁止优化,取决于不导出内部符号应用程序或框架“ https://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326

解决scheme是相当简单的人。 确保您在您的应用scheme下正确设置您的checkbox。 您应该检查存档生成的testing目标。

在这里输入图像说明

在我的情况下,我使用自定义生成configuration进行testing(称为Test ),也用cocoapods作为依赖pipe理器

我不得不添加以下几行到我的Podilfe来启用可testing性

 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 

默认情况下, cocoapodsENABLE_TESTABILITY设置为YES仅对Debug版本

这可能是因为你的主要目标Enable Testability被设置为NO 。 您应该在debuggingscheme中将其设置为YES (用于运行testing)。

如果你使用迦太基,这个问题可能是由@testable导入框架造成的,因为它们是用一个发布scheme构build的。

大多数情况下,导入带有该前缀的框架是不好的做法,所以你可以避免它。 如果你不能,你应该在框架的发布scheme中Enable Testabilityhttps://developer.apple.com/library/content/releasenotes/DeveloperTools/RN-Xcode/Chapters/Introduction.html#//apple_ref/doc/uid/TP40001051-CH1-SW326

对于那些只有在运行Xcode Profiler的情况下遇到这种情况的人:在您的schemepipe理中将configuration文件构buildconfiguration切换到启用可testing性的configuration – 而在大多数情况下这将是debugging:

在这里输入图像说明

如果你使用豆荚/迦太基,以上的解决scheme是好的。 但是如果你使用的是iOS本身的框架(如Contacts),则需要在主项目目标的“库searchpath”中为这些框架添加path。 在这里输入图像说明

这在Xcode 8之前的项目中并没有发生,但是在升级到Xcode 8之后,这让我感到困惑。

在这里发布的答案没有得到解决我的问题。 对我来说,我只是放弃了这些testing,因为这是不需要的。 所以取消选中testingbutton:

在这里输入图像说明 而现在错误已经消失了。