Build Configuration 使用
Build Configuration, 是构建配置。可以看做构建的种类。
基本使用
用Xcode新建一个项目,默认创建了两个Build Configuration的配置,一个是debug, 一个是release。
然后可以在Project的Build Settings中使用
也可以在Target的Build Settings中使用。如果在Target的设置和Project中有相同的设置,那么Target的设置会覆盖Project中的设置,或者使用$(inherited)继承Project中的设置
如,项目中的Build Settings中的Other Swift Flags, debug中添加了一个-D PROFLAG
在Target的Build Settings中的Other Swift Flags, debug中添加了-D DEVWG $(inherited), 那么实际上就会继承Project的设置。可以看到添加$(inherited)后,除了显示-D DEVWG, 也显示了-D PROFLAG。
结合配置文件使用
configuartion可以结合文件使用。
我们新建两个配置文件,新建文件,选择Cofiguration Settings File。
然后,输入文件名, 名字任意,最好规范一些。配置文件可以用在Project的构建配置,也可以Target的构建配置中。这里我准备把创建的配置文件用在Target的配置中。 这里我按照文件夹名字-Target-配置名称来命名。Config.ds01.debug,Config.ds01.release, 创建两个配置文件出来。
如果在Project使用配置文件,如下图
如果在Target中使用配置文件,如下图。
当然Project和Target也可以同时使用。如果同时都使用,最好Project和Target使用不同的配置文件。
使用配置文件
配置文件中,可以自定义变量。如定义一个EnvHost为https://www.baidu.com, 然后在代码中获取使用。
然后,在info.plist转换一下,就可以在代码中获取到这个自定义变量了。
运行结果如下:
配置文件,设定一些Build Settings里面的参数。如OTHER_LDFLAGS = -framework "AFNetwoking", 就会改变Other Link Flags的值。
设定之前, Other Linker Flags是空的
修改配置文件,重新编译. 修改build settings中的设置为继承$(inherited),那么配置文件中的编译选项自动就出现在了设置值中。
那么问题来了,使用cocoa pods管理的项目,也会改变项目配置中的xcconfig文件,我们自己创建的xcconfig文件该如何使用呢?还有自己创建的修改的build settings中的值,和cocoa pods修改的,以及在xcode中build settings中修改的,以哪个为准?如何解决冲突?
下面我们来建一个cocoa pods项目。可以看到cocoa pods已经配置好了配置文件。如Pods-ds02.debug
看一下cocoa pods的配置文件
添加pod 'SnapKit' 后,执行pod install变成这样
Build settings变成这样
这时,我们创建自己的配置文件。然后把Project配置成自己的配置文件。
build settings这时,search path又变成没有值了。
如何解决?只需要在我们自己的文件中include cocoapods的配置文件。
如果我们要改变之前cocoapods里面设定的某个字段,那么只需要使用$(inherited)继承一下,就会把cocoa pods中的设定继承过来。
Build settings变成
如果我们直接在xcode中的build settings再修改呢?同样的道理,只要有$(inherited),就可以继续添加,会继承前面的cocoapods中的配置,以及我们自定的配置文件中的配置。
发现有一点需要注意,只要在xcode的build settings中进行了修改,那么系统呈现的就不是之前我们文件中的结果,而是我们自己设定的值。相当于重写了之前的方法一样。如这里之前呈现的是$(inherited) "build/Debug-iphoneos/SnapKit" "/ds02" , 如果我们点击"+"号,添加一个"/ds03/",那么系统会认为之前那些变成也是我们设定的,这样就会出现重复。因为$(inherited)实际上已经继承了之前所有的设定,没有必要再添加 "build/Debug-iphoneos/SnapKit" "/ds02" ,如果有,那么可以删除一下,只需要添加我们需要的额外的东西,如"/ds03/".
总结
Build Configuration,可以绑定配置文件,配置文件可以通过#include包含之前的配置,如果重写,那么需要使用$(inherited)继承。如果手动修改了xcode build settings,那么同样需要使用$(inherited)。
需要注意的是,如果没有手动设置,那么build settings呈现文件的设置结果。一旦手动修改了Xcode build settings设置,他的优先级最高,系统默认使用它的设置为最终设置,而不是文件的设置。只能使用$(inherited)来继承文件的设置。
网友评论