[iOS] Custom Debug Library 만들기

앱 개발 과정에서 Log는 디버깅에서 많이 사용된다. 그러나 개발과정에서 남긴 수많은 Log 명령어들을 배포 버전에서 삭제하는 일은 여간 피곤한 일이 아닐 수 없다.

Xcode 의 Compiler 옵션 설정과 #ifdef 구문을 이용한 자신만의 디버그용 라이브러리를 만들어 사용하면, 어플리케이션을 배포할 때 개발에서만 필요했던 코드를 지우는 작업을 피할 수 있다.

간단히 Log 를 위한 디버그 라이브러리 만드는 방법을 알아보자.

디버그 라이브러리 생성

먼저 디버깅을 위한 파일을 생성한다. 본인은 KS_Debug.h 파일을 생성하였다. 코드는 다음과 같다.

// KS_Debug.h 파일
#import <Foundation/Foundation.h>

// log
#ifdef APP_STORE_VERSION

// 로깅만을 위한 변수를 선언하는 경우는 거의 없다라는 판단
#define KS_LOG_NO_TIME(format, ...)
#define KS_LOG(format, ...)

#else

// CFShow 는 날짜,시간 정보 콘솔 출력 안함. __bridge 타입캐스팅은 ARC 적용 (iOS 5)에 따른 규정 따름
#define KS_LOG_NO_TIME(format, ...) CFShow((__bridge CFTypeRef)[NSString stringWithFormat: format, ## __VA_ARGS__]);
#define KS_LOG(format, ...) NSLog([NSString stringWithFormat : format, ## __VA_ARGS__]);

#endif
//

APP_STORE_VERSION  정의 여부에 따라 KS_LOG_NO_TIME 구문과 KS_LOG 구문 실행 형태가 결정된다.

APP_STORE_VERSION 이 정의되어 있지 않은 케이스에는 KS_LOG_NO_TIME 과 KS_LOG 정의문에 별도의 실행문이 정의되어 있지 않다. 이는 로깅만을 위한 변수를 따로 생성하는 경우가 드물다는 판단에서다.

만약 개발과정에서 로깅만을 위한 임시 변수를 생성하였다면 APP_STORE_VERSION 을 컴파일러 옵션에 지정하고 실행시킨 경우, 로깅용 임시 변수에는 Warning -“Unused Variable” – 이 뜬다.

KS_LOG_NO_TIME 은 시간 정보 없이 텍스트만 로그로 남기는 용도로 사용한다. (NSLog 는 기본적으로 시간 정보가 나타남)

Compiler 옵션 설정 

APP_STORE_VERSION 설정은 컴파일러 옵션에서 가능하다.

아래 그림처럼 Xcode에서 Targets -> Build Settings 의 Preprocessor Macros Not Used in Precompiled Header 옵션을 설정한다. 이 옵션에  APP_STORE_VERSION  설정 여부에 따라 로그 동작이 제어된다.

아래와 같이 테스트 코드를 작성하고 컴파일러 옵션 설정 여부를 변경해가며 실행시켜보면, 컴파일러 옵션 설정에 의해 로그 실행 여부가 결정됨을 확인할 수 있다.

//
KS_LOG_NO_TIME(@"Test with No Time Info");
KS_LOG_NO_TIME(@"Para1 : %@ , Para2 : %d, Para 3 : %f", @"string", 3, 3.333);

KS_LOG(@"Test With Time Info");
KS_LOG(@"Para1 : %@ , Para2 : %d, Para 3 : %f", temp, 3, 3.333);
//

로그 이외에도 Assert 구문 등 디버깅에 필요한 기능들을 디버그 라이브러리에 추가한다면, 유용한 자신만의 디버그 라이브러리를 만들 수 있을 것이다.

* Reference : iPhone Advanced Projects 

Advertisements
Leave a comment

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: