Ios 在Xcode中为不同环境组织API基URL的最佳方法
我们的API有3个环境Ios 在Xcode中为不同环境组织API基URL的最佳方法,ios,objective-c,xcode,xcode5,Ios,Objective C,Xcode,Xcode5,我们的API有3个环境Dev、Stage和Prod。我在Xcode中为3个环境设置了3个目标和方案,它们具有不同的构建、代码签名、概要文件和plist 如何对API基URL执行相同的操作?现在我有一个前缀文件。因为它是一个项目,所以所有3个目标都使用同一个文件,每次为不同的环境构建时,我都必须更改注释 //DEV #define SERVER_URL @"http://api.dev.com/api/" //STAGE #define SERVER_URL @"http://api.stage.
Dev、Stage和Prod
。我在Xcode中为3个环境设置了3个目标和方案,它们具有不同的构建、代码签名、概要文件和plist
如何对API基URL执行相同的操作?现在我有一个前缀文件。因为它是一个项目,所以所有3个目标都使用同一个文件,每次为不同的环境构建时,我都必须更改注释
//DEV
#define SERVER_URL @"http://api.dev.com/api/"
//STAGE
#define SERVER_URL @"http://api.stage.com/api/"
//PROD
#define SERVER_URL @"http://api.prd.com/api/"
在Xcode中为不同的目标环境组织API基URL的最佳方法是什么
谢谢,对于每个目标,您可以添加不同的预处理器宏(位于目标的生成设置中)。例如,您的开发目标定义了
Dev=1
DEBUG
宏是一个很好的例子,应该存在于每个目标中的调试配置中。您必须为每个配置(调试、发布等)指定自定义预处理器宏
在前缀头文件中,您现在可以检查当前正在构建的目标
#if defined DEV
#define SERVER_URL @"http://api.dev.com/api/"
#elif defined STAGE
#define SERVER_URL @"http://api.stage.com/api/"
#elif defined PROD
#define SERVER_URL @"http://api.prd.com/api/"
#endif
我认为它应该是这样工作的,但不要把我限制在这一点上。首先,对于如此复杂的事情,我强烈建议使用xcconfig文件而不是构建窗格进行配置。是相当过时的,但信息仍然相当准确(减去Xcode UI中的一些小更改) 使用这种技术,您可以为不同的构建配置(Dev、Stage、Prod)混合使用不同的xcconfig文件。在正确的xcconfig中,您可以使用
GCC\u预处理器\u定义
设置所需的任何宏:
GCC_PREPROCESSOR_DEFINITIONS = SERVER_URL=@"http://api.dev.com/api/"
我到处玩,为我找到了一个简单而有效的解决方案 我将
API基本URL
作为一个值放入每个目标的plist
,键为@“ServerURL”
。然后在与API接口的singleton类上,我将其放在init中
NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];
serverURL = [infoDictionary objectForKey:@"ServerURL"];
在这里,我有一个正确的服务器URL,它基于我正在构建的目标。目标之间可以有更多的差异(使用或不使用某些框架,…),这使得预处理器宏比.plist值更易于维护