为Xcode设置用户特定的预处理器宏

4

我希望能够有特定的代码块,如#ifdef SOME_VARIABLE,如果项目是在特定用户的机器上构建,则该变量的值将在项目构建时填充。

这种情况是否可能?


你能否使用 Info.plist 代替 #ifdef?你真的需要不同构建吗?如果需要,你可以使用不同的构建配置吗?会有多少个不同的 SOME_VARIABLE? - GayleDDS
我正在尝试做类似于这篇文章的事情:https://dev59.com/32ox5IYBdhLWcg3wnViz 但是我在代码中看不到宏的值。 - Paul Hansen
但是你是在进行条件编译还是只需要代码中的值。我使用构建脚本在我的 Info.plist 中设置了版本号、次要版本号和 git 哈希,然后在我的代码中读取 Info.plist 来获取这些值并显示它们。请参见我的答案,位于此帖子的倒数第二个位置:https://dev59.com/d2865IYBdhLWcg3wnP2a#16332406 - GayleDDS
2
我想根据特定的用户名有条件地编译一些代码。 - Paul Hansen
3个回答

5

您可以在“预处理器宏”构建设置中设置值。在构建设置中设置“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而不是#define。

我尝试过了,但是我没有得到在构建设置中设置的值,只得到了定义的名称。我看到环境值在Xcode项目设置面板中被展开为预期的值,但是当我尝试打印出定义的值时,我看到的是变量的名称,而不是其值。 - Paul Hansen

2
在 Xcode 6 中(至少是),您可以将用户名作为宏的名称的一部分包含在预处理器宏选项卡中的Build Settings里:

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

然后,在您的代码中,您可以使用:

#if ENV_USER_myusername
...
#endif

在定义中的=1可能是多余的,因为Xcode似乎默认将变量定义为true。我们只是为了保险起见并能够使用#if#ifdef而将其放在那里。这样就不必担心它可能被定义但却求值为false,在这种情况下#ifdef仍然有效,但#if则不会。当然,您可以根据需要将其定义为任何值。

2
在Swift中:将DEBUG_$(USER)添加到“Active Compilation Conditions”中 没有办法分配一个值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接