Cómo definir un símbolo de preprocesador en Xcode

¿Es posible establecer un símbolo para la comstackción condicional configurando propiedades en un proyecto de Xcode?

Mi objective es crear un símbolo que esté disponible para todos los archivos, sin tener que usar import / include, para que un conjunto de clases comunes pueda tener un comportamiento especial en algunos proyectos. Como el siguiente, pero con mis propios símbolos.

#if TARGET_IPHONE_SIMULATOR ... #endif 

Vaya a la configuración de su Destino o Proyecto, haga clic en el ícono del engranaje en la esquina inferior izquierda y seleccione “Agregar configuración definida por el usuario”. El nuevo nombre de configuración debe ser GCC_PREPROCESSOR_DEFINITIONS , y puede escribir sus definiciones en el campo de la derecha.

Según los comentarios de Steph, la syntax completa es:

 constant_1=VALUE constant_2=VALUE 

Tenga en cuenta que no necesita los ‘=’ si solo desea # definir un símbolo, en lugar de darle un valor (para #ifdef sentencias #ifdef )

No necesita crear una configuración definida por el usuario. La configuración incorporada “Macros de preprocesador” funciona bien. texto alternativo http://idisk.mac.com/cdespinosa/Public/Picture%204.png

Si tiene varios destinos o proyectos que usan el mismo archivo de prefijo, utilice las Macros de preprocesador que no se utilizan en los encabezados precomstackdos, de modo que las diferencias en la definición de macro no activen un conjunto adicional innecesario de encabezados precomstackdos.

Como una adición, si está utilizando esta técnica para definir cadenas en su objective, así es como tuve que definirlas y usarlas:

En Configuración de comstackción -> Macros de preprocesador, y sí, las barras diagonales inversas son fundamentales en la definición:

 APPURL_NSString=\@\"www.foobar.org\" 

Y en el código fuente:

 objectManager.client.baseURL = APPURL_NSString; 

Puede usar el archivo *_Prefix.pch para declarar macros de proyecto *_Prefix.pch . Ese archivo generalmente está en tu grupo Otras fonts .

Está bajo “Preprocesamiento GCC 4.2” (o simplemente coloca “prepro” en el cuadro de búsqueda) …

… sin embargo, por mi vida no puedo hacer que funcione.

Tengo mis configuraciones estándar de depuración y liberación, y quiero definir DEBUG = 1 en la configuración de depuración. Pero después de agregarlo como un valor:

(en la ventana de configuración)> Macros de preprocesador: DEBUG = 1

 #if DEBUG printf("DEBUG is set!"); #endif 

… nunca se imprime / se llama. Me esta volviendo loco…

En respuesta al comentario de Kevin Laity (ver la respuesta de cdespinosa), sobre la sección de preprocesamiento de GCC que no se muestra en su configuración de comstackción, haga que el SDK activo sea el que dice (SDK base) después de él y aparecerá esta sección. Puede hacer esto seleccionando el menú Proyecto> Establecer destino activo> XXX (SDK base). En diferentes versiones de XCode (Base SDK) puede ser diferente, como (Configuración del proyecto o Proyecto predeterminado).

Después de que aparezca esta sección, puede agregar sus definiciones a Macros del procesador en lugar de crear una configuración definida por el usuario.

Para el proyecto Xcode 9.4.1 y C ++. Adición de const char* Macros de preprocesador a comstackciones tanto de depuración como de versión .

  1. Seleccione su proyecto

    seleccionar proyecto

  2. Seleccione Configuraciones de comstackción

    seleccionar configuraciones de compilación

  3. Buscar ” Macros de preprocesador

    búsqueda1 search2

  4. Abrir lista interactiva

    abrir lista interactiva

  5. Agregue sus macros y no olvide escapar de la cita

    agregar camino

  6. Úselo en el código fuente como const char* común const char*

     ... #ifndef JSON_DEFINITIONS_FILE_PATH static constexpr auto JSON_DEFINITIONS_FILE_PATH = "definitions.json"; #endif ... FILE *pFileIn = fopen(JSON_DEFINITIONS_FILE_PATH, "r"); ... 

Puede duplicar el objective que tiene la sección de preprocesamiento, cambiarle el nombre por el nombre que desee y luego cambiar el valor de macro del preprocesador.