在Xcode开发中通常会针对Debug/Release使用不同的服务器地址,最简单的方式那肯定是直接在代码中进行修改。但是如果每次都手动进行修改太麻烦了,也对不起我们程序员的身份不是~
如何能更方便的进行管理呢,首先看下我们非常熟悉的几个东西:
- project:包含了项目所有的代码,资源文件等所有信息。
- target:对指定代码和资源文件的具体构建方式
- scheme 对指定target的环境变量以及编译环境的配置
显然我们可以从target以及scheme进行入手,废话不多说,直接切入正题。
方式一
通过添加User-Defined Settings,如HOST_URL,然后在Info.plist文件中添加自定义的键值对,如键=host,值=${HOST_URL},即可根据环境动态读取HOST_URL,通过访问Info.plist文件中的host取值。示例如下:
取值使用代码也比较简单,可以进行简单的封装再使用
NSString *path = [[NSBundle mainBundle] pathForResource:@"Info.plist" ofType:nil];
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
NSLog(@"%@",dict[@"host"]);
但是如果参数较多,或者在release环境下使用测试地址等,再使用这种方式那就相对比较麻烦了,只能通过添加额外的参数进行控制,参数多了配置起来就会麻烦,而且容易遗漏或出错。
幸好我们的Xcode已经支持了使用xcconfig文件对工程target进行配置,比如我们经常使用的cocoapods它就是使用这个功能来动态的修改我们的Other Link Flag或者Header Search Path等build settings里面的参数,那么同样我们自己也可以创建Configuration Settings File来使用。
方式二
使用Xcode创建xcconfig文件,按照环境进行命名,然后可以看到会有一个苹果提供的使用说明的地址,实在是太贴心了~
// Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974
然后就可以针对这几种环境定义不同的HOST_URL等值,也可以在这此文件中导入其它的xcconfig文件,还可以定义build settings里面的配置,对于这些build settings里面的选项的KEY,在官方网站提到,这里有一个小技巧,直接使用拖拽的方式将选项拖到xcconfig文件中,会自动显示出选项的键值对。
添加scheme并针对scheme进行Build configuration的配置进行修改
使用自定义的Key时与方式一相同,将xcconfig中定义的key添加到Info.plist文件中读取
我个人比较推荐第二种方式,这种方式更加方便管理和维护和扩展,更加符合开发的设计原则。