我应该在发布我的应用程序时删除NSLog

时间:2012-01-21 20:13:40

标签: iphone objective-c ios nslog

建议在发货应用中执行任何NSLog ging吗?我知道我不应该大量使用循环。或者不要过于冗长地记录。但我不确定这样做是否是一个好习惯。

在发布之前删除所有NSLog似乎也不是一个好习惯。

5 个答案:

答案 0 :(得分:12)

我认为垃圾邮件用户的设备日志是一种很好的做法。

为此,我有一个宏DebugLog,它只对调试版本有效:

#ifdef DEBUG
#define DebugLog(fmt, ...) NSLog(fmt, __VA_ARGS__)
#else
#define DebugLog(fmt, ...)
#endif

对于我对开发感兴趣的所有日志消息,我使用DebugLog。对于应记录的所有错误消息,我使用无条件NSLog。这样,分发版本不会使用户的控制台日志混乱。只记录重要消息。

答案 1 :(得分:4)

这是编码哲学问题之一,但在我的生产应用程序中,我使用asl并将其配置为默认关闭,但保留选项(通过Info.plist中的条目)以启用各种级别的日志记录。我倾向于同意你的观点,即运费应用程序中NSLog太多了。

答案 2 :(得分:1)

当有特定的支持团队来支持该实时应用程序时,记录总是很重要,在这种情况下,他们可以检查发生了什么,如果某些事情与代码无关并且是否是核心代码问题,他们可以解决问题然后他们可以转到开发团队。

但如果应用程序类似于Game,则日志无关紧要。您可以在发布应用程序之前删除它们。

答案 3 :(得分:1)

这取决于。如果您没有在应用程序中使用崩溃报告工具,通常最好保留一些记录关键错误的NSLog语句,以便知识渊博的用户可以将它们报告给您并帮助您解决应用程序的问题。发布。在您的发布中进行太多深奥的调试NSLog调用绝对不是一个好主意。

答案 4 :(得分:0)

如果您希望NSLog仅在调试时工作,并且您不想对代码进行任何更改,最好的方法是在.pch文件上执行此操作:

#ifndef DEBUG
#define NSLog(x...)
#endif

解释和疑难解答:

这意味着如果没有定义DEBUG,它将“覆盖”所有NSLogs什么也不做,这个字符串替换在编译之前发生,所以整个代码中的NSLog都不会被转义,没有NSLog会被错误地生成,这个消除了忘记删除生产应用程序上的NSLog的人为错误。

DEBUG通常在所有Xcode项目中默认以调试模式定义。你可以看出它是否定义在:

Build Settings -> 
Apple LLV #.# - Preprocessing -> 
Preprocessor Macros -> Debug

如果没有添加

DEBUG=1

如果你没有pch文件或者没有连接到这里你需要做什么(因为它是自动添加到xcode 5中但不再添加到xcode 6中并且默认情况下在新项目模板上添加)

Why isn't ProjectName-Prefix.pch created automatically in Xcode 6?