在 iOS 中,将未注释的 NSLogs 发送到应用商店是不是很糟糕?

In iOS, is it bad to ship to the app store with uncommented NSLogs?

我喜欢用它们来调试(你能看出我是菜鸟吗?)并在部署到应用商店时将它们留在我的代码中。您个人认为这有什么负面影响吗?

我查看了这些资源,感觉这不是一个好主意:

这也是一个很好的资源:

就是说,当您运送到商店并在其中保留 NSLogs 时,您记录了什么?

您联系的 Mike Weller post 做出了正确的决定。 NSLog 用于面向用户的警告。

也可能存在性能问题,尤其是在循环中,因为它使用了字符串格式化程序。

您可以而且应该使用 DDLog 或其他工具在您进行发布构建时忽略调试消息。

使用上述设置创建一个片段。在它说“调试语句”的地方,将其替换为:

<#debug statement#>

现在,由于完成快捷方式设置为“NSLog”,每次您开始输入时 NSLog,它会自动完成此代码段,您将选择“调试语句”部分并准备好输入结束了。

您永远不必担心再次注释掉您的 NSLog 语句,并且您永远不必忘记使用 #if DEBUG 因为完成快捷方式是您无论如何都会输入的内容。

Apple's Official Documentation for creating a Snippet(我把这个 link 包括在内是因为我觉得这显然是唯一的方法真的有点难过?)...

还有我的解释...

  1. 将以下代码复制并粘贴到 Xcode:

    #if DEBUG
        NSLog(<#debug statement#>);
    #endif
    
  2. Select 整个代码块你只是 copy-pasted。单击、按住此代码块并将其向下拖动到片段部分(通常位于右下角)。

  3. Select 此代码段可获得如下屏幕:

  4. 单击“编辑”并填写详细信息。给它一个标题和描述。将平台保留为“全部”,将语言保留为“Objective-C”。将完成快捷方式设置为“NSLog”,并将完成范围保留在“函数或方法”上(此选项默认为什么可能取决于您最初将代码粘贴到何处以及从何处拖动代码)。


正如 Aaron Brager 的回答所指出的那样,NSLog 可能是一个性能问题,尤其是在循环中(还有一些看起来不太像循环但实际上很像循环的地方,例如 cellForRowAtIndexPath。 ..).

但更重要的是,您可能会泄露您不一定希望公开的信息。

我并不是说不存在任何可能对在日志语句中呈现给最终用户有用的东西,但就我个人而言,我还没有找到它。 you 有多少次调查应用程序日志语句的输出来诊断您遇到的问题?您联系过应用开发者多少次,他们要求您检查这些声明以帮助诊断您遇到的技术问题?