일모도원(日暮途遠) 개발자

[XCode] 소스코드에서 디버그 모드와 릴리즈 모드 구분하기 본문

개발통합환경(IDE)/XCode

[XCode] 소스코드에서 디버그 모드와 릴리즈 모드 구분하기

달님개발자 2022. 12. 16. 15:08

디버드모드와 디버그 모드가 아닌것(보통은 릴리즈모드)를 구분하는것은 Build Settings의 Preprocessor Macros를 보면 알수 있다.

(가끔 GCC_PREPROCESSOR_DEFINITIONS라는 말도 쓰는데 이는 Preprocessor Macros는 같은걸 말한다.)

 

Macro를 정의하는값은 최종적으로 Resolved에 있는것이 사용된다.

 

Macro는 여러곳에서 정의할수 있는데, 그 순서는 다음과 같다. Resolved <- Target <- xcconfig <- Project <- iOS Default

예를 들어 DEBUG 매크로는 프로젝트를 맨처음 생성하면 생긴다.

teset1이라는 프로젝트를 생성시 "test1" 프로젝트쪽에 보면 DEBUG=1이라고 정의된걸 볼수 있다.

내가 사용하는 타켓(AraPlayer_English)을 보면 DEBUG=1이라는게 보이는데, 더블클릭해서 보면 

DEBUG=1은 안보이고 $(inherited)라는게 보인다.

$(inherited)는 이름 그대로 상속받은 값을 쓰겠다는 거다.

위에서 설명한대로 Macro는 여러곳에서 정의할수 있는데, 그 순서는 아래그림과 같다.

즉 AraOne이라는 프로젝트에서 이미 DEBUG=1이 있으므로 AraPlayer_English Target에서는 따로 DEBUG라는 매크로를 정의해주지 않아도 부모에 정의되어 있는 DEBUG매크로를 쓰겠다는 얘기다.

 

실제 코드에서는 아래처럼 사용하면 된다.

func foo(){
    #if DEBUG
		//DEBUG시에만 실행되는 코드
    #else
    	
    #endif
}

 

 


참고 :  타겟을 여러 개를 만들지 않고, 단일 타겟으로 여러 환경을 구성하는 것이 가능

https://minsone.github.io/ios/mac/xcode-xcconfig