xcode gcc ios mgtwitterengine

xcode - TARGET_OS_IPHONE y ApplicationTests



gcc ios (4)

¿Por qué no funciona este código al compilar un paquete de prueba de unidad ApplicationTests?

#if TARGET_OS_IPHONE #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> #else #import <Cocoa/Cocoa.h> #endif

Una de mis dependencias tiene esta comprobación y compila perfectamente en mis paquetes de aplicaciones principales, pero intenta cargar <Cocoa/Cocoa.h> al compilar mi paquete ApplicationTests. Probablemente solo sea mi falta de comprensión de Xcode, pero me pongo nervioso cuando mis paquetes de prueba no se acumulan. ¿Alguna sugerencia?


La solución más sencilla es mover la declaración #import <Foundation/Foundation.h> si la condición #if y reemplazar Cocoa con AppKit de esta manera:

#import <Foundation/Foundation.h> #if TARGET_OS_IPHONE #import <UIKit/UIKit.h> #else #import <AppKit/AppKit.h> #endif

El encabezado general de la Fundación importa el encabezado NSObjCRuntime que a su vez importa el encabezado TargetConditionals.



No impone ninguna penalización de rendimiento, aunque puede perjudicar los tiempos de compilación. Dicho esto, no es realmente un problema para Objective C. Sin embargo, realmente puede doler cuando se trata de clases de C ++.


Tuve un problema similar: TARGET_OS_IPHONE no está definido al crear una biblioteca estática. Mi solución fue agregar " -DTARGET_OS_IPHONE " a la sección " Other C Flags " de las opciones de compilación de destino.