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

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

我们使用Activate Compilation Conditions来切换生产服务器URL和beta服务器URL,如下所示:

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

因此,当app is Archived时,url将切换到生产服务器url。 在调试时,我们可以使用beta服务器进行开发。

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

如果我们想测试这种行为,我们必须将Test Build configuartion标志设置为Release for Test目标。

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

Module XXXXFramework was not compiled for testing

要解决此问题,我们只需为我们的框架将Enable Testability for Release设置为Yes

但是,问题是Apple不建议根据本说明将“ Enable Testability ”设置为“是”

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

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

用于使用发布模式测试框架

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

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

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