一 背景
在iOS⼯程开发过程中,⼏乎都会遇到多环境下切换和开发的需求,iOS原⽣开发Xcode 下是⽀持多target ⼯程开发的,基于mPaaS 框架开发多target ⼯程,在mPaaS 插件下默认是不⽀持的。但对于此类⾼频通⽤场景需求,在mPaaS 框架下也是有⽅案解决的。
基于mPaaS 框架的iOS开发分两种⽅式接⼊mPaaS 框架,⽅式⼀是使⽤mPaaS 插件接⼊,⽅式⼆是使⽤ CocoaPods 接⼊。两种接⼊⽅式在mPaaS官⽹⽂档有详细介绍,参考⽂档: https://help.aliyun.com/document_detail/87352.html 和 https://help.aliyun.com/document_detail/106682.html 。
二 多Target⼯程
1. 创建新的Target
选中⼯程project ⽂件下 TARGETS 新建Target(快捷键command + D)
复制后会在原来target基础上⽣成⼀个新的target,可以⾃定义新建target 的名字,同时会⽣成⼀个新的plist⽂件。plist⽂件的位置是在项⽬的主⽬录下,如果觉得放着不合适可以挪到某个⽂件夹下然后在引⼊到项⽬中。
创建完成后在可以⾃定义plist⽂件名称(推荐于target 名称⼀致),修改后需要在Build Settings 下修改Info.plist File 的路径。
2. mPaaS 插件接⼊
2.1. 导⼊配置
打开mPaaS插件 ->编辑⼯程 ->导⼊云端元数据,选中对应的target 点击选择配置⽂件,选中⾃⼰本地与之target 对应的config ⽂件,开始导⼊。导⼊后⼯程mPaaS⽂件夹下对应target ⽂件下会⽣成对应的 meta.config
文件和 yw_1222.jpg
无线保镖图片。
选中不同的target 导⼊对应的 .config
配置⽂件,重复上述步骤直⾄所有target 环境都配置完成。
2.2. 编辑模块
使⽤mPaaS 插件编辑⼯程添加模块,这⾥必须要选中第⼀个target,添加需要的模块,勾选copy 开始编辑。
注:因mPaaS插件默认不⽀持多target,这⾥编辑添加模块只能选中第⼀个target 为⼊⼝编辑。否则会编辑模块报错,也会导致原本导⼊的配置⽂件和⽆线保镖被删除。
2.3. 勾选Target Membership
- 在不同target 下创建的plist ⽂件、导⼊的
meta.config
和⽆线保镖,需要⼿动勾选对应的 Target Membership。
- ⼿动复制原target 下APMobileFramework 和 mPaas⽂件夹,到新建target ⽂件下,⼿动修改DTFrameworkInterface 和 MPaaSInterface 分类名字(与target 名称匹配)。
- 将不同target 下⽤到的m类⽂件⼿动勾选对应的 Target Membership。
- 将mPaaS插件导⼊的各个模块framework 全选,⼿动勾选所有的 Target Membership。
注:这⾥推荐勾选所有target 为的是保证,各个target 下⼯程编译⼀致。也可以⼿动对不同target 勾选不同framework,但是需要客户⾃⾏分清各个模块framework的依赖关系,会得不偿失。
将上述四步操作完成后,就可以正常编译、运⾏不同target 下⼯程。
3. CocoaPods 接⼊
3.1. 导⼊配置和模块
- 重命名下载的
.config
配置⽂件,将⽂件名中的 ios 改为 iOS 。 - 将重命名后的
.config
配置⽂件拷⻉到⼯程的根⽬录下(与Podfile
同级)。 - 在命令⾏执⾏
pod mpaas init
命令,⾃动处理 Podfile ⽂件,并添加plugin
、source
以及mPaaS_baseline
配置。 - 配置
Podfile
⽂件。
指定 mPaaS 基线,修改 mPaaS_baseline
。添加 mPaaS 组件依赖,使⽤ mPaaS_pod
。 eg: mPaaS_pod "mPaaS_Nebula"
,其中 mPaaS_Nebula
为组件名称,更多组件名称参考上述官⽹⽂档。
添加多个target 的Podfile 配置内容,参考如图:
- 执⾏
pod install
即可完成接⼊。您还可以追加--verbose
查看详细⽇志。
3.2. 勾选 Target Membership
- 在不同target 下创建的plist ⽂件、导⼊的 meta.config 和⽆线保镖,需要⼿动勾选对应的 Target Membership。
- 将不同target 下⽤到的m类⽂件⼿动勾选对应的 Target Membership,包括pod 创建的 DTFrameworkInterface 和 MPaaSInterface 分类。
注:pod 是可以在不同 target 导⼊不同mPaaS组件模块,不同target 下重复的组件模块 CocoaPods 也只会导⼊⼀份,因此不同target 完全可以编辑相同的Podfile 内容。
将上述步操作完成后,就可以正常编译、运⾏不同target 下的⼯程。
3. 不同Target 环境的加密和公钥
3.1. ⽹关加密和公钥
在创建不同target 时已经对应⽣成了 info.plist ⽂件,正常添加mPaaS ⽹关配置的加密公钥和加密⽹关地址即可。
3.2. H5离线包的公钥配置
在对应target 下的DTFrameworkInterface 分类中正常添加H5的验签公钥即可,示例如下图:
3.3. 热修复公钥配置
因热修复的公钥需要在main⽂件中使⽤,且需要对应的公钥签名数组。这⾥推荐使⽤宏定义,分别定义各个target 环境的宏定义开关。关于如何⾃定义target 宏定义开关,⽹上有很多Target宏定义的讲解:《 iOS 创建多个Target实现多渠道打包或者环境区分》。
mPaaS热修复在main 中使⽤具体参考热修复⽂档,这⾥只是宏定义开关举例,如图:
三 总结
在mPaaS框架下使⽤多target 环境⼯程还有⼀些注意点:
- 在编译不同target 环境时注意编辑Schemes,Run 和打包Archive 对应选择⾃⼰创建的Preprocessor
Macros。
- 不同target 环境的公钥,包括H5离线包验签公钥和热修复验签公钥,注意区分不要混淆。
- 在不同target 环境切换后,注意检查各项配置,特别是上线App Store的⽣产环境配置着重检查。