预处理器设置混乱

Posted

技术标签:

【中文标题】预处理器设置混乱【英文标题】:Preprocessor settings confusion 【发布时间】:2012-08-06 15:37:16 【问题描述】:

我正在尝试在 DEV 模式下或在 RELEASE 模式下使用预处理器设置进行简单测试。我的设置如下:

我还有一个 constant.h 文件,我将它包含在 App-prefix.pch 文件中。

文件内容如下:

#ifndef myapp_Constants_h
#define myapp_Constants_h




    #pragma mark - Instances
    #ifdef DEBUG
    #define WEB_SERVICE_BASE_URL @"http://local.someurl.com/"
    #define LOGIN_PATH @"app_dev.php/user/login/"
    #define REGISTER_PATH @"app_dev.php/user/register/"
    #endif


    #ifdef RELEASE
    #define WEB_SERVICE_BASE_URL @"http://www.someurl.com/"
    #define LOGIN_PATH @"user/login/"
    #define REGISTER_PATH @"user/register/"
    #endif

#endif

当我在连接到 mac 的 iphone 上运行应用程序时,我似乎总是获得 DEBUG 模式设置,即使我应该获得 RELEASE 设置。

为什么??

【问题讨论】:

【参考方案1】:

Xcode 的默认配置是在 Debug 中运行,即使在设备上也是如此。如果您想在发布版中运行您的应用,您可以:

使用“配置文件”(Command-I)或“存档”(然后安装生成的应用程序)。 通过选择“产品 -> 编辑方案”来修改您的方案。 (或使用 Command-Option-R。)单击“运行”方案,并将“构建配置”更改为“发布”。 (它在“信息”面板中。)

如果您想频繁地来回切换,您可以制作另一个方案(在“管理方案”中)并修改它以使用发布构建配置。然后,您可以使用 Xcode 左上角的方案选择器轻松地在它们之间切换。

【讨论】:

【参考方案2】:

在我看来,DEBUG 总是在您附加到 Xcode 运行时定义。

一个解决方案是

#ifdef RELEASE
    // release constants

#else
    // debug constants

#endif

这样,您的 RELEASE 定义将覆盖 DEBUG。

编辑:在没有设置 DEBUG 和 RELEASE 的任何情况下,您仍然有一个可行的环境。它可能会发生。

【讨论】:

我按照您的建议进行了更改,但结果仍然相同。 如果您一直按 cmd-R 从 Xcode 运行您的项目,您将始终在 DEBUG 模式下运行。 IIRC 在使用分发证书签名之前,您不能在最终发布模式下运行。尽管如此,您可以做的是在DEBUG 模式下定义RELEASE 指令,或者创建一个定义RELEASE 指令的新运行方案。 DEBUG 在附加到 Xcode 运行时并不总是定义,如果您在代码签名设置中指定了发行证书,则只需要分发证书即可运行。

以上是关于预处理器设置混乱的主要内容,如果未能解决你的问题,请参考以下文章

Xcode在哪里保存预处理器宏设置

Visual Studio 2017 - 是不是可以同时为调试和发布配置设置预处理器定义?

Visual Studio 预处理器仅在设置 /P 时才有效

使用预处理器生成默认值

如何从 ViewModel 对象填充选择器,设置为第一个元素的初始状态并处理选择选择器项的操作

现在是不是有国际C语言混乱代码大赛。