iOS技能拓展 多环境配置(全文干货)
作者 | 我是好宝宝
来源 | 掘金
链接:
https://juejin.cn/post/6961026404125245471
前言
关于多环境
Project
:包含了项目所有信息——所有代码、资源文件(workSpace就是包含多个Project)Target
:对指定代码和资源文件的具体构建方式Scheme
: 对指定Target的环境配置
一、多Target
Target
就是个打工人,是具体干活的人;而Scheme
就是老板(环境配置),谁给的钱多(指定哪个环境)Target
就给谁干活(执行哪份配置)
1.Duplicate Target
2.统一名称
3. 修改BundleId和AppIcon
就可以很好区分两个Target了
4.使用宏定义来区分Target
5.Swift配置
Swift配置略有不同,它是通过Other Swift Flags
来预编译宏的
先创建Swift文件并创建桥接文件
添加Swift文件到编译列表中
-
指定Swift语言版本和桥接文件 此时可以先使用OC和Swift进行混编了
使用预定义宏(与OC不同的是,Swift需要使用“-D xxx”的形式,点击回车会分成两行)
其实多Target
也是用到了Scheme
配置——与前文中说的,使用哪套配置取决于选择Scheme
对应的Target
多Target配置多环境虽然能满足我们的需求,但是会生成多个info.plist文件,且操作繁琐——Target之间还需要来回切换来配置不同的参数,好在我们还有别的配置方案
二、多Scheme
这种方案与多Target
方案较为类似,都是通过自定义参数来达成需求。与其叫多Scheme
,更不如叫多Configuration
1.新增Configuration
2.新增Scheme
3.Scheme对应Configuration
4.新增自定义配置
5.多Scheme方案也可以修改BundleId和AppIcon
只要是BuildSettings里面有的都可以多环境配置
6.利用info.plist文件进行映射
这样子就可以通过切换Scheme来完成多环境配置,但是自定义配置还是有点复杂
三、多Xcconfig
1.新建Xcconfig
命名方式最好是Config-项目名称.环境Configuration.xcconfig
(可参考Cocoapods集成的xcconfig文件)
2.Configuration选择对应的Xcconfig
上面的入口是配置Project
,下面的入口是配置Target
3.配置Xcconfig文件
部分变量配置到BuildSettings中不起作用,如PRODUCT_BUNDLE_IDENTIFIER
4.配置info.plist文件进行映射
同方案二一样配置info.plist文件
进行映射
xcconfig文件实质就是在配置BuildSetting里面的选项——Xcode Build Settings网站详细介绍了各个变量
四、Xcconfig冲突
1.Pods-config冲突
往往我们在多环境下进行podfile
配置后,终端会发出如下警告,且项目无法运行
从字面意思上看就是“项目已经配置了config
,Pods-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
光光是上面这种引用操作还不够,引用只是将原有配置全部引用过来,如果重写的话就会进行覆盖因此我们需要使用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
新增链接
五、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"
写在后面
其实多环境配置不仅仅只是操作Target
、Scheme
、Xcconfig
,要理解他们各自的功能,搭配使用才能更好地完成多环境配置需求
-End-
最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!
面试题
】即可获取