7

我有一个发出 RESTful 请求的 ios 应用程序。我想根据我是否将 Web 服务 RESTful 请求发送到 a 来自动更改我的服务调用端点。开发服务器 b. 登台服务器 C. 生产服务器

例如,

a. dev url: http://www.dev.camerakingphotos/getAllPhotos
b. test url: http://www.test.camerakingphotos/getAllPhotos
c. production url: http://www.camerkingphotos/getAllPhotos
  1. 我如何告诉 XCode 毫不费力地将 URL 切换到我的生产服务器和开发服务器?它是构建设置、预处理器宏、方案还是新目标(我认为新目标不是我想要的)。理想情况下,XCode 会知道我现在正在测试我的应用程序的开发版本,因此我希望所有 URL 都指向开发服务器。我想告诉 XCode 我现在已经准备好测试我的应用程序以指向生产环境,因此请使用与生产服务器对应的 URL。

  2. 如果我定义一个预处理器宏,我会在哪里做呢?我有一个 APP_CONSTANTS.h 文件,它是存储我所有服务 URL 的唯一位置。我是在 APP_CONSTANTS.h 文件还是 Prefix.pch 文件中定义预处理器宏?

  3. 有人愿意为我拼出一个详细的例子吗?

我已经环顾了stackoverflow,但我希望有人将所有部分放在一起,明确地对我来说,这并不假设太多的先验知识。我仔细阅读了 XCode 构建指南(大部分内容),但我只看到了树木而不是森林。

谢谢!

4

1 回答 1

9

Xcode(几乎)与此无关,如果您希望编译器知道,那么您需要告诉它。编译器只知道你告诉它什么。我也有这个设置。我使用预处理器宏在它们之间切换。默认情况下,Xcode 定义了一个DEBUG预处理器标志,该标志在您开发应用程序时设置。它没有在发布方案中定义。这是在两台服务器之间切换的最简单方法:

.h 文件

extern NSString *const MYServerURL;

.m 文件

#ifdef DEBUG
NSString *const MYServerURL = @"http://www.dev.camerakingphotos/getAllPhotos";
#else
NSString *const MYServerURL = @"http://www.camerakingphotos/getAllPhotos";
#endif

请注意,我没有#define这些。这样做的好处是,当您更改 .m 文件时,只需要重新编译它(与前者相反,前者需要重新编译包含头文件的每个文件)。这些变量将对包含定义变量的标头的任何文件全局可用。如果您需要更细粒度的控制,您可以在 .pch 文件中定义自己的预处理器项目,并根据需要(通过注释)打开和关闭它们。然后只需使用上述模式而不是DEBUG使用您的项目(但是,不要忘记在发布之前将它们切换为适当的值)。

于 2013-07-19T03:56:21.967 回答