利用Scheme+xcconfig进行环境配置

1,088 阅读2分钟

思考

App开发完了都会有这样一个需求,测试阶段打测试包,灰度阶段打灰度包,发布阶段打上线包。
每种包都有可能会有配置上差异,比如,域名配置,引用库配置等,如何处理比较合适?

暴力做法:

每种包都手动改配置,显得就有点粗糙了。

老司机做法:

  1. 创建多个target,通过每个target的不同Build Setting 来处理

    这种,对于笔者这种懒人来说,显得太麻烦了,不仅需要注意文件的添加,配置有改动,需要每个target都同步修改。

  2. 创建多个scheme,使用同一份Build Setting,通过不同的Build config来处理

实操

笔者实际开发的工程是使用cocoapods来进行三方库的管理,而且有一些在App上的可视化工具(离线Log、网络抓包、沙盒浏览等)只编译进测试包,生产包是不包含这些库的,所以就有了如下操作:

  1. 创建不同的config 1ef84a59cf60e8d77d9e7d778254e35b.png

  2. 执行一下 pod install ,cocoapods会自动生成不同xcconfig 42f22dd39741dbc088c24108216b0b5b.png

  3. 创建不同的scheme,然后配置每个scheme的Build Config f856ff03d45e97298cb3847cda72fb86.png fe264e23a1e687aabf14fe713651a126.png

  4. 这样一同操作下来之后,所有的配置就只需在Target的Build Settings里设置就行了,比如一些常见的设置

    编译优化的设置 5be2f075fc7a27da10cfe9ccc4f9ea0c.png 自定义宏 fdada8cb3055dca4119c2c5feaf35560.png
    证书和描述文件的配置 45d610cc2d4a985e6f7e064812d7fb50.png 等等一系列的配置,都可以统一管理了

  5. 前面说到有一些库是不编译进生产包的,可以通过PodFile文件配置,指定Build config 7ba174812102c1752ed94d71f046693b.png a6a0fd716d448a9c10cc5a038ea0a6c5.png 5da3bc3f3639d63541f5fbac70de0e95.png 这样就只有在指定config下才会将Masonry进行编译链接

  6. 如果项目中有用fastlane来作为自动化打包工具,也可以无缝的接入,只需为各个lane指定对应的scheme就可以了

总结

至此,就已经完成了通过不同的scheme来达到不同环境的配置效果。Scheme可以通过share,将其交给git来管理。