【问题标题】:Different code / config in Release & Debug build (Obj-C)发布和调试构建(Obj-C)中的不同代码/配置
【发布时间】:2010-11-27 05:31:40
【问题描述】:

我正在用 Objective C 编写一个与 Web 服务通信的 Cocoa 应用程序,我希望它在调试模式下连接到沙箱,在发布模式下连接到真正的 Web 服务。我所需要的只是更改保存配置的对象被实例化的代码行(使用不同的初始化消息和不同的参数)。

那么如何将一行代码换成 Release 或 Debug 模式呢?

【问题讨论】:

    标签: objective-c cocoa debugging release


    【解决方案1】:

    首先,根据问题367368 定义一个仅在调试构建配置中设置的预处理器符号 - 称之为调试。然后就可以了

    #ifdef DEBUG
      // Code that only compiles in debug configuration
    #else
      // Code that compiles in other configurations (i.e. release)
    #endif
    

    【讨论】:

      【解决方案2】:

      您可以检查#ifdef DEBUG,但我建议您不要这样做。

      Debug 和 Release 版本之间存在很多差异。不同的编译器优化,不同的符号集等等……

      您总是会发现自己处于这样一种情况,即您希望针对您的沙箱运行发布版本以进行调试......以及针对生产 Web 服务的调试版本,因为某些客户遇到的问题只能在发布模式。

      因此,为此,我建议使用用户默认值。见NSUserDefaults

      请注意,可以从命令行设置简单的用户默认值。

      因此,您可以执行以下操作:

      /path/to/Myapp.app/Contents/Macos/Myapp -ServerMode Debug
      

      【讨论】:

      • 有趣的技巧,我必须记住。
      • 感谢您的提示!你的终端命令对我来说真的不起作用。我发现“defaults write my.bundle.identifier SandboxModeFlag -bool YES”对我来说很好用。
      【解决方案3】:

      您可以使用特定于配置的定义来更改执行的代码。首先阅读如何define a preprocessor symbol in Xcode。然后,在您的代码中,执行以下操作:

      #if DEBUG_MODE
      #define BACKEND_URL @"http://testing.myserver.com"
      #else
      #define BACKEND_URL @"http://live.myserver.com"
      #end
      
      NSURLRequest *myRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:BACKEND_URL]];
      

      【讨论】:

      • 虽然我更喜欢 bbum 的解决方案,但我现在了解它的工作原理并将牢记在心。谢谢。
      猜你喜欢
      • 2012-02-19
      • 2014-03-21
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 2018-02-04
      • 2013-02-09
      • 2013-06-03
      • 2011-03-19
      相关资源
      最近更新 更多