1. 程式人生 > >iOS開發:Debug與Release版本NSLog遮蔽方法

iOS開發:Debug與Release版本NSLog遮蔽方法

在開發過程中一般會用到NSLog(<#NSString *format, ...#>)來獲得具體的資訊。

但當我們釋出app時,一步一步的去找NSLog(<#NSString *format, ...#>),並遮蔽掉,這樣比較浪費時間還很累。我們可以採用預編譯的方式來簡化這個問題。 1.在***-Prefix.pch裡面新增
#ifdef DEBUG
#    define DLog(...) NSLog(__VA_ARGS__)
#else
#    define DLog(...) /* */
#endif
#define ALog(...) NSLog(__VA_ARGS__)

2.進入Xcode 4,選擇選單“Product”->“Manage Schemes”,選擇一個專案,點選“Edit”,Bulid Configuration

附: 檢查DEBUG標誌是否正確定義,xcode一般會在debug執行配置項裡面已經定義號了DEBUG標誌,如果沒定義我們就自己寫上,以我的xcode 4 為例,如下圖:

  找到PreProcessor Macros 這個屬性,對於Debug配置我們給他寫上DEBUG,而在Release配置中把它留空。 這樣我們剛才那段預處理命令就可以根據這個標誌來判斷我們編譯的時除錯版本還是釋出版本,從而控制NSLog的輸出。 (因為xcode 4 會把debug/release 兩個配置項同時對比展現出來,而3.x版本的只能分別設定, 如果你用的時xcode 3.x 開發工具, 那麼就分別對Debug/Release 都檢查一下)。

NSLog() is a great tool that helps debugging efforts. Unfortunately it is expensive, especially on the iPhone, and depending on how it’s used or what you’re logging, it could leak sensitive or proprietary information. If you look around the web, you’ll find a few different ways to drop NSLog in your release builds. Here is what I’ve put together based on those.

First add the following to the <AppName>_Prefix.pch file in your Xcode project:

1
2
3
4
5
6
#ifdef DEBUG
#    define DLog(...) NSLog(__VA_ARGS__)
#else
#    define DLog(...) /* */
#endif
#define ALog(...) NSLog(__VA_ARGS__)

Right-click on your target and click Get Info. Select the Build tab. Make sure Configuration is set to Debug. Add -DDEBUG to the Other C Flags of your target.

And that’s about it. When you want to log only in debug builds use DLog(). In release builds DLog() will be compiled as an empty comment. Otherwise use ALog() for logging in both debug and release builds. (A as in always.)

I like this approach for a few reasons:

  1. Some approaches comment out all NSLog() statements when compiled. This approach lets me keep some logging if I want.
  2. Using ALog() and DLog(), I make a conscious choice about which builds I’m going to log in.
  3. There is very little setup.
  4. There is no overhead. Because DLog() is defined as NSLog(), executing DLog() is no different than executing NSLog()

If you’d like to replace NSLog with DLog in your source files, here’s a quick sed command that you can run in Terminal:$ sed -i ".bak" 's/NSLog/DLog/' *.mFYI, this will make a backup of each of the .m files whether it changed them or not.


相關推薦

iOS開發:DebugRelease版本NSLog遮蔽方法

在開發過程中一般會用到NSLog(<#NSString *format, ...#>)來獲得具體的資訊。 但當我們釋出app時,一步一步的去找NSLog(<#NSString *format, ...#>),並遮蔽掉,這樣比較浪費時間還很累。我們可以

iOS開發debugrelease版本NSLog遮蔽方法

簡單介紹以下幾個巨集: 1) __VA_ARGS__ 是一個可變引數的巨集,這個可變引數的巨集是新的C99規範中新增的,目前似乎只有gcc支援(VC6.0的編譯器不支援)。巨集前面加上##的作用在於,當可變引數的個數為0時,這裡的##起到把前面多餘的","去掉,否則會編譯出

iOS開發debugrelease版本log遮蔽方法

簡單介紹以下幾個巨集: 1) __VA_ARGS__ 是一個可變引數的巨集,這個可變引數的巨集是新的C99規範中新增的,目前似乎只有gcc支援(VC6.0的編譯器不支援)。巨集前面加上##的作用在於,當可變引數的個數為0時,這裡的##起到把前面多餘的","去掉,否則會編譯

iOS開發debugrelease版本NSLog屏蔽方法

方式 開發 簡單 比較 日誌信息 debug 新的 ... efi 簡單介紹以下幾個宏: 1) __VA_ARGS__ 是一個可變參數的宏,這個可變參數的宏是新的C99規範中新增的,目前似乎只有gcc支持(VC6.0的編譯器不支持)。宏前面加上##的作用在於,當可變參數的個

解決VS中DebugRelease版本切換的問題

最近在使用PCL以及VTK等開發庫,但是使用過程中總會出現Debug與Release版本之間切換的問題,完全按照網上各種大牛的教程來配置的開發環境,為啥會爆出各種錯誤呢,一開始我也是一頭霧水,明明在Debug或者Release模式下執行的好好地,可是切換模式後奇怪的錯誤

DEBUGRELEASE版本不能交叉呼叫

讓我們先看一段引文,再來進行心靈的探索: If you have an EXE and a DLL.When your exe APP was built Debug Mode, your Dll must be Debug mode.When your exe APP w

【VS開發】MFC執行時庫debugrelease版本之間的配置關係

參考內容:  前段時間從網上下來一個有意思的程式碼,用VS2010開啟時需要將工程轉換為2010的工程,轉化後卻出現了編譯不通過的問題,類似這樣的錯誤:c:\program files\microsoft visual studio 10.0\vc\atlmfc\inc

cordova環境搭建以及將vue的webapp打包成ios和安卓的debugrelease版本app

簡介 cordova可以幫我們將一個webApp打包成安卓apk和ios的App,本文詳細描述了cordova的環境搭建以及打包vue專案的webapp成手機端的App的詳細過程,打包的app分為debug版本的除錯版以及能上線的release版本,其中都會做詳細介紹,文章中會也會描述整個環節遇

解決VS+opencv中Debug版本Release版本的lib切換的問題

參考方案1: 參考來源:http://blog.csdn.net/xiaohuh421/article/details/7476485 #ifdef _DEBUG #pragma comment(lib,"..\\debug\\LedCtrlBoard.lib") #el

iOS開發Debug之上架APPStore的構建版本消失

背景:打包完ipa後上傳到APPStore後顯示構建版本後消失或者在iTunes Connect-我的APP-活動中,看見提交版本正在處理後消失。原因:1、APP中使用了私有的API,導致構建版本程式碼稽核失敗。2、APP中的使用者許可權沒有新增。比如相機和相簿許可權漏了其中

ios 學習之 debugrelease版本的執行

不管在什麼平臺上軟體都有debug和release版本的差別,雖然本質上都是-O -g這些選項的差別,對應與開發著debug和release更多的概念上的差別,debug是面向自己的release是面向客戶的。 我們說一下在xcode上怎麼配置debug和release。

iOS開發之Appstore篇——版本更新

ise block store win nsstring oot apps url root 1.版本更新方法 + (void)updateWithAPPID:(NSString *)appid back:(void (^)(NSString *, NSString

debugrelease版本的區別

模式 exe 信息 容量 都是 release 中斷 編譯 一個 Debug:調試版本,包含調試信息,所以容量比Release大很多,並且不進行任何優化(優化會使調試復雜化,因為源代碼和生成的指令間關系會更復雜),便於程序員調試。 Debug模式下生成兩個文件,除了.e

VS2010 開發VC++ 生成release版本動態庫配置

方案 .com ima AS 分享圖片 In inf 分享 ++ 1、選擇項目→屬性→配置管理器→活動解決方案配置→選擇Release →關閉。 2、常規→輸出目錄(中間目錄)填入輸出路徑。 3、重新生成。 VS2010 開發VC++ 生成release版本動態庫配置

iOS開發技巧之:Xcode8 NSLog列印json不全解決辦法

據說國外的大神是這麼解決的:   #ifdef DEBUG #define SLog(format, ...) printf("class: <%p %s:(%d) > method: %s \n%s\n", self, [[[NSString stringWith

DebugRelease區別詳解

轉:https://blog.csdn.net/ithzhang/article/details/7575483    Debug與Release不同的問題在剛開始編寫程式碼時會經常發生,99%是因為你的程式碼書寫錯誤而導致的,所以不要動不動就說系統問題或編譯器問題,努力找找

Maven的Snapshot版本Release版本

Snapshot版本:不穩定、尚處於開發中的版本 Release版本:穩定的版本 什麼情況下該用SNAPSHOT? 3.1協同開發時,如果A依賴構件B,由於B會更新,B應該使用SNAPSHOT來標識自己。這種做法的必要性可以反證如下: a.如果B不用SNAPSHOT,

Maven的Snapshot版本Release版本(筆記 侵刪)

來源:https://zhidao.baidu.com/question/561174953188808884.html Snapshot版本代表不穩定、尚處於開發中的版本 Release版本則代表穩定的版本 什麼情況下該用SNAPSHOT? 協同開發時,如果A依賴構

玩轉Windows服務系列——DebugRelease版本的註冊和解除安裝,及其原理

Windows服務Debug版本 註冊 Services.exe -regserver 解除安裝 Services.exe -unregserver Windows服務Release版本 註冊 Services.exe -service 解除安裝 Services

關於VS中區分debugrelease,32位64位編譯的巨集定義

在vs程式設計中,常常涉及到32位和64位程式的編譯,怎麼判斷當前編譯是32位編譯還是64位編譯?如何判斷 是debug下編譯還是release下編譯?因為之前用到,這裡記錄一下,省的忘了又要瘋狂的google。 1.判斷是debug編譯還是release編譯。 如