1

我有一个项目,其中包含一些方案,一个用于 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 的值,我猜它在我的目标的构建设置中的某个地方。这会是最好的方法吗?

4

3 回答 3

2

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

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

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

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

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

[[[NSProcessInfo processInfo] environment] objectForKey:@"myKey"]
于 2013-05-08T20:00:10.677 回答
1

我通常使用这样的类方法将我的 URL 存储在一个 NSObject 类(恰当地命名为 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];

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

在此示例中,要切换到开发 url,我只需要翻转一个 BOOL 并且每个 url 都会在应用程序范围内更改。;)

于 2013-05-10T19:35:10.850 回答
1

在“Other C Flags”构建设置中,将-DPRODUCTIONand-DSTAGED放在不同的构建配置中。(当然,您需要创建这些额外的构建配置。)

于 2013-05-08T20:01:41.403 回答