Xcode 讓 NSLog() 訊息在 Release 版本不要顯示

NSLog

如何讓 NSLog() 的輸出訊息在發佈 Release 版本時停止輸出?

控制 NSLog() 的輸出

NSLog() 是一個簡單快速又好用的除錯工具,它可以將訊息顯示在 Console 中,所以我們可以利用它來顯示變數的值方便我們檢視驗證。在 Debug 模式時,這是很好的做法,但當最終要釋出 Release 版本時,就必須把它註解掉,避免浪費裝置的資源。

為了簡化這些步驟,做到 Debug 時使用 NSLog() ,Release 時註解掉的需求,我在網路上找到一個很簡單的做法。
首先找到專案中的 [APP_NAME]-Prefix.pch 檔,加入以下程式碼:
#ifdef DEBUG
#define DLog(...) NSLog(__VA_ARGS__)
#else
#define DLog(...) /* */
#endif
#define ALog(...) NSLog(__VA_ARGS__)
這是要求編譯器在編譯時要做的事。假如是 Debug 模式時,我們可以使用自己定義的 DLog() 來除錯,它的功能等同於原本的 NSLog() ;當使用 Release 模式時,DLog() 則會被當成註解 (/**/) 。這樣我們就可以安心的使用 DLog() 而不用麻煩的每次用完 NSLog() 都要把它註解掉。

那 ALog() 是做什麼的呢?它是用來在不管是 Debug 還是 Release 模式中,都會顯示訊息,所以當你有特殊需求時,也不用擔心在 Release 模式無法輸出訊息了。

Debug 及 Release 模式的切換

我目前使用的 XCode 是 4.5.2 版,選擇 Product -> Edit Scheme,如下圖: 接著你就能選擇 Build 的設定,如下圖:

另外補充說明,在 [APP_NAME]-Prefix.pch 檔加入的第一行 #ifdef DEBUG 這個常數是哪裡來的呢?請看下圖: 你可以在 XCode 專案的 Build Settings 頁籤中,找到 Apple LLVM compiler 4.1 - Preprocessing 這一項,這是用來設定編譯器的前置處理器,當中的 Debug 參數的值為 DEBUG=1,所以在 #ifdef 判斷中會被認定為 YES (or true),在 Release 項目中則不要設定,或設定為 DEBUG=0,這樣就會在 Release 中忽略任何 NSLog 的輸出。
本文網址:http://blog.tonycube.com/2012/11/ios-nslog-release.html
Tony Blog 撰寫,轉載時請註明出處及文章連結,謝謝 😀

我要留言

留言小提醒:
1.回覆時間通常在晚上,如果太忙可能要等幾天。
2.請先瀏覽一下其他人的留言,也許有人問過同樣的問題。
3.程式碼請先將它編碼後再貼上。(線上編碼:http://bit.ly/1DL6yog)
4.文字請加上標點符號及斷行,難以閱讀者恕難回覆。
5.感謝您的留言,您的問題也可能幫助到其他有相同問題的人。