2012-04-09 49 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的行为吗?我认为这是整点...

相关问题