본문 바로가기
💻 Programming 개발/🍎 iOS 개발, Swift

[Swift] 컴파일러 제어문과 전처리기, 커스텀 플래그 (#if DEBUG, #if os...)

by 킴디 kimdee 2024. 11. 21.
반응형

 

 

시작하며

Swift 에서 DEBUG, RELEASE와 같은 플래그를 전처리기를 이용하여 사용하다가 커스텀하게 플래그를 추가하고 싶어 알아보니 Other Swift Flags와 Active Compilation Conditions 가 나오는데, 이에 대해 알아볼 겸 정리하게 되었습니다.

 


전처리기 Preprocessor 

컴파일 전에 처리되는 작업을 전처리라고 합니다.

 

 

컴파일러 제어문 Compiler Control Statements 

그러나 Swift에서는 컴파일러 제어문을 사용하여 컴파일러 동작을 변경할 수 있습니다. Swift에는 조건부 컴파일 블록, 라인 제어 문, 컴파일 타임 진단 문 등 세 가지 컴파일러 제어문이 있습니다.

 

# if : 조건부 컴파일 블록 Conditional Compilation  Block

그러나 Swift 에서는 전처리라기보다는 정확히는 조건부 컴파일블록이라고 명시됩니다. 

 

컴파일 조건에 따라서 컴파일이 되는 것으로, 컴파일 조건은 하나일 수도 있고 여러 개일 수도 있습니다. 

 

이렇게 하나 하나씩 조건을 걸 수도 있고 

#if compiler(>=5)
print("Swift 5 컴파일러 이상으로 컴파일 되었습니다.")
#endif

#if canImport(ModuleA)
print("ModuleA가 import가 가능합니다.")
#endif

#if os(macOS) && swift(>5)
print("OS가 macOS이고 Swift 버전이 5 이상일 경우 실행됩니다")
#endif

 

 

여러개의 조건을 검사하여 분기를 만들 수 있습니다. 

#if <#compilation condition 1#>
    // 조건 1이 참일 경우 실행되는 문장
#elseif <#compilation condition 2#>
    // 조건 2가 참일 경우 실행되는 문장
#else
    // 조건 1,2가 모두 거짓일 경우 실행되는 문장
#endif

 

 

 

Active Compilation Conditions 

조건부 컴파일 표현식을 수행하기 위한 컴파일 조건 목록입니다. 

 

Setting에서 이름은 SWIFT_ACTIVE_COMPILATION_CONDITIONS 로 되어있습니다. 

 

 

1) Build Settings 에서 Custom Flags 또는 Active compilation을 검색하여  Other Swift Flags에서 커스텀 플래그를 지정할 수 있습니다. 

 

2) 클릭한 다음 +를 눌러서 플래그를 추가할 수 있습니다. 

 

3) 이제 코드 상에서 아래와 같이 #If 구문을 사용할 수 있습니다. 

#if DEBUG 
print("DEBUG")
#elseif KIMDEE
print("킴디입니다.")
#endif

 

Other Swift Flags

Swift 컴파일러에 전달되는 추가적인 플래그 목록입니다. 

 

Setting에서 이름은 OTHER_SWIFT_FLAGS 로 되어있습니다. 

 

추가적인 플래그 목록을 반드시 사용할 필요는 없지만 커스텀 플래그를 더 잘 구성하는 데 도움이 됩니다. ACTIVE COMPILATION CONDITIONS와 기능적으로 동일합니다.

 

1) Build Settings 에서 Custom Flags를 검색하여  Other Swift Flags에서 커스텀 플래그를 지정할 수 있습니다. 

 

2) 단, Active Compilation Conditions와 다르게  플래그를 쓸 때 -D를 앞에 붙여주어야합니다. 

 

+ 그 외에 현재 값을 덮어쓰기보다 설정을 확장하고 싶은 경우에, 예를 들어  기존 플래그를 대체하지 않고 컴파일러에 플래그를 추가하고 싶은 경우, $(inherited) 키워드를 설정 값 앞에 붙여줍니다. 

OTHER_SWIFT_FLAGS = $(inherited) -v

 

마무리

처음 iOS 개발했을 때, 단순 os만 전처리문을 사용했고, DEBUG모드에 대해서는 그걸 몰라서 일일히 주석처리하는 식으로  했는데요. 

그렇게 주석을 넣었다 뺐다 하다보면 실수도 왕왕, 어느 순간 되게 헷갈리곤 했는데, 당시 알게 된 플래그를 이제야 정리해봅니다. 

 

이제 Swift에 Macro가 소개 된 것이 작년 WWDC였는데요. 다음에는 Macro를 좀 더 잘 활용하고 작성하는 방법을 써보겠습니다. 

 

 


마치며 

 

오늘도 읽어주셔서 감사합니다.

 

궁금한 점이 있다면 댓글로, 도움이 되셨다면 공감 부탁드립니다.

혹시 수정하거나 피드백하실  내용 있다면 언제든 댓글로 부탁드립니다.

 

감사합니다.

 

 

🔗 참고링크

 

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/statements/#Compiler-Control-Statements  

 

Documentation

 

docs.swift.org

 

반응형

댓글