iOS-Xcode多环境配置

多环境配置方案

常见名词解析:

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:


创建多Scheme.png

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


多Scheme使用示例.png

配置Info.plist文件:
截屏2021-09-08 下午12.48.41.png

代码读取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:


截屏2021-09-08 下午2.30.41.png

使用示例:


config.jpg

每个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表示继承的意思。

你可能感兴趣的:(iOS-Xcode多环境配置)