发布和调试版本中的不同代码/配置(Obj-C)

Chr*_*ian 5 debugging cocoa release objective-c

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

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

pix*_*x0r 8

您可以使用特定于配置的定义来更改已执行的代码.阅读有关如何在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]];
Run Code Online (Sandbox Code Playgroud)


bbu*_*bum 7

你可以检查#ifdef DEBUG,但我建议你不要那样做.

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

总是,您会发现自己处于这样一种情况:您希望针对沙箱运行Release构建以进行调试....以及针对生产Web服务的调试构建,因为某些客户的问题仅在发布模式下重现.

所以,为此,我建议用户默认.见NSUserDefaults.

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

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

/path/to/Myapp.app/Contents/Macos/Myapp -ServerMode Debug
Run Code Online (Sandbox Code Playgroud)