Xcode Objective C宏和构建设置,切换开发和分段和生产 - 一个完整的例子?

时间:2013-07-19 01:47:19

标签: ios build

我有一个生成RESTful请求的ios应用程序。我想根据我是否发送Web服务RESTful请求自动更改我的服务调用端点 一个。开发服务器 湾登台服务器 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. 有人愿意为我拼出一个详细的例子吗?

  4. 我查看了stackoverflow,但我很感激有人把所有的部分放在一起,明确地为我,不假设太多的先验知识。我仔细阅读了XCode构建指南(大部分内容)但我只看到树而不是森林。

    谢谢!

1 个答案:

答案 0 :(得分:9)

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

.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使用您的项目(但是,在发布之前不要忘记将它们切换到适当的值)。