思考
App开发完了都会有这样一个需求,测试阶段打测试包,灰度阶段打灰度包,发布阶段打上线包。
每种包都有可能会有配置上差异,比如,域名配置,引用库配置等,如何处理比较合适?
暴力做法:
每种包都手动改配置,显得就有点粗糙了。
老司机做法:
-
创建多个target,通过每个target的不同Build Setting 来处理
这种,对于笔者这种懒人来说,显得太麻烦了,不仅需要注意文件的添加,配置有改动,需要每个target都同步修改。
-
创建多个scheme,使用同一份Build Setting,通过不同的Build config来处理
实操
笔者实际开发的工程是使用cocoapods来进行三方库的管理,而且有一些在App上的可视化工具(离线Log、网络抓包、沙盒浏览等)只编译进测试包,生产包是不包含这些库的,所以就有了如下操作:
-
创建不同的config
-
执行一下 pod install ,cocoapods会自动生成不同xcconfig
-
创建不同的scheme,然后配置每个scheme的Build Config
-
这样一同操作下来之后,所有的配置就只需在Target的Build Settings里设置就行了,比如一些常见的设置
编译优化的设置
自定义宏
证书和描述文件的配置等等一系列的配置,都可以统一管理了
-
前面说到有一些库是不编译进生产包的,可以通过PodFile文件配置,指定Build config
这样就只有在指定config下才会将Masonry进行编译链接
-
如果项目中有用fastlane来作为自动化打包工具,也可以无缝的接入,只需为各个lane指定对应的scheme就可以了
总结
至此,就已经完成了通过不同的scheme来达到不同环境的配置效果。Scheme可以通过share,将其交给git来管理。