如何在发布模式下启用Framework的可测试性?

时间:2017-08-25 06:57:25

标签: ios swift xcode unit-testing

我有一个由Swift 3.0编写的iOS应用程序项目 工作区包含由我们的团队构建的动态框架,用于在整个项目中共享可重用的代码和资源。

我们使用Activate Compilation Conditions来切换生产服务器网址和测试版服务器网址,如下所示:

#if DEBUG
let url = "http://my-beta-server-url"
#else
let url = "http://my-production-server-url"

因此,当应用程序已存档时,该网址将切换到生产服务器网址。 在调试时,我们可以使用beta服务器进行开发。

我们有一个单元测试目标来测试这个框架。 最近我们想要添加一个简单的健全性测试来检查发布模式下的网址是否正确。

如果我们要测试此行为,我们必须为测试目标设置Build configuartion标记为Release

将其设置为Release时,Xcode会编译错误:

Module XXXXFramework was not compiled for testing

要解决此问题,我们只需将Enable Testability的{​​{1}}设置为Release即可。{/ p>

然而,问题是Apple建议根据此note

建议将Yes设置为“是”。
  

可测试性:编写Swift 2.0框架和应用程序的测试   无需公开内部例程。使用@testable导入   您的测试源代码中的{ModuleName}可以使所有公共和内部   例程可用。应用程序或框架目标需要编译   Enable Testability构建设置设置为Yes。启用   可测试性构建设置应仅在您的Debug中使用   配置,因为它禁止依赖于不的优化   从应用程序或框架导出内部符号。 (17732115)

有没有人有解决我的问题的建议,或任何其他解决方案来实现我的目标?

使用发布模式测试框架

1 个答案:

答案 0 :(得分:3)

我为你创建了一个示例项目。您的设置可能不同,但此示例项目将演示如何测试发布URL和调试URL,完成编辑方案设置。这是链接https://github.com/borg666/ios-multi-scheme-config-example

基本上诀窍是有一个禁用调试标志的另一个方案,它运行一个单独的测试文件,您可以在其中测试发布URL。通过这样做,您可以自由地启用此方案的可测试性。

您可以考虑为网址设置用户定义的变量,我的示例可以实现更复杂的配置。