Ответ 1
Из http://rosettacode.org/wiki/Environment_variables#Objective-C:
[[NSProcessInfo processInfo] environment]
возвращает NSDictionary текущей среды.
Например:
[[[NSProcessInfo processInfo] environment] objectForKey:@"MY_SRC_DIR"]
Я определяю переменную пути в дереве исходного кода Xcode, называемом "MY_SRC_DIR". Я хотел бы получить значение этой переменной среды и поместить ее в NSString в obj-c-коде. Например,
-(NSString*) getSourceDir
{
return @"${MY_SRC_DIR}"; // not the right solution and this is the question
}
Из http://rosettacode.org/wiki/Environment_variables#Objective-C:
[[NSProcessInfo processInfo] environment]
возвращает NSDictionary текущей среды.
Например:
[[[NSProcessInfo processInfo] environment] objectForKey:@"MY_SRC_DIR"]
Просто выведите желаемый var в список переменных окружения текущей схемы развертывания Xcode, и вы сможете получить его во время выполнения следующим образом:
NSString *buildConfiguration = [[NSProcessInfo processInfo] environment][@"BUILD_CONFIGURATION"];
Он также применим к проектам, основанным на быстрой работе.
Надеюсь, это поможет!:]
Вот еще один способ сделать это:
.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
Единственный способ, по которому я нашел переменную среды времени сборки в виде строки, - это поместить ее в элемент словаря следующим образом:
<key>Product Name</key>
<string>$PRODUCT_NAME</string>
а затем восстановить его следующим образом:
NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* productName = infoDict[@"Product Name"];
NSLog(@"Product Name: %@", productName);
Лучший ответ на этот вопрос - это принятый ответ на этот вопрос.
Вы получите максимальный пробег и не будете нуждаться в каких-либо специальных методах для получения значения, которое вы ищете до тех пор, пока вы импортируете файл в любой файл .h/.m, который будет потреблять указанное значение.