iphone - objective - Cómo hacer referencia a una variable de entorno dentro del código Obj-C
xcode manual pdf (5)
Defino una variable de ruta en el árbol fuente de Xcode llamado "MY_SRC_DIR". Me gustaría obtener el valor de esta variable de entorno y colocarla en un NSString en el código obj-c. Por ejemplo,
-(NSString*) getSourceDir
{
return @"${MY_SRC_DIR}"; // not the right solution and this is the question
}
Aquí hay otra manera de hacerlo:
archivo .xcconfig:
FIRST_PRESIDENT = ''@"Washington, George"''
GCC_PREPROCESSOR_DEFINITIONS = MACRO_FIRST_PRESIDENT=$(FIRST_PRESIDENT)
código objetivo 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
Salida de consola: eliminé la basura de NSLog:
FIRST_PRESIDENT is NOT defined
MACRO_FIRST_PRESIDENT is Washington, George
De http://rosettacode.org/wiki/Environment_variables#Objective-C :
[[NSProcessInfo processInfo] environment]
devuelve un NSDictionary del entorno actual.
Por ejemplo:
[[[NSProcessInfo processInfo] environment] objectForKey:@"MY_SRC_DIR"]
La única forma que he encontrado para obtener una variable de entorno de compilación como una cadena es ponerla en un elemento de diccionario como este:
<key>Product Name</key>
<string>$PRODUCT_NAME</string>
y luego recuperarlo así:
NSDictionary* infoDict = [[NSBundle mainBundle] infoDictionary];
NSString* productName = infoDict[@"Product Name"];
NSLog(@"Product Name: %@", productName);
La mejor respuesta a esta pregunta es la respuesta aceptada sobre esta pregunta.
Obtendrá la mayor cantidad de millas recorridas y no necesitará ningún método especial para obtener el valor que está buscando, siempre y cuando importe el archivo a cualquier archivo .h / .m que vaya a consumir dicho valor.
Simplemente exponga la var deseada en la lista de variables de entorno del esquema de implementación de Xcode actual y podrá recuperarla en tiempo de ejecución de esta manera:
NSString *buildConfiguration = [[NSProcessInfo processInfo] environment][@"BUILD_CONFIGURATION"];
También se aplica a proyectos basados en rápidos.
¡¡Espero eso ayude!! :]