티스토리 뷰

🍏/Swift

[Swift] 전처리문 (#if DEBUG, #if os)

사용자 eungding 2020. 8. 9. 23:08
728x90
반응형

[1] 전처리문이란

전처리문(PREPROCESSOR STATEMENT)은 말그대로 컴파일 이전에 미리 처리되는 문장을 의미합니다. 

전처리문은 #로 시작합니다.

 

종류도 여러가지가 있는데요,

 

상수(constant)를 정의하는 전처리문

#define PI 3.14           

 

파일을 포함시키는 전처리문

#include 파일이름

 

참거짓을 판별해서 어떤 코드를 컴파일 할지말지 결정하는 전처리문 

#if 조건문
    source code..
#endif

등등이 있습니다.

 

참고로 #define이랑 #include는 스위프트에서 못써요-!! 위의 예제는 C에서 주로 쓰이는 것 가져왔습니다. 

 

 

[2] Swift에서 전처리문을 쓴 경우

 

iOS 개발하다가 쓰는 경우는

보통 release와 debug를 구분하거나

  #if DEBUG
  print("DEBUG에서만 할 코드")
  #endif

 

OS를 구분할때 쓰입니다.

  #if os(iOS)
  print("ios에서만 할 코드")
  #elseif os(macOS)
  print("macOS에서만 할 코드")
  #elseif os(watchOS)
  print("wathOS에서만 할 코드")
  #endif

 

참고로 구글링하다가 많이 나오는 TARGET_OS_IOS는

Objective-C 개발할때 사용한다고 합니다. (참고: seorenn.blogspot.com/2015/05/xcode-preprocessor.html)

 

실제 Swift에서는 이렇게 해도 if문에 안걸립니다. 

  #if TAGET_OS_IOS
  print("hello")
  #endif

 

Swift에서는 os(iOS) 써야합니다.

 

[3] Build Setting - Flag

 

빌드세팅에서 Flag를 설정하고 전처리문으로 쓸 수 있습니다. 

 

프로젝트를 처음만들면 Debug 플래그만 들어가있는데요,

 

 

 

 

이렇게 RELEASE를 넣어주면

 

 

 

 

이렇게 전처리문을 쓸 수 있습니다. 

#if RELEASE
print("RELEASE에서만 할 코드")
#elseif DEBUG
print("DEBUG에서만 할 코드")
#endif

 

그리고 Other Swift Flags를 설정해줄 수도 있어요

여기는 -D 라는 prefix를 붙여서 넣어줘야해요

 

 

 

  #if FLAG1
  print("앱 타켓에서만 할 코드")
  #endif

 

 

 

Reference

sarghis.com/blog/802/

전처리문의 종류(#include, #define, #ifdef, ... )

전처리문이란? 실질적인 컴파일 이전에 미리 처리되는 문장을 가리킨다. 선행처리기라고도 한다. 따라서 컴파일러는 사용자가 작성한 코드를 컴파일하기 전에 전처리문에서 정의해 놓은 작업��

sarghis.com

 

728x90
반응형
댓글
댓글쓰기 폼