소프트웨어개발/iOS, macOS 와 Xcode

XCode 환경에서 디버그 메시지 출력

날개 2013. 12. 17. 12:38

XCode로 개발할 때 Output 창으로 디버그 메시지를 출력하기 위해 NSLog를 많이 사용합니다.


하지만, NSLog는 Debug로 빌드 할 때 뿐만 아니라 Release로 빌드 하더라도, 로그 메시지를 출력한다는 단점이 있습니다. 그렇기 때문에 아무래도 불필요한 앱의 성능 저하를 가져오게 됩니다.


간단한 방법을 통해, Debug로 빌드 할 때에만 로그 메시지를 출력하도록 할 수 있습니다. 즉 Release로 빌드 한 후에는 디버그용 메시지를 볼 필요가 없기 때문에, Debug로 빌드 할 때에만 NSLog를 찍어주도록 하는 것이죠.

(물론 Debug / Release 빌드 모두 봐야 할 상황도 있습니다.)



그럼 시작해 봅니다.


먼저 XCode를 실행하고, 적용할 프로젝트를 로딩 합니다.


왼쪽 프로젝트 네이게이터를 잘 살펴보면, 확장자가 .pch 인 프리컴파일 헤더 파일을 찾을 수 있습니다.

이 파일을 선택해서 열어 줍니다.


(프리컴파일 헤더 파일은 XCode버전과 사용한 템플릿에 따라 프로젝트를 만들때 다른 위치에 있을 수 있지만, 보통 비슷한 위치에 비슷한 이름으로 존재 합니다. 예를 들어, XCode 5.0.1로 프로젝트를 생성 했을 경우 보통 XCode 왼쪽 Project Navigator에서 [프로젝트명] 밑의 'Supporting Files' 밑에 '<프로젝트명>-Prefix.pch'와 같은 이름의 파일로 만들어 집니다.)


아래의 코드를 프리컴파일 헤더('Prefix.pch' 또는 '<프로젝트명>-Prefix.pch')파일에 추가 합니다.


#ifdef DEBUG

    #define DebugMsg(...) NSLog(__VA_ARGS__)

#else

    #define DebugMsg(...) /* No Debug Message */

#endif


간단하죠? 이 코드를 입력해 두면, Debug로 빌드할때 DebugMsg가 NSLog로 대치될 것이고, Debug빌드가 아니면 주석 처리된 코드로 대치 되어 아무것도 하지 않게 됩니다.


이제 실제 코드에서 Release 빌드에서는 메시지를 출력하지 않고 Debug 빌드에서만 메시지를 출력하고 싶을 때 NSLog 대신에 DebugMsg를 사용하면 됩니다.


예를 들어, 아래와 같이 사용합니다.


DebugMsg (@"This is my debug-message.");    // 'This is my debug-message.'를 Debug 빌드 했을 때만 보여줍니다.


NSLog (@"This is my debug-message."); // 'This is my debug-message.'를 Debug 빌드이든 Release 빌드이든 상관 없이 보여줍니다.



위와 같이, Release 빌드 후에도 출력을 해야 한다면, 그대로 NSLog를 사용하면 되고, Debug 빌드에서만 출력할 때는 DebugMsg를 사용하면 되겠습니다.




끝.