多环境配置方案
常见名词解析:
Project:包含项目所有的代码,资源文件,所有信息;
Target:对指定代码和资源文件的具体构建方式;
Scheme:对指定Target的环境配置。
多target 配置方案
-
创建一个新的Target
在原来Target的基础上copy一份,伴随着会copy一份info.plist文件,然后修改名称,把copy的info.plist指向新的target:
copy新的Target.png
修改Target名称.png
优点:Target方式适合在同一份代码中生成不同的app的情况下使用,因为可以配置不同的bundleID和证书;
缺点:如果只是用作多环境的话操作繁琐,要设置多个build setting。
多个配置变量(scheme)
创建scheme:

在build setting的User-Defined中添加自定义变量,比如HOST_URL:

配置Info.plist文件:

代码读取Info.plist中的HOST_URL:
NSString *path = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"];
NSDictionary *info = [[NSDictionary alloc] initWithContentsOfFile:path];
NSString *hostUrl = info[@"HOST_URL"];
HOST_URL会根据不同scheme的配置读取相应的值,实现多环境配置。
相对于多个target方式不需要设置多个build setting。
多个xcconfig文件
为多个环境分别创建xcconfig,并指定Scheme对应的xcconfig:

使用示例:

每个xcconfig都写上对应环境的变量,比如这里的HOST_URL。
与多个Scheme一样,配置Info.plist,然后在代码里面读取出来。
xcconfig比上面两种方式更加方便,而且避免直接修改build setting文件,而是可以直接通过xcconfig文件来修改build setting的内容。比如说CocoaPods就是利用xcconfig实现Other Linker Flags、paths等的自动配置。另外xcconfig文件还能引用(include)其他的xcconfig文件,并且会复用被引用的xcconfig文件的配置。
备注:在xcconfig文件配置build setting 文件需要使用build setting字段的缩写,缩写可以参考官方文档。
使用xcconfig要注意冲突
比如说对于Other Linker Flags的配置, 你自己xcconfig配置如下:
OTHER_LDFLAGS = -framework "AFNetworking"
如果别的xcconfig文件也有OTHER_LDFLAGS的配置,那么就会出现冲突,这时候要需要加上inherited关键字,比如可以改成:
OTHER_LDFLAGS = $(inherited) -framework "AFNetworking"
inherited表示继承的意思。
网友评论