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

时间:2013-05-08 19:40:32

标签: iphone ios objective-c

我有一个项目有一些方案,一个用于EA,分阶段和生产。

我希望能够根据我正在运行的构建配置来设置我的基本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

有没有办法设置预处理器宏以定义PRODUCTION和STAGED的值,我猜它是在我的目标的构建设置中的某个地方。这会是最好的方法吗?

3 个答案:

答案 0 :(得分:2)

有几种方法可以实现这一功能,但据我所知,只有一种方法适用于方案。

第一个选项超出了方案的范围,并且与目标预处理器宏一起使用 - 对于开发,DEBUG设置为1,并且release,DEBUG设置为0.您可以添加任意数量的宏,如您所愿 - 为此,转到目标“构建设置”,并搜索“预处理器宏” - 它就在那里。

要使用方案,您需要在方案中添加一个环境变量:

编辑方案 - >添加环境变量。

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我通常使用类方法将我的URL存储在NSObject类(Aptly命名为URLHub)中;

+(NSString *)Login
{
    NSString *url;

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

    return url;
}

然后,无论我需要使用哪个网址,我都可以轻松抓取;

#import "URLHub.h"

NSString *url = [URLHub Login];

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

在这个切换到开发网址的示例中,我只需要翻转一个BOOL和每个网址应用范围内的更改。 ;)