在进行多环境配置之前,我们需要对Xcode内的元素组成做一些了解。
1.Project:包含了项目所有的代码,资源文件等所有信息。
2. Target:对指定代码和资源文件的具体构建方式。
3. Scheme:对指定Target的环境配置。
多环境配置三种方式
方式一: 多Target
新建一个Target,修改'BundleId',修改跟随Target新生成的Info-plist文件名
对OC来说,根据target在Builed setting 的Preprocessor Macros中定义宏,来区分不同target的不同环境
切换不同的target的编译scheme后,在代码中以下面方式使用
对swift来说,可以在Builed setting 的 Other Swift Flags 里配置一个变量,然后在Swift代码中进行判断
但是该方式并不是很方便,缺点如下:
1.会生成多个Info-plist,不便于管理
2.配置起来比较混乱
方式2:多Scheme ------ 多Configurations
一般Scheme默认有Debug和Relesse 两种Configurations,此处可以再添加第三种
这时所有的配置选项都会变成三个,此时可以新建多个Scheme,分别在不同Scheme选择对应不同的Configurations
然后我们在User-Defined定义一个HOST_URL,并在info-plist中暴露出来
切换Scheme就可以切换不同环境的HOST_URL,达到多环境配置的目的
此外,还可以在User-Defined中 为不同Scheme配置不同的appicon
这时不同Target就有了不同的icon
这种方式相较第一种方便了一些,但是依然需要在Builed setting 中进行配置
方式三:xconfig文件 (cocoapods就是使用的这种方式)
首先创建xconfig文件,需要注意的是xconfig文件与环境一一对应,命名时以 路径-项目名-环境名 来命名
并在Configurations中选择对应的xconfig文件
xconfig冲突处理
此时删除之前配置的HOST_URL,在不同Xconfig文件中写入不同HOST_URL的值,也能得到相同的效果,但是cocoa pods中也有自己的Xconfig文件,在这之前需要把cocoa pods的xconfig文件路径(注意加上根目录Pods/)引入到Xconfig文件中来解决冲突。
此时就准确打印出了Debug模式下HOST_URL
但是在两个Xconfig文件中可能配置了两个相同的Builed setting配置,这也是一种冲突,这时需要在自己的XConfig文件中用$(inherited)来继承cocoapods中的配置就可以了。
对以上三种方式进行总结:
1.多target ,可以控制需要编译的代码文件和资源文件
2.多Scheme可以提供多套环境变量
3.多xconfig 可以更好的管理和配置这些环境变量