Xcode:条件DEBUG/TEST代码的预处理器宏

MeX*_*eXx 11 debugging macros xcode preprocessor unit-testing

我的代码中有一些部分(例如在AppDelegate.m中)不应该为单元测试编译,比如

#ifndef CONFIGURATION_TESTS
// Code that should not be compiled in the Unit Tests
#endif
Run Code Online (Sandbox Code Playgroud)

在创建新项目时选择"添加单元测试"时,Xcode会设置目标.在项目文件中,我已将标志CONFIGURATION_TESTS添加到MyAppTests Built-Target的预处理器宏中,但未添加到MyApp目标.

这是我发现的许多帖子中的建议方式.

但这不起作用,因为(我猜)MyAppTests目标将MyApp目标作为依赖项,并且因为AppDelegate.m被添加到MyApp目标,它将使用MyApp构建设置进行编译,因此,未定义CONFIGURATION_TESTS .

在单元测试文件中,宏被定义并按预期运行(因为测试文件只由MyAppTests目标构建?)

有谁知道这是怎么做的,我认为这将是一个常见的问题......

MeX*_*eXx 11

我终于找到了答案:关键是要创建一个新的构建配置(让我们调用这个配置测试)

然后相应地配置预处理器宏的值,因此对于配置Debug和Release,设置CONFIGURATION_TESTS = 0,对于配置测试,设置CONFIGURATION_TESTS = 1

最后,编辑Unit-Test模式以使用Testing作为构建配置.就是这样:P

我在博客上写了详细的逐步解释