我正在用 Objective C 编写一个与 web 服务通信的 Cocoa 应用程序,我希望它在调试模式下连接到沙箱,在发布模式下连接到真正的 web 服务。我需要的只是更改保存配置的对象被实例化的代码行(使用不同的初始化消息和不同的参数)。
那么如何将一行代码换成 Release 或 Debug 模式呢?
我正在用 Objective C 编写一个与 web 服务通信的 Cocoa 应用程序,我希望它在调试模式下连接到沙箱,在发布模式下连接到真正的 web 服务。我需要的只是更改保存配置的对象被实例化的代码行(使用不同的初始化消息和不同的参数)。
那么如何将一行代码换成 Release 或 Debug 模式呢?
您可以使用特定于配置的定义来更改执行的代码。首先阅读如何在 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]];
您可以检查#ifdef DEBUG
,但我建议您不要这样做。
Debug 和 Release 版本之间有很多差异。不同的编译器优化,不同的符号集等等......
您总是会发现自己处于这样一种情况,即您希望针对您的沙箱运行发布构建以进行调试......以及针对生产 Web 服务的调试构建,因为某些客户遇到了仅在发布模式下重现的问题。
因此,为此,我建议使用用户默认值。见NSUserDefaults
。
请注意,可以从命令行设置简单的用户默认值。
因此,您可以执行以下操作:
/path/to/Myapp.app/Contents/Macos/Myapp -ServerMode Debug
首先,根据问题367368定义一个仅在 Debug 构建配置中设置的预处理器符号- 称之为 DEBUG。然后你可以做
#ifdef DEBUG
// Code that only compiles in debug configuration
#else
// Code that compiles in other configurations (i.e. release)
#endif