XCode环境变量与TEST和PROD的属性列表

时间:2012-05-10 01:33:33

标签: iphone ios xcode plist

我对IOS开发有点不感兴趣,并希望根据我的应用程序的构建方案找到管理环境变量的最佳方法。

因此,如果我执行DEBUG构建,我希望我的应用程序从服务器中检索所有数据

http://debugserver1.blah.com

同样,如果我执行TEST构建,我希望我的应用程序从服务器检索所有数据

http://testserver2.blah.com

对于prod

http://prodserver.blah.com

我确信这是一个不寻常的情况,我正在试图找出解决这个问题的最佳方法。我查看了环境变量,但我认为这没有意义,所以我倾向于pLists。

你们可以协助我帮助我将某些pLists与某些计划构建联系起来吗?

2 个答案:

答案 0 :(得分:0)

您可以通过在每个源文件中使用#include d的定义文件来执行此操作。例如:

servername.h

#define DEBUG_BUILD
//#define TEST_BUILD
//#define PRODUCTION_BUILD

#if defined(DEBUG_BUILD)
    #define SERVER_NAME "http://debugserver1.blah.com"
#elif defined(TEST_BUILD)
    #define SERVER_NAME "http://testserver2.blah.com"
#elif defined(PRODUCTION_BUILD)
    #define SERVER_NAME "http://prodserver.blah.com"
#else
    #error Must define build type
#endif

然后,在您需要使用SERVER_NAME的每个源文件中,在顶部执行:

#include "servername.h"

以上操作可行,但您需要编辑servername.h以更改构建类型。更好的方法是从#define中删除servername.h语句,并使用Xcode中的构建设置来定义构建类型。要执行此操作,请转到“构建设置”并向下滚动,直到找到“预处理”部分。默认项目如下所示:

enter image description here

在该部分中,对于每种类型的构建,您可以根据需要添加DEBUG_BUILDTEST_BUILDPRODUCTION_BUILD

答案 1 :(得分:0)

这是一种非常常见的情况,并且易于处理。默认情况下,在您创建新项目时,DEBUG对于调试构建配置为#defined,而对于发布配置则不是#define。对于测试配置,您可能会复制调试并为TEST添加@property (nonatomic, strong) NSString * baseURLString;

我可能会继续创建一个管理器类来处理您的API调用,并添加一个属性:

#if defined(DEBUG)
self.baseURLString = "http://debugserver1.blah.com";
#elif defined(TEST) 
self.baseURLString = "http://testserver1.blah.com";
#else
self.baseURLString = "http://prodserver1.blah.com";
#endif

然后在你的班级的init方法中:

baseURLString

然后使用{{1}}构建网址以进行API调用。