XCode에서 어플개발 시 타겟이 되는 디바이스는 macOS, iOS 디바이스, 시뮬레이터 등 여러 환경이 있다.
조건부 컴파일을 통해 기기에 따라 다른 헤더 파일을 including하거나, 시뮬레이터로 디버깅 시에만 log메시지를 출력하고 실제 기기에선 log를 띄우지 않는 등의 처리가 가능하다.
이를 유용하게 사용하면 타겟 디바이스별로 소스코드를 따로 만들지 않아도 된다.
ex) iOS에서만 다르게 컴파일 하고싶을 때
#if TARGET_OS_IOS
// iOS code
#else
// Default code
#endif
TARGET_OS_OSX: macOS(OS X)일 때만 1이다
TARGET_OS_IOS: iOS 기기 또는 iOS시뮬레이터일 때 1이다
TARGET_OS_SIMULATOR: iOS시뮬레이터일 때 1이다. (tvOS시뮬레이터, watchOS시뮬레이터일 때 포함)
타겟 시스템별 상수 테이블
http://sealiesoftware.com/blog/archive/2010/8/16/TargetConditionalsh.html