Antes de Swift, definiría un conjunto de esquemas para las versiones alfa, beta y de distribución. Cada uno de estos esquemas tendría un conjunto de macros que se definieron para bloquear ciertos comportamientos a nivel de proyecto. El ejemplo más simple es la macro DEBUG = 1 que se define por defecto para todos los proyectos de Xcode en el esquema predeterminado para la compilación Ejecutar. Se podría consultar #ifdef DEBUG ... y tomar decisiones en el código en consecuencia, incluso compilar código no necesario.
Parece que este tipo de compuerta configuracional no es tan fácil con Swift, ya que las macros no son compatibles. ¿Alguien puede sugerir un enfoque comparable? No me importa si el código se compila per se. Sin embargo, me gustaría incluir características basadas en el esquema de compilación.
$(inherited)
se utiliza en la configuración de destino para heredar la configuración del proyecto.$(inherited)
hace que mi comentario sea irrelevante, ¡gracias!Nos topamos con un problema al no querer establecer indicadores rápidos del compilador porque no queríamos tener que configurarlos y mantenerlos actualizados para diferentes objetivos, etc. Además, en nuestra base de código mixto, no queríamos recordar para establecer nuestras banderas de manera apropiada todo el tiempo para cada idioma.
Para el nuestro, declaramos un archivo en ObjC
PreProcessorMacros.h
En ellos
PreProcessorMacros.m
Luego, en su Encabezado de Puente Objective-C
Ahora, use esto en su base de código Swift
Esto definitivamente es una solución, pero resolvió nuestro problema, así que lo publiqué aquí con la esperanza de que ayude. No pretende sugerir que las respuestas existentes no sean válidas.
fuente
Solución más rápida para el método Logans. Establecer
-D DEBUG
enOther Swift Flags
deSwift Compiler - Custom Flags
la sección de configuración de generación de su objetivo.Luego declare el siguiente método en alcance global:
Ahora úsalo como
fuente
Para mí, el elemento de depuración de " Condición de compilación activa " en "DEPURAR" funcionó.
Luego, el uso del trabajo clave DEBGU en #IF DEBUG funciona en modo de depuración y #ELSE en modo de liberación:
Use simplemente como sigue:
fuente
Estoy trabajando en una base de código de idioma mixto donde el código obj-c usa una macro para enviar mensajes de depuración a la consola (y esa macro se basa en nuestro indicador de preprocesador de depuración). Quería poder llamar a esa misma macro en el código rápido ...
Es un poco molesto que no pueda simplemente llamar a la macro directamente en el código rápido, pero al menos ahora solo tengo un lugar en el proyecto para preocuparme por activar / desactivar mi indicador de depuración.
fuente