2013-05-03 49 views
2

用户特定的预处理器宏我希望能有具体的代码块,如#ifdef SOME_VARIABLE和变量将在项目的构建时间填写,如果该项目正在兴建一个特定用户的机器上的价值。设置为Xcode的

这可能吗?

+0

你能使用一个Info.plist代替的#ifdef DEBUG _ $(USER)?你真的需要不同的构建吗?如果是的话你可以使用不同的构建配置?会有多少个不同的SOME_VARIABLE。 – GayleDDS 2013-05-03 02:30:41

+0

我试图做类似这样的帖子的内容:http://stackoverflow.com/questions/9088380/xcode-preprocessor-dependent-on-environment-variable,但我没有看到在代码中宏的值。 – 2013-05-03 15:57:38

+0

但是你在做一个条件编译还是只需要你的代码中的值。我使用构建脚本在Info.plist中设置版本号minor和major以及git hash,然后阅读代码中的Info.plist以获取值并显示它们。看到我的答案第二到最后在后:http://stackoverflow.com/questions/3730186/how-do-i-force-xcode-to-rebuild-the-info-plist-file-in-my-project-every -time-ib/16332406#16332406 – GayleDDS 2013-05-04 00:03:13

回答

4

您设置的值,在“预处理宏”构建设置。在构建设置中设置“SOME_VARIABLE = $ {USER}”相当于代码中的#define SOME_VARIABLE“jappleseed”。

然后在你的代码,你可以这样做:

#define jappleseed 1 
#define sjobs  2 

#if DEV_USER == jappleseed 
    NSLog(@"Hi Jhonny"); 
#elif DEV_USER == sjobs 
    NSLog(@"Hi Steve"); 
#endif 

注:这是一个人为的例子,如果你真的想要字符串“jappleseed”在你的代码中使用,你应该使用一个Info.plist和不是#定义

+0

我试过了,但我没有得到Build Settings中设置的值,只是定义的名称。我发现环境值在Xcode项目设置窗格中展开为期望值,但是当我尝试打印出定义值时,我看到了变量的名称,而不是值。 – 2013-05-04 01:15:19

+0

我更新了包含代码端的答案。 – GayleDDS 2013-05-04 01:50:24

2

在Xcode中6(至少),你可以包括你的用户名作为名在预处理宏宏的的一部分构建设置部分:

ENV_USER_$(USER)=1(这将定义宏ENV_USER_myusername

然后,在你的代码,你可以使用

#if ENV_USER_myusername 
... 
#endif 

定义中的=1可能是多余的,因为Xcode中似乎将变量定义为true默认。我们把它放在那里只是为了安全起见,并能够使用#if#ifdef。这种方式存在,它可能被定义为没有问题,但要评估false,在这种情况下仍然#ifdef会的工作,但#if不会。当然,您可以将其定义为您希望的任何值,具体取决于您想要的值。

0
在迅速

:添加到“活动编辑条件”

没有办法分配一个值