【问题标题】:IOS/Xcode: Suppress NSLog Statements for Release in 2018IOS/Xcode:抑制 NSLog 语句以在 2018 年发布
【发布时间】:2018-04-29 11:16:00
【问题描述】:

由于 NSLog 语句会减慢应用程序的速度,因此在发布之前删除它们似乎是可取的。回到 2010 年的一些 older answers on SO 建议将一些代码放在 pch 文件中,例如:

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

但是,Xcode 不再自动创建 pch 文件。我收集可以手动创建一个 pch 文件,但这似乎有点杂乱无章。手动创建 pch 文件并将上述代码添加到其中仍然是在发布之前注释掉 NSLog 语句的推荐方法,还是有更现代的方法?

【问题讨论】:

    标签: ios xcode nslog


    【解决方案1】:

    我找到的所有旧答案(包括添加 PCH 文件)都不适用于 Swift。这是最终对我有用的方法:

    1. 通过在构建设置中将 "-D DEBUG" 添加到 "Other Swift Flags" 来定义 DEBUG 标志。
    2. 添加以下全局代码(我只是将它放在名为 Globals.swift 的文件中):
    #if !DEBUG
    public func NSLog(_ format: String, _ args: CVarArg...) {
    }    
    
    public func print(_ items: Any..., separator: String = " ", terminator: String = "\n") {
    }
    #endif
    

    【讨论】:

    • 是否需要在“Other Swift Flags”中定义DEBUG标志?我已经测试了#if DEBUG,只要构建配置在编辑方案中设置为发布,#if DEBUG 内的代码将不会打印到控制台。
    【解决方案2】:

    仍然可以创建预编译的头文件,但是不鼓励这样做,至少在默认情况下是这样。为此,请编辑目标的构建设置,并定义前缀标头的路径。

    使用日志库

    也许您可以使用一个日志库,如CocoaLumberJackhere,这是一个非常简单的库,但仍然运行良好。

    【讨论】:

    • 如果代码中已经有很多 NSLog 语句,你会推荐走 pch 路线吗?人是这样的吗?我想仍然有许多使用 NSLog 语句的开发人员需要在发布时删除它们....
    • 取决于 reqs 和项目的用途,但通常建议使用日志库而不是 NSLog - 可以执行诸如在“信息”级别记录以进行发布和跟踪以进行调试的操作。您可以进行搜索/替换以引入库。 pch文件相关讨论:stackoverflow.com/a/24194968/404201
    • 对于简单的记录器,我是否必须将库导入到我有日志语句的每个文件中,即导入“OCLogTemplate.h”?我是否只需重写我所有的 NSLog ("name:%@ and id%d for item",_item.name,_item.id);statements as LogDebug("name:%@ and id%d for item",_item.名称,_item.id);?
    • 在自述文件中,您说最好在构建设置中翻转开关。你能提供一个在哪里做的例子吗?
    猜你喜欢
    • 2011-02-07
    • 2019-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多