如何在Obj-C代码中引用环境变量

时间:2010-09-16 14:53:48

标签: iphone xcode environment-variables

我在Xcode源代码树中定义一个名为“MY_SRC_DIR”的路径变量。我想获取此环境变量的值,并将其放在obj-c代码中的NSString中。例如,

-(NSString*) getSourceDir

{

    return @"${MY_SRC_DIR}"; // not the right solution and this is the question

}

5 个答案:

答案 0 :(得分:61)

来自http://rosettacode.org/wiki/Environment_variables#Objective-C

[[NSProcessInfo processInfo] environment]返回当前环境的NSDictionary。

例如:

[[[NSProcessInfo processInfo] environment] objectForKey:@"MY_SRC_DIR"]

答案 1 :(得分:25)

只需将所需的var公开到当前Xcode部署Scheme的Environment Variables列表中,您就可以在运行时检索它,如下所示:

NSString *buildConfiguration = [[NSProcessInfo processInfo] environment][@"BUILD_CONFIGURATION"];

它也适用于基于swift的项目。

Adding Xcode Build Setting Var to Environment var

希望它有所帮助!! :

答案 2 :(得分:13)

这是另一种方法:

.xcconfig文件:

FIRST_PRESIDENT = '@"Washington, George"'
GCC_PREPROCESSOR_DEFINITIONS = MACRO_FIRST_PRESIDENT=$(FIRST_PRESIDENT)

目标C代码:

#ifdef FIRST_PRESIDENT
    NSLog(@"FIRST_PRESIDENT is defined");
#else
    NSLog(@"FIRST_PRESIDENT is NOT defined");
#endif
#ifdef MACRO_FIRST_PRESIDENT
    NSLog(@"MACRO_FIRST_PRESIDENT is %@", MACRO_FIRST_PRESIDENT);
#else
    NSLog(@"MACRO_FIRST_PRESIDENT is undefined, sorry!");
#endif

控制台输出 - 我已经从NSLog中删除了垃圾:

FIRST_PRESIDENT is NOT defined
MACRO_FIRST_PRESIDENT is Washington, George

答案 3 :(得分:7)

我发现将构建时环境变量作为字符串获取的唯一方法是将它放在这样的字典元素中:

<key>Product Name</key>
<string>$PRODUCT_NAME</string>

然后像这样检索它:

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* productName = infoDict[@"Product Name"];
NSLog(@"Product Name: %@", productName);

答案 4 :(得分:-4)

这个问题的最佳答案是关于这个问题的公认答案。

Constants in Objective-C

只要将文件导入任何.h / .m文件将消耗所述值,您将获得最大的里程数,并且不需要任何特殊方法来获取您正在搜索的值。