首页 文章详情

iOS技能拓展 多环境配置(全文干货)

iOS开发 | 317 2021-10-15 20:36 0 0 0
UniSMS (合一短信)
👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇



作者 | 我是好宝宝

来源 | 掘金

链接:

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来预编译宏的

  1. 先创建Swift文件并创建桥接文件

  2. 添加Swift文件到编译列表中

  3. 指定Swift语言版本和桥接文件


  4. 此时可以先使用OC和Swift进行混编了


  5. 使用预定义宏(与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配置后,终端会发出如下警告,且项目无法运行 

 

从字面意思上看就是“项目已经配置了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

光光是上面这种引用操作还不够,引用只是将原有配置全部引用过来,如果重写的话就会进行覆盖因此我们需要使用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"

写在后面

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

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

点击👆卡片,关注后回复【面试题】即可获取

在看点这里好文分享给更多人↓↓

good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter