subir publicar appstore apps apple app ios xcode macos conditional-compilation

ios - publicar - sign in to app store connect



Qué#definiciones están configuradas por Xcode al compilar para iPhone (3)

Está en los documentos del SDK en "Compilación de código fuente condicional"

Las definiciones relevantes son TARGET_OS_IPHONE (y el obsoleto TARGET_IPHONE_SIMULATOR), que se definen en /usr/include/TargetConditionals.h en el marco de iOS. En las versiones anteriores de la cadena de herramientas, tenías que escribir:

#include "TargetConditionals.h"

pero esto ya no es necesario en la cadena de herramientas actual (xCode 6 / iOS8).

Entonces, por ejemplo, si solo quiere compilar un bloque de código si está compilando para el dispositivo, entonces debe hacerlo

#if !(TARGET_OS_SIMULATOR) ... #endif

Estoy escribiendo un código semi portátil y quiero ser capaz de detectar cuando estoy compilando para iPhone. Entonces quiero algo como #ifdef IPHONE_SDK...

Es de suponer que Xcode define algo, pero no puedo ver nada debajo de las propiedades del proyecto, y Google no es de mucha ayuda.


Las respuestas a esta pregunta no son del todo correctas. La cuestión de la plataforma y el hardware frente a Simulator es ortogonal.

¡No use la arquitectura como un acceso directo para la detección de plataforma o simulador! Este tipo de pensamiento descuidado ha causado muchos, muchos programadores una gran cantidad de acidez estomacal y dolor de cabeza en los últimos años.

Aquí hay una tabla ASCII de los condicionales. Los nombres no necesariamente tienen sentido por razones históricas:

+--------------------------------------+ | TARGET_OS_MAC | | +---+ +---------------------------+ | | | | | TARGET_OS_IPHONE | | | |OSX| | +-----+ +----+ +-------+ | | | | | | | IOS | | TV | | WATCH | | | | | | | +-----+ +----+ +-------+ | | | +---+ +---------------------------+ | +--------------------------------------+ Devices: TARGET_OS_EMBEDDED Simulators: TARGET_OS_SIMULATOR

TARGET_OS_MAC es cierto para todas las plataformas de Apple.

TARGET_OS_OSX es verdadero solo para macOS

TARGET_OS_IPHONE es cierto para iOS, watchOS y tvOS (dispositivos y simuladores)

TARGET_OS_IOS es verdadero solo para iOS (dispositivos y simuladores)

TARGET_OS_WATCH es verdadero solo para watchOS (dispositivos y simuladores)

TARGET_OS_TV es verdadero solo para tvOS (dispositivos y simuladores)

TARGET_OS_EMBEDDED es verdadero solo para el hardware iOS / watchOS / tvOS

TARGET_OS_SIMULATOR es verdadero solo para el Simulador.

También xcconfig que puede condicionalizar la configuración en archivos xcconfig por plataforma:

//macOS only SOME_SETTING[sdk=macosx] = ... //iOS (device & simulator) SOME_SETTING[sdk=iphone*] = ... //iOS (device) SOME_SETTING[sdk=iphoneos*] = ... //iOS (simulator) SOME_SETTING[sdk=iphonesimulator*] = ... //watchOS (device & simulator) SOME_SETTING[sdk=watch*] = ... //watchOS (device) SOME_SETTING[sdk=watchos*] = ... //watchOS (simulator) SOME_SETTING[sdk=watchsimulator*] = ... //tvOS (device & simulator) SOME_SETTING[sdk=appletv*] = ... //tvOS (device) SOME_SETTING[sdk=appletvos*] = ... //tvOS (simulator) SOME_SETTING[sdk=appletvsimulator*] = ... // iOS, tvOS, or watchOS Simulator SOME_SETTING[sdk=embeddedsimulator*] = ...


Para ver todas las macros definidas, agréguelas a "Otros indicadores C" de su configuración de compilación:

-g3 -save-temps -dD

Obtendrá algunos errores de compilación, pero el compilador volcará todas las definiciones en archivos .mi en el directorio raíz de su proyecto. Puede usar grep para verlos, por ejemplo:

grep define main.mi

Cuando hayas terminado, no te olvides de eliminar estas opciones de la configuración de compilación.