2010-10-19 34 views
23

Si agregué una configuración definida por el usuario en mi configuración de compilación, ¿cómo puedo leer esa configuración en mi código Objective-C?¿Cómo puedo acceder a una configuración de compilación de Xcode definida por el usuario?

Tengo dos archivos en mi proyecto, debug.plist y release.plist. Quiero que mi archivo MainApp.m lea uno de estos archivos en función de la configuración de compilación que se esté ejecutando. Configuré una configuración definida por el usuario llamada "nombre de archivo" en las configuraciones de Depuración y Liberación para apuntar al archivo apropiado. Pero no sé cómo mi archivo MainApp.m puede leer la variable de nombre de archivo de la configuración actual en ejecución.

Respuesta

8

Su código no puede leer configuraciones de construcción arbitrarias. Necesita usar macros de preprocesador.

EDIT: Por ejemplo, en la configuración de destino para la configuración de depuración, se podría añadir DEBUGGING=1 en el entorno de construcción preprocesador macros, y no define la depuración en la configuración de lanzamiento. A continuación, en el código fuente que podría hacer cosas como:

#if DEBUGGING 
    use this file 
#else 
    use the other one 
#endif 
+0

Gracias, JWWalker, me puede mostrar cómo definir unas macros del preprocesador específicamente para el proyecto de Xcode? –

+0

OK, agregué un ejemplo a mi respuesta. – JWWalker

+3

P.S. Hay una forma de usar una configuración definida por el usuario: verifique "Expandir configuraciones de compilación en el archivo Info.plist", luego puede usar '$ MYSETTING' en el archivo Info.plist. – JWWalker

34

Aquí es lo que hice, no estoy 100% seguro de si esto es lo que está buscando:

  1. entrar en la configuración de compilación panel y seleccione el icono de engranaje en la parte inferior izquierda: añadir definido por el usuario ajuste
  2. Crear la configuración definida por el usuario, por ejemplo:

    MY_LANG -> en_us 
    
  3. A continuación, en el establecimiento de la macro de preprocesador, puede hacer referencia a ese valor:

    LANGCODE="$(MY_LANG)" 
    

Ahora se puede hacer referencia a langCode en todos los archivos de origen, y va a ser lo que fue llenada en su entorno de generación personalizada . Me doy cuenta de que hay un nivel de indirección aquí, pero eso es intencional en mi caso: mi proyecto XCode contiene un grupo de diferentes objetivos/configuraciones con sus propias macro de preprocesador. No quiero tener que ir a todos, solo para cambiar el código de idioma. De hecho, defino el código de idioma en el nivel del proyecto. También uso MY_LANG en un par de scripts, por lo que solo una macro del preprocesador no funcionaría. Puede haber una manera más inteligente, pero esto funciona para mí.

+1

bien, puedo seguir los dos primeros pasos, sin embargo, no puedo entender a qué te refieres con la configuración Macro del preprocesador en el paso tres. He intentado añadir a los GCC_PREPROCESSOR_DEFINITIONS como se describe en http://stackoverflow.com/questions/367368/how-to-define-a-preprocessor-symbol-in-xcode sin embargo, que no funcionó –

+6

Otra forma de hacer esto es después de creó una configuración de usuario, vaya a la pestaña Crear fases, y para el archivo fuente donde la configuración está destinada a ser leída, agregue: '-D'LANGCODE = @" $ (MY_LANG) "''. –

+0

Si define macro para ** cadena ** en la configuración de compilación, no olvide escapar citas como esta 'LANGCODE = @ \" $ (MY_LANG) \ "' – DanSkeel

6

Probé zmippie sugerencia pero no funcionó para mí.

lo tengo trabajando con esto:

${MY_LANG} 
5

puede acceder a su configuración de en tiempo de ejecución (como se sugiere en un comentario de @JWWalker) acumulación definida por el usuario

  1. Añadir una entrada a su archivo Info.plist, y lo puso a su construcción definida por el usuario Ajuste

    MySetting -> ${MYSETTING} 
    
  2. Leer su valor del código de

    [[NSBundle mainBundle] objectForInfoDictionaryKey:@"MySetting"]; 
    
0

En el caso de cualquier otra persona sigue atascado en busca de cómo hacer macros del preprocesador, mira para el Apple LLVM - sección en la configuración de generación de preprocesamiento. Debajo, verá una sección llamada Macros de Preprocesador.

Aquí es donde por defecto, Xcode inserta el DEBUG = 1 macro para la configuración de depuración de construcción.

Usted puede añadir su propia aquí, y darles distintos valores para depurar, liberar y ninguna costumbre construir configuraciones que pueda tener.

Para añadir uno, haga doble clic en la lista actual valor para la configuración que desee y, se mostrará un pequeño editor de agradable con una macro en cada línea. Simplemente agregue su propio nombre de macro y asígnele un valor de la misma forma en que se realiza el DEPURACIÓN.

Estos se pueden comprobar durante la fase de construcción preprocesador usando #if, #ifdef etc. para proporcionar código o valores condicional.

Espero que ayude.

Cuestiones relacionadas