Release&中的不同代码/配置调试版本(Obj-C)

时间:2009-09-10 16:01:18

标签: objective-c cocoa debugging release

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

那么我如何为Release或Debug模式交换一行代码呢?

3 个答案:

答案 0 :(得分:8)

您可以使用特定于配置的定义来更改已执行的代码。首先阅读有关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]];

答案 1 :(得分:7)

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

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

你总是会发现自己处于这样一种情况:你希望针对你的沙箱运行Release版本以进行调试....以及针对生产webservice的调试构建,因为某些客户的问题只能在发布模式。

所以,为此,我建议用户默认。请参阅NSUserDefaults

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

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

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

答案 2 :(得分:2)

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

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