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

36 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

}
Run Code Online (Sandbox Code Playgroud)

hig*_*ted 63

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

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

例如:

[[[NSProcessInfo processInfo] environment] objectForKey:@"MY_SRC_DIR"]
Run Code Online (Sandbox Code Playgroud)

  • 对于OP的问题可能是错误的答案,但对我来说是正确的答案!谢谢!! (22认同)
  • BUZZZ:错误的答案; 此方法将在运行时返回环境变量.问题是访问存在于(Xcode)构建时的环境变量. (10认同)

Dav*_*dez 27

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

NSString *buildConfiguration = [[NSProcessInfo processInfo] environment][@"BUILD_CONFIGURATION"];
Run Code Online (Sandbox Code Playgroud)

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

将Xcode Build Setting Var添加到Environment var

希望能帮助到你!!:]


Wil*_*sch 14

这是另一种方法:

.xcconfig文件:

FIRST_PRESIDENT = '@"Washington, George"'
GCC_PREPROCESSOR_DEFINITIONS = MACRO_FIRST_PRESIDENT=$(FIRST_PRESIDENT)
Run Code Online (Sandbox Code Playgroud)

目标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
Run Code Online (Sandbox Code Playgroud)

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

FIRST_PRESIDENT is NOT defined
MACRO_FIRST_PRESIDENT is Washington, George
Run Code Online (Sandbox Code Playgroud)


geo*_*war 8

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

<key>Product Name</key>
<string>$PRODUCT_NAME</string>
Run Code Online (Sandbox Code Playgroud)

然后像这样检索它:

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