iOS技能拓展 多环境配置

3,233 阅读3分钟

写在前面

关于多环境

  • Project:包含了项目所有信息——所有代码、资源文件(workSpace就是包含多个Project)
  • Target:对指定代码和资源文件的具体构建方式
  • Scheme: 对指定Target的环境配置

一、多Target

Target就是个打工人,是具体干活的人;而Scheme就是老板(环境配置),谁给的钱多(指定哪个环境)Target就给谁干活(执行哪份配置)

1.Duplicate Target

image.png

2.统一名称

image.png

3. 修改BundleId和AppIcon

就可以很好区分两个Targetimage.png

4.使用宏定义来区分Target

image-20210223192120000.pngimage-20210223192221125.pngimage-20210223192301115.png

5.Swift配置

Swift配置略有不同,它是通过Other Swift Flags来预编译宏的

  1. 先创建Swift文件并创建桥接文件
  2. 添加Swift文件到编译列表中
  3. 指定Swift语言版本和桥接文件image-20210223193628976.png
  4. 此时可以先使用OC和Swift进行混编了image-20210223193919321.png
  5. 使用预定义宏(与OC不同的是,Swift需要使用“-D xxx”的形式,点击回车会分成两行)image-20210223195616963.pngimage-20210223195722989.png

其实多Target也是用到了Scheme配置——与前文中说的,使用哪套配置取决于选择Scheme对应的Target image-20210223200551758.png

多Target配置多环境虽然能满足我们的需求,但是会生成多个info.plist文件,且操作繁琐——Target之间还需要来回切换来配置不同的参数,好在我们还有别的配置方案

二、多Scheme

这种方案与多Target方案较为类似,都是通过自定义参数来达成需求。与其叫多Scheme,更不如叫多Configuration

1.新增Configuration

image-20210223202336544.png

2.新增Scheme

image-20210223202424554.png

3.Scheme对应Configuration

image-20210223202529243.png

4.新增自定义配置

image-20210223203347870.png

5.多Scheme方案也可以修改BundleId和AppIcon

只要是BuildSettings里面有的都可以多环境配置

image-20210224091309339.png

6.利用info.plist文件进行映射

image-20210223202915532.png

image-20210223203504772.png

这样子就可以通过切换Scheme来完成多环境配置,但是自定义配置还是有点复杂

三、多Xcconfig

1.新建Xcconfig

image-20210223204954187.png 命名方式最好是Config-项目名称.环境Configuration.xcconfig(可参考Cocoapods集成的xcconfig文件)image-20210223205642424.png

2.Configuration选择对应的Xcconfig

上面的入口是配置Project,下面的入口是配置Target image-20210224091734621.png

3.配置Xcconfig文件

部分变量配置到BuildSettings中不起作用,如PRODUCT_BUNDLE_IDENTIFIER

4.配置info.plist文件进行映射

同方案二一样配置info.plist文件进行映射 image-20210223210121484.png

xcconfig文件实质就是在配置BuildSetting里面的选项——Xcode Build Settings网站详细介绍了各个变量

四、Xcconfig冲突

1.Pods-config冲突

往往我们在多环境下进行podfile配置后,终端会发出如下警告,且项目无法运行 image.png 从字面意思上看就是“项目已经配置了configPods-config可能不会生效”——为了解决这个警告,也是为了正常运行项目,我们需要在自定义的Xcconfig文件中引用Pods-config

根据提示在xcconfig文件中添加Target Support Files/Pods-FXDemo/Pods-FXDemo.release.xcconfig。仅仅是这样还无法引用对应的Pods-config,根据目录应该使用如下的导入方式:

#include "Pods/Target Support Files/Pods-FXDemo/Pods-FXDemo.debug.xcconfig"

ConfigurationString = 这是开发环境

在所有环境配置中都引用Pods-config,终端警告就会消除

2.继承xcconfig

光光是上面这种引用操作还不够,引用只是将原有配置全部引用过来,如果重写的话就会进行覆盖image.png因此我们需要使用Xcode内置的$(inherited)字段来继承(Pods-config也是如此操作的)

#include "Pods/Target Support Files/Pods-FXDemo/Pods-FXDemo.debug.xcconfig"

ConfigurationString = 这是开发环境
OTHER_LDFLAGS = $(inherited) -framework "FXSDK"

3.新增Other Linker Flags

引用继承之后,还可以在BuildSettings新增链接 image.png

五、Xcconfig拓展

  • include可以使用绝对路径/相对路径
// 绝对路径
#include "Pods/Target Support Files/Pods-FXDemo/Pods-FXDemo.debug.xcconfig"
// 相对路径
#include "/Users/felix/Desktop/FXDemo/Pods/Target Support Files/Pods-FXDemo/Pods-FXDemo.debug.xcconfig"
  • 网址的定义可以使用中间量去实现(使用变量可以用$()${}
diagonal = /
ConfigurationString = https:${diagonal}/baidu.com
  • 使用环境变量来限制生效的场景
// 表示在debug环境+模拟器+x86架构下才链接“FXSDK”
OTHER_LDFLAGS[config=Debug][sdk=iphonesimulator*][arch=x86_64] = -framework "FXSDK"

写在后面

其实多环境配置不仅仅只是操作TargetSchemeXcconfig,要理解他们各自的功能,搭配使用才能更好地完成多环境配置需求