[Xcode] 플랫폼 구분 전처리기(Preprocessor)
플랫폼(Platform), 즉 현재 프로젝트의 타겟 OS가 OSX 이냐 아니면 iOS냐를 구분하는 전처리기를 정리한다. 기존의 Swift 글에서도 정리했던 적이 있지만 Objective-C 코드에서도 종종 사용되기에 별도로 정리한다.
결국 TARGET_OS_IPHONE 만을 이용해 파악하면 왠만하면 문제없이 플랫폼 구분이 가능 할 것이다.
관련글: Swift - 유용한 전처리기(Preprocessor)
Swift의 경우
딱히 설명이 필요 없을 것 같다.#if os(iOS) // ... iOS 용 코드 ... #elseif os(OSX) // ... OSX 용 코드 ... #else // ... 현재는 이 경우에 걸리는 경우는 없을거라 생각된다 ... #endif스위프트에서 사용하는 경우에는 플랫폼이 딱 맞게 떨어진다. 이 말이 무슨 말인지 모르겠다면 Objective-C의 경우와 비교해 보자. =_=;;
Objective-C의 경우
Objective-C로 코딩하는 경우 C식의 룰을 따라 역시 비슷하게 #if 문을 이용해 TARGET_OS_IPHONE 등등의 전처리기를 이용 할 수 있다. 아마도 아래와 같은 4가지만 정리하면 될 것 같다:TARGET_OS_MAC
TARGET_OS_IPHONE
: iOS 디바이스 혹은 시뮬레이터TARGET_IPHONE_SIMULATOR
: iOS 시뮬레이터TARGET_OS_EMBEDDED
: iOS 디바이스
#import "TargetConditionals.h" #if TARGET_OS_IPHONE // iOS 디바이스 혹은 시뮬레이터 #else // OSX 등등 #endif스위프트의 경우와 다른점이 있다면 TARGET_OS_MAC의 값이다. 개인적으론 이 TARGET_OS_MAC 플래그는 사용하지 않는걸 권한다. 왜냐하면 이 플래그는 OSX나 iOS나 시뮬레이터를 가리지 않고 무조건 1이기 때문이다. (뭥미?!!!)
결국 TARGET_OS_IPHONE 만을 이용해 파악하면 왠만하면 문제없이 플랫폼 구분이 가능 할 것이다.
관련글: Swift - 유용한 전처리기(Preprocessor)
댓글