我对IOS开发有点不感兴趣,并希望根据我的应用程序的构建方案找到管理环境变量的最佳方法。
因此,如果我执行DEBUG构建,我希望我的应用程序从服务器中检索所有数据
http://debugserver1.blah.com
同样,如果我执行TEST构建,我希望我的应用程序从服务器检索所有数据
http://testserver2.blah.com
对于prod
http://prodserver.blah.com
我确信这是一个不寻常的情况,我正在试图找出解决这个问题的最佳方法。我查看了环境变量,但我认为这没有意义,所以我倾向于pLists。
你们可以协助我帮助我将某些pLists与某些计划构建联系起来吗?
答案 0 :(得分:0)
您可以通过在每个源文件中使用#include
d的定义文件来执行此操作。例如:
#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中的构建设置来定义构建类型。要执行此操作,请转到“构建设置”并向下滚动,直到找到“预处理”部分。默认项目如下所示:
在该部分中,对于每种类型的构建,您可以根据需要添加DEBUG_BUILD
,TEST_BUILD
或PRODUCTION_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调用。