iOS组件化App壳工程执行
# 现状
app目前已经完成以下组件的接入。并持续对目前主工程中的基础类、通用业务类和业务类进拆分。当前大量业务还存在与主工程,主工程还暂时未形成壳工程,随着业务的拆分组件化,主工程中只剩下配置,则会形成真正的壳工程。目前暂将其视为携有业务的壳工程。
基础组件的接入包括:
XXXBLUtils
XXXBLCore
XXXBLNetworking
XXXBLRouter
XXXBLWebViewJSBridge
通用业务组件的接入包括:
XXXBIZTracker
XXXBIZCommon
业务组件的接入包括:
XXXBIZFeedback
XXXBASEUICommon
XXXCharts
XXXHealthplan
# 组件开发
新业务要以组件的方式进行开发,推荐使用模板:https://github.com/wanyakun/pod-template.git 创建。(可替换为自己的模板)
pod lib create --template-url=https://github.com/wanyakun/pod-template.git MyLibrary
模板中包含fastlane的一些action,包括:生成动态Framework和发布组件(目前是源码发布,二进制化后优化进行Framework发布)
以下为登录组件的基本结构:
随着App中公共资源的下沉,业务拆分会更容易进行,其依赖的公共资源只需要依赖下沉后的组件即可。业务开发可以根据情况采取MVC/MVVM/MVP进行开发。
# 壳工程配置
壳工程主要通过Podfile对依赖的组件进行版本配置。以下为App的Podfile内容:
workspace 'XXX.xcworkspace'
source 'http://git.xxx.com/xxx/Specs.git'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, "8.0"
use_frameworks!
inhibit_all_warnings!
target 'XXX' do
#=====================================第三方组件=================================
pod 'Masonry', '~> 1.0.2'
pod 'UMengUShare/UI', '6.4.4' #U-Share SDK UI模块(分享面板,建议添加)
pod 'UMengUShare/Social/Sina' #集成新浪微博
pod 'UMengUShare/Social/WeChat' #集成微信
pod 'UMengUShare/Social/QQ' #集成QQ
pod 'SDWebImage', '4.0.0'
pod 'ZBarSDK', '1.3.1' #二维码扫描
pod 'tingyunApp', '2.5.7'
pod 'YYModel', :podspec => 'https://raw.githubusercontent.com/ibireme/YYModel/master/YYModel.podspec'
pod 'UICKeyChainStore', :podspec => 'https://raw.githubusercontent.com/kishikawakatsumi/UICKeyChainStore/master/UICKeyChainStore.podspec'
pod 'APIService-XGPush',:podspec => 'https://raw.githubusercontent.com/ElfSundae/AppComponents/master/APIService/APIService-XGPush.podspec'
pod 'pop', '~> 1.0'
pod 'YXWaveView'
#=====================================内部组件===================================
pod 'XXXCharts'
pod 'XXXBLRouter'
pod 'XXXBLWebViewJSBridge'
pod 'XXXBLNetworking'
pod 'XXXBIZCommon'
pod 'XXXBIZTracker'
pod 'XXXBASEUICommon'
pod 'XXXHealthplan'
pod 'XXXBIZFeedback'
end
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Podfile指定版本号逻辑:
pod 'AFNetworking'
不指定版本pod 'AFNetworking', '1.0'
版本号指定为1.0pod 'AFNetworking', '> 1.0'
1.0版本以上pod 'AFNetworking', '>= 1.0'
1.0版本以上,包括1.0pod 'AFNetworking', '< 1.0'
1.0版本以下pod 'AFNetworking', '<= 1.0'
1.0版本以下,包括1.0pod 'AFNetworking', '~> 1.0'
版本号可以是1.0,可以是1.1,1.9,但必须小于2pod 'AFNetworking', '~> 3.1.0'
版本3.2.0以下,不包括3.2.0,版本3.1.0以上,包括3.1.0
所以我们的Podfile采取最后一种方式设置,也要求我们的组件安装major.minor.patch的方式设置版本。每次版本更新,在开发需求确定后就必须确定major、minor和patch,pod update只会升patch。
# 版本开发流程
# Jenkins自动打包
在进入集成测试阶段,就需要使用Jenkins进行自动打包,Jenkins会自动从git上拉去壳工程,进行CocoaPods依赖获取组件,然后进行打包发布。
# 现状
目前很多业务还在主工程中进行开发,所以主工程会产生一些feature分支,然后进行merge,目前采用在release分支进行集成测试打包。
# 组件化完成之后
主工程只剩下壳,只剩下Podfile和极少的文件进行配置。壳工程不需要进行业务开发,所以推荐一个版本使用一个分支(也支持可以多版本同时进行),Jenkins上根据版本创建对应的Job
注:若不存在版本并行,也可以采用现有方式固定在release分支进行打包。