根据预处理器macros值更改基本URL

我有一个项目有几个计划,一个是EA,Staged和Production。

我希望能够根据我正在运行的构buildconfiguration来设置我的基础URL。

#if defined PRODUCTION #define BASE_URL [NSURL URLWithString:@"https://example.production.com/"] #elif defined STAGED #define BASE_URL [NSURL URLWithString:@"http://example.staged.com/"] #else #define BASE_URL [NSURL URLWithString:@"https://example.ea.com/"] #endif 

有没有办法设置预处理器macros来定义PRODUCTION和STAGED的值,我猜这是在我的目标的构build设置的某处。 这是否是最好的方法呢?

我通常使用类方法将我的URL存储在一个NSObject类(Aptly名为URLHub)中,像这样;

 +(NSString *)Login { NSString *url; if (developmentMode) { url = @"https://dev.mycoolwebservice/api/login"; } else { url = @"https://mycoolwebservice/api/login"; } return url; } 

然后,无论我需要使用该url,我都可以轻松抓取;

 #import "URLHub.h" NSString *url = [URLHub Login]; 

这种方法使得在整个应用程序中更新URL是非常简单的,因为它们都存储在同一个地方。

在这个例子切换到发展的url我只需要翻转一个布尔和每个url在应用程序范围内的变化。 ;)

有几个方法来实现function,但只有一个我的知识,与计划。

第一个选项超出了scheme的范围,并且与目标预处理器macros一起工作 – 对于开发,DEBUG被设置为1,并且释放,DEBUG被设置为0.您可以添加尽可能多的macros – 所以,去你的目标“构build设置”,并search“预处理器macros” – 这是非常正确的。

要使用scheme,您需要为您的scheme添加一个环境variables:

编辑scheme – >添加一个环境variables。

要访问环境variables,您需要执行以下操作:

 [[[NSProcessInfo processInfo] environment] objectForKey:@"myKey"] 

在“其他C标志”构build设置中,将-DPRODUCTION-DSTAGED放在不同的构buildconfiguration中。 (当然,您将需要创build这些额外的构buildconfiguration。)