Xcode 构建环境
Xcode build for environment
目前正在开发一个连接到多个不同网络服务的 iPhone 应用程序。这些网络服务有几个不同的地址,具体取决于我们连接到的环境:
- 测试 - http://staging.example.com/api/testing/servicename
- 分期 - http://staging.example.com/api/servicename
- 生产 - http://www.example.com/api/servicename
我想知道定义这些 url 并根据我们要构建的环境在它们之间切换的最佳约定是什么。这是我可以在我的构建设置中定义的东西,还是我可以使用定义来设置各种构建来指定环境?
注意:不确定这是否重要,但目前我们纯粹使用 Objective-c,尽管我们可能会在项目生命周期的后期整合 Swift。
这对我有用:
#ifdef TARGET_PROD
#define BASE_URL @" http://www.example.com/api/"
#endif
#ifdef TARGET_VAL
#define BASE_URL @"http://staging.example.com/api/"
#endif
#ifdef TARGET_TEST
#define BASE_URL @"http://staging.example.com/api/testing/"
#endif
例如,将其放入 Commons.h 或通用项目文件中。
对于任何目标,转到构建设置并设置处理器宏,在 "Debug" 和 "Release" 中添加 TARGET_PROD,TARGET_TEST 用于目标测试,TARGET_VAL用于目标分期。
当您发出请求时,只需在您的 BASE_URL 中附加 SERVICENAME,如下所示:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@,%@", BASE_URL,yourService]]];
使用NSUserDefaults
。
例如,通过将生产值在字典中传递给 -registerDefaults:
,将生产值设置为故障转移默认值。这会将值放入 NSRegistrationDomain
。然后,为了您的验证和测试,您可以:
- 使用代码在
NSArgumentDomain
中设置值。这将覆盖 NSRegistrationDomain
. 中的值
- 将值作为启动参数传递。当您执行此操作时,该值将插入
NSArgumentDomain
,再次覆盖 NSRegistrationDomain
. 中的任何值
NSUserDefaults
按特定顺序搜索域以查找值。 this post by oleb.
中对此行为进行了很好的解释
这种方式比较灵活,没有使用条件编译来解决这个问题的一些缺点。
目前正在开发一个连接到多个不同网络服务的 iPhone 应用程序。这些网络服务有几个不同的地址,具体取决于我们连接到的环境:
- 测试 - http://staging.example.com/api/testing/servicename
- 分期 - http://staging.example.com/api/servicename
- 生产 - http://www.example.com/api/servicename
我想知道定义这些 url 并根据我们要构建的环境在它们之间切换的最佳约定是什么。这是我可以在我的构建设置中定义的东西,还是我可以使用定义来设置各种构建来指定环境?
注意:不确定这是否重要,但目前我们纯粹使用 Objective-c,尽管我们可能会在项目生命周期的后期整合 Swift。
这对我有用:
#ifdef TARGET_PROD
#define BASE_URL @" http://www.example.com/api/"
#endif
#ifdef TARGET_VAL
#define BASE_URL @"http://staging.example.com/api/"
#endif
#ifdef TARGET_TEST
#define BASE_URL @"http://staging.example.com/api/testing/"
#endif
例如,将其放入 Commons.h 或通用项目文件中。
对于任何目标,转到构建设置并设置处理器宏,在 "Debug" 和 "Release" 中添加 TARGET_PROD,TARGET_TEST 用于目标测试,TARGET_VAL用于目标分期。 当您发出请求时,只需在您的 BASE_URL 中附加 SERVICENAME,如下所示:
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@,%@", BASE_URL,yourService]]];
使用NSUserDefaults
。
例如,通过将生产值在字典中传递给 -registerDefaults:
,将生产值设置为故障转移默认值。这会将值放入 NSRegistrationDomain
。然后,为了您的验证和测试,您可以:
- 使用代码在
NSArgumentDomain
中设置值。这将覆盖NSRegistrationDomain
. 中的值
- 将值作为启动参数传递。当您执行此操作时,该值将插入
NSArgumentDomain
,再次覆盖NSRegistrationDomain
. 中的任何值
NSUserDefaults
按特定顺序搜索域以查找值。 this post by oleb.
这种方式比较灵活,没有使用条件编译来解决这个问题的一些缺点。