通过Xcodescheme添加预处理器定义

我目前有一个iPhone应用程序,我需要build立一些特殊的“味道”。 理想情况下,我想有一个每个“风味”的计划,每个scheme将定义(或设置)一个或多个预处理器的定义,我可以使用分支在我的代码甚至可能预处理我的info.plist文件。 这显然可以用多个目标来完成,但由于我可以有很多不同的应用程序的“风味”,这是很好的方法来保持目标的计数。 我目前的想法是在预执行脚本期间添加这些预处理器定义,但是我不能在我的生活中find更新GCC_PREPROCESSOR_DEFINITIONS的方法。 由于它是一个环境variables,我不应该有权访问GCC_PREPROCESSOR_DEFINITIONS?

更糟糕的情况下,您可以为该scheme执行预生成脚本。 你必须包含每个scheme的脚本:

我宁愿将其附加到configuration:

然后,您可以轻松地为各种configuration添加预处理器macros,如我在这里debugging:

<ProjectName> _Prefix.pch文件是放置整个程序的macros的好地方,就像我在这里:

在我的例子中,当不在debugging模式时,我们有效地closures了控制台输出,提供了一点速度提升。

为了满足我允许scheme设置预处理器定义的要求,我提出的最佳解决scheme是使scheme预执行和后执行脚本修改一个xcconfig文件。 这个文件依次更新构buildconfiguration,设置预处理器定义,甚至允许我定义预处理器定义来有条件地修改info.plist。 如果有其他人走这条路,请确保你考虑到这个文件是如何被源代码控制处理的。

本文的问题和相关答案对我有帮助: 如何在xcconfigvariables中追加值?

如何定义多个目标并在特定于目标的构build选项中定义预处理器macros? 那么你只需要有一个scheme,你可以一次构build所有的目标,都有自己的具体构buildconfiguration。

如果我正确地理解了你的问题,你正在寻找将一些用户定义的预处理macros添加到你的源代码中,有一种方法可以使用Xcode将它们添加到目标中。 (例如GCC_PREPROCESSOR_DEFINITIONS = USE_TAPJOY)

步骤1)确定marco名称,例如USE_TAPJOY步骤2)转到目标 – >select选项卡“Build Setting”(确保所有选项卡已启用)步骤3)在search框中search“Preprocessor Macro”)步骤4)检查Debug /释放部分步骤5)在那里input你的Marco 在这里输入图像说明

第6步)在你的源代码中使用这个macros,如下所示

For conditional include #ifdef USE_TAPJOY #import <Tapjoy/Tapjoy.h> #endif For conditional source code #ifdef USE_TAPJOY // Tapjoy Connect Notifications [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tjcConnectSuccess:) name:TJC_CONNECT_SUCCESS object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tjcConnectFail:) name:TJC_CONNECT_FAILED object:nil]; #endif 

祝你好运