【问题标题】:Using preprocessor macro to decide if app build is for debug or release使用预处理器宏来决定应用程序构建是用于调试还是发布
【发布时间】:2014-04-18 05:49:21
【问题描述】:

我想为调试构建记录一些事件。我在 .pch 文件中添加了以下代码,以便仅在调试中使用 DLog() 进行记录。我在构建设置中添加了IS_DEBUG 宏。

#ifdef IS_DEBUG
    #define DLog(...) NSLog(__VA_ARGS__)
#else
    #define DLog(...)
#endif

为了测试它是否有效,我从构建设置中删除了 IS_DEBUG 并运行了 app.问题是它总是记录无论调试/发布应用程序。

请注意,我尝试更改 DLogmethod 和预处理器宏的名称,以查看这是由于在其他地方定义了相同的宏或方法。但它仍然给出了同样的问题,意味着在其他地方没有使用相同的宏或方法。

【问题讨论】:

    标签: ios objective-c macros xcode5 nslog


    【解决方案1】:

    在 Xcode 中,您可以定义方案。每个方案都可以构建到特定的配置,通常至少是 Debug 和 Release。您可以在 Xcode 的方案管理器中指定要使用的。

    接下来,在您的目标配置中,您可以更改为您希望与其关联的配置定义的宏。在您的情况下,这将是“IS_DEBUG”。您很可能希望为调试配置执行此操作,然后创建一个方案来构建该配置。

    【讨论】:

    • 但是当我删除宏时,它不应该记录值。不管是调试还是发布。
    • 我会首先检查以确保没有任何对 NSLog 的直接调用。如果不是,则意味着必须将 IS_DEBUG 设置在其他位置。
    • @Brayn 我使用了 DLog()。如问题所述,我尝试过重命名宏和方法名称。因此,如果 IS_DEBUG 在其他地方定义,重命名宏应该可以工作。但事实并非如此。
    • 这很奇怪。过去我遇到过奇怪的 Xcode 错误,这可能就是其中之一。您是否尝试过清除构建输出?也许这会有所帮助。另外,清除 Xcode 缓存。在终端中使用此命令:
    • sudo rm -rf ~/Library/Developer/Xcode/DerivedData/*
    【解决方案2】:

    Bryan 的回答帮助我解决了这个问题。只有清理项目和 Xcode 缓存对我不起作用。我重置了模拟器并清理了项目。它成功了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-23
      • 1970-01-01
      • 2010-10-16
      • 2010-11-21
      • 1970-01-01
      • 2015-10-12
      • 1970-01-01
      • 2021-12-29
      相关资源
      最近更新 更多