0

我对 IOS 开发有些陌生,想根据我的应用程序的构建方案找到管理环境变量的最佳方法。

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

http://debugserver1.blah.com

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

http://testserver2.blah.com

而对于产品

http://prodserver.blah.com

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

你们能帮助我将某些 pLists 与某些方案构建相关联吗?

4

2 回答 2

0

您可以通过使用#include每个源文件中的定义文件来做到这一点。例如:

服务器名.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 中的构建设置来定义构建类型。为此,请转到您的构建设置并向下滚动,直到找到预处理部分。默认项目如下所示:

在此处输入图像描述

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

于 2012-05-12T20:27:37.397 回答
0

这是一个非常常见的场景,并且很容易处理。默认情况下,当你创建一个新项目时,DEBUG#definedDebug构建配置,而不是为Release配置。对于您的测试配置,您可能会复制Debug并添加一个#defineforTEST

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

@property (nonatomic, strong) NSString * baseURLString;

然后在你的类的 init 方法中:

#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

然后使用baseURLString构造 URL 来进行 API 调用。

于 2012-05-12T20:39:13.717 回答