Как ссылаться на переменную среды внутри кода Obj-C - PullRequest
35 голосов
/ 16 сентября 2010

Я определяю переменную пути в исходном дереве Xcode, которая называется «MY_SRC_DIR».Я хотел бы получить значение этой переменной среды и поместить его в строку NSString в коде obj-c.Например,

-(NSString*) getSourceDir

{

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

}

Ответы [ 5 ]

61 голосов
/ 16 сентября 2010

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

[[NSProcessInfo processInfo] environment] возвращает NSDictionary текущей среды.

Например:

[[[NSProcessInfo processInfo] environment] objectForKey:@"MY_SRC_DIR"]
26 голосов
/ 23 января 2015

Просто выставьте нужный var в список переменных среды вашей текущей схемы развертывания XCode, и вы сможете получить его во время выполнения, как это:

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

Это также относится к быстрым проектам.

Adding Xcode Build Setting Var to Environment var

Надеюсь, это поможет! :]

13 голосов
/ 07 апреля 2013

Вот еще один способ сделать это:

.xcconfig file:

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
7 голосов
/ 07 февраля 2013

Единственный способ получить переменную среды времени сборки в виде строки - поместить ее в элемент словаря, например так:

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

, а затем получить его так:

NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* productName = infoDict[@"Product Name"];
NSLog(@"Product Name: %@", productName);
0 голосов
/ 16 сентября 2010

Лучший ответ на этот вопрос - принятый ответ на этот вопрос.

Константы в Objective-C

Вы получите максимальный пробег и не будете нуждаться в каких-либо специальных методах для получения искомого значения.когда вы импортируете файл в любой файл .h / .m, он будет использовать указанное значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...