2012-04-09 79 views
4

有人可以過去如何免除NSLog從應用程序的發佈版本?另外,發佈版本中留下的評論是否重要?謝謝!不包括NSLog的發佈版本的iPhone應用程序

+1

可能的重複http://stackoverflow.com/questions/9063100/xcode-ios-how-to-determine-whether-code-is-running-in-debug- release-build – 2012-04-09 02:18:00

+1

大多數人都創建了自己的DebugLog宏或者其他一些調試標誌。當你在它的時候,你可以自動插入'__PRETTY_FUNCTION__'的'%s'來列出日誌來自哪裏。 – 2012-04-09 02:20:39

+0

這篇文章被標記爲iPhone。爲什麼你關心你的代碼是否寫入控制檯?沒有人會看到它。 – anthropomorphic 2012-04-09 02:26:36

回答

6

Use a macro like DLog to wrap NSLog, and turn it off in Release builds.

#ifdef DEBUG 
# define DLog(...) NSLog(__VA_ARGS__) 
#else 
# define DLog(...) /* */ 
#endif 

評論完全沒有關係。他們只在你的源代碼中,而不是編譯的輸出。您不要將您的源代碼提交給Apple,只提交您的應用程序的內置副本。

+0

我看到的唯一問題是你不能將它追溯地應用到已經有很多NSLog的應用程序。 – EmilioPelaez 2012-04-09 03:08:59

+2

是的,但搜索和替換工作正常。或者,如果你按照鏈接,它顯示如何在終端中運行'sed'命令來做同樣的事情。 – 2012-04-09 03:15:36

1

Xcode的項目的新版本通常包括宏定義DEBUG建設一個調試版本的時候,所以最簡單的方法是去:

#ifdef DEBUG 
NSLog(@"Safe and sound ..."); 
#endif 

這其實並不重要,但是,在我的經驗有時你不希望控制檯嘔吐一堆日誌,你可能只在某些場合需要它們。

+1

這是有效的,但是爲每個NSLog添加一個#ifdef /#endif會很麻煩... – EmilioPelaez 2012-04-09 03:08:17

2

我要做排除NSLogs是把它添加到前綴文件:

#define NSLog(...) 

這樣的話,在編譯時,所有NSLogs將用什麼取代,它會像一個空行。

至於評論,他們從來沒有把它變成二進制文件,只有誰可以看到源代碼。

+0

在'#ifdef DEBUG'中,對嗎? – JoePasq 2012-04-09 03:24:46

+0

不錯!我希望在替換掉所有的nslogs之前,我想到了這一點。 – danh 2012-04-09 03:48:01

+0

但是有時你想要在發佈的代碼中出現一些NSLog。最好爲調試日誌功能定義一個新的宏。 – 2012-04-09 03:49:03

0

這不是NSRE的行爲嗎?我認爲這是整點...

相關問題