문제

나는 반복 가능한 코드를 작성하고 있으며 iPhone을 위해 컴파일 할 때 감지 할 수 있기를 원합니다. 그래서 나는 같은 것을 원한다 #ifdef IPHONE_SDK....

아마도 Xcode는 무언가를 정의하지만 프로젝트 속성에서는 아무것도 볼 수 없으며 Google은 도움이되지 않습니다.

도움이 되었습니까?

해결책

"소스 코드 컴파일 조건부"아래 SDK 문서에 있습니다.

관련 정의는 iOS 프레임 워크 내에서 /usr/include/targetconditionals.h에 정의 된 Target_os_iphone (및 Abstated Target_iphone_simulator)입니다. 이전 버전의 도구 체인에서는 다음을 작성해야했습니다.

#include "TargetConditionals.h"

그러나 이것은 더 이상 (Xcode 6/iOS8) 도구 체인에서 더 이상 필요하지 않습니다.

예를 들어, 장치를 위해 빌드하는 경우 코드 블록 만 컴파일하려면

#if !(TARGET_OS_SIMULATOR)
...
#endif

다른 팁

정의 된 모든 매크로를 보려면 빌드 구성의 "기타 C 플래그"에 이것을 추가하십시오.

-g3 -save-temps -dD

일부 빌드 오류가 발생하지만 컴파일러는 프로젝트의 루트 디렉토리의 모든 정의를 .MI 파일에 덤프합니다. 예를 들어 Grep을 사용하여 볼 수 있습니다.

grep define main.mi 

완료되면 빌드 설정에서 이러한 옵션을 제거하는 것을 잊지 마십시오.

이 질문에 대한 답은 정확하지 않습니다. 플랫폼과 하드웨어 대 시뮬레이터의 문제는 직교입니다.

아키텍처를 플랫폼 또는 시뮬레이터 감지의 바로 가기로 사용하지 마십시오! 이런 종류의 조잡한 사고로 인해 많은 많은 프로그래머가 수년 동안 많은 가슴 앓이와 두통을 일으켰습니다.

다음은 조건부의 ASCII 차트입니다. 이름이 역사적 이유로 반드시 의미있는 것은 아닙니다.

+--------------------------------------+
|             TARGET_OS_MAC            |
| +---+  +---------------------------+ |
| |   |  |      TARGET_OS_IPHONE     | |
| |OSX|  | +-----+ +----+ +-------+  | |
| |   |  | | IOS | | TV | | WATCH |  | |
| |   |  | +-----+ +----+ +-------+  | |
| +---+  +---------------------------+ |
+--------------------------------------+

Devices:      TARGET_OS_EMBEDDED
Simulators:   TARGET_OS_SIMULATOR

Target_os_mac은 모든 Apple 플랫폼에 맞습니다.


target_os_osx는 MacOS에만 해당됩니다

target_os_iphone은 iOS, WatchOS 및 TVOS (Devices & Simulators)의 경우에 적용됩니다.


target_os_ios는 iOS (Devices & Simulators)에만 해당됩니다.

Target_os_watch는 WatchOS (장치 및 시뮬레이터)에만 해당됩니다.

target_os_tv는 TVOS (Devices & Simulators)에만 해당됩니다.


target_os_embedded는 iOS/watchOS/TVOS 하드웨어에만 해당됩니다.

대상 _os_simulator는 시뮬레이터에만 해당됩니다.


또한 설정을 조절할 수 있습니다 xcconfig 플랫폼 별 파일 :

//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*] = ...
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top