[Xcode] Swift 프로젝트의 디버그(DEBUG) 플래그
Objective-C 프로젝트에서는 자동으로 정의되는 매크로(Preprocessor Macro)가 있어서 앱이 디버그 빌드인지 파악이 가능하다. 하지만 Swift 프로젝트에서는 자동으로 생성되지 않기 때문에 수동으로 처리해야 한다. 이번 글은 이 디버그 플래그를 생성하고 사용하는 방법에 관한 것이다.
플래그 추가
Xcode 상에서 프로젝트 타겟 설정을 연다. 그리고 Other Swift Flags 항목을 찾아보자.
Other Swift Flags 항목에서 Debug 부분에 -D 를 붙이고 그 다음에 원하는 이름을 써 넣자. 위 스크린샷은 이미 Debug 일 때만 -D DEBUG를 하도록 해 둔 상태이다.
즉, 이런 식으로 원하는 플래그를 원하는 빌드 타겟 일 때만 존재하도록(?) 만들면 된다. 물론 이름이야 원하는 대로 지으면 된다.
물론 주의할 사항은 Debug인지 Release인지 잘 구분해야 한다는 점 정도이다.
Swift 코드
Swift 코드에서는 #ifdef 가 아닌 #if 문을 이용해 이 플래그가 정의되어 있는지 파악 할 수 있다.
C에 익숙한 사용자라면 릴리즈 빌드 때 컴파일 오류나는거 아니냐고 할 지도 모르겠는데, 다행히도 아무 문제 없이 빌드가 의도대로 된다. 걱정하지 말자.
이게 왜 필요한거지?
직업(?)으로써 어느 정도 개발에 참여해 봤다면 디버그 모드와 릴리즈 모드가 따로 있다는 것에 의심을 가질 사람은 없을 것이다.
하지만 왜 그런지 모른다면 상상해보자.
플래그 추가
Xcode 상에서 프로젝트 타겟 설정을 연다. 그리고 Other Swift Flags 항목을 찾아보자.
Other Swift Flags 항목에서 Debug 부분에 -D 를 붙이고 그 다음에 원하는 이름을 써 넣자. 위 스크린샷은 이미 Debug 일 때만 -D DEBUG를 하도록 해 둔 상태이다.
즉, 이런 식으로 원하는 플래그를 원하는 빌드 타겟 일 때만 존재하도록(?) 만들면 된다. 물론 이름이야 원하는 대로 지으면 된다.
물론 주의할 사항은 Debug인지 Release인지 잘 구분해야 한다는 점 정도이다.
Swift 코드
Swift 코드에서는 #ifdef 가 아닌 #if 문을 이용해 이 플래그가 정의되어 있는지 파악 할 수 있다.
#if DEBUG
println("Debug Mode")
#else
println("Release Mode")
#endif
코드 내용이 설마 이해가 안된다면... 음.. -_-;;C에 익숙한 사용자라면 릴리즈 빌드 때 컴파일 오류나는거 아니냐고 할 지도 모르겠는데, 다행히도 아무 문제 없이 빌드가 의도대로 된다. 걱정하지 말자.
이게 왜 필요한거지?
직업(?)으로써 어느 정도 개발에 참여해 봤다면 디버그 모드와 릴리즈 모드가 따로 있다는 것에 의심을 가질 사람은 없을 것이다.
하지만 왜 그런지 모른다면 상상해보자.
- 앱을 개발하던 도중 버그가 있는데 Xcode 디버거로 찾는 것 보다 로그로 찾는게 더 빨라서 이런저런 로그를 추가해 놨다. 이 로그를 남기는 코드는 디버깅 하는데 도움을 주었고 앱이 정상 동작하는지 판단하는데도 중요한 역활을 하였다.
- 그런데 이 앱을 배포해야 하는데 이 로그들이 뿌려지는걸 원치 않는다. 그래서 로그를 찍는 코드를 몽땅 찾아서 다 지웠다. 그리고 컴파일해서 배포했다.
- 그런데 또 비슷한 버그가 발견되었다. 다시 로그 코드를 넣고 있는데 짜증난다.
이 쯤 되면 DEBUG 플래그를 디버깅 시에만 넣어서 로그를 DEBUG 플래그가 정의 되어 있을 때만 찍도록 만들면 얼마나 편할까 하는 감상이 나와야 한다. -_-;
보통 Debug와 Release 빌드 설정이 별도로 존재하는건 이 처럼 로그 등의 특수 디버깅 코드를 넣어서 테스트 하기 좋게 만든다는게 가장 큰 목적이지만, 이 외에 빌드 최적화(Compiler Optimization) 등의 설정을 다르게 할 수 있다는 점도 있다. 예를 들어 디버그 빌드에는 최적화를 꺼버리는 등이다.
하도 글이 짧아서 상식선의 이야기로 마무리. :-)
댓글