iOS组件化App壳工程执行

7/19/2017 iOS

# 现状

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发布)

以下为登录组件的基本结构:

login

随着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
1
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.0
  • pod 'AFNetworking', '> 1.0' 1.0版本以上
  • pod 'AFNetworking', '>= 1.0' 1.0版本以上,包括1.0
  • pod 'AFNetworking', '< 1.0' 1.0版本以下
  • pod 'AFNetworking', '<= 1.0' 1.0版本以下,包括1.0
  • pod 'AFNetworking', '~> 1.0' 版本号可以是1.0,可以是1.1,1.9,但必须小于2
  • pod '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分支进行打包。

Last Updated: 1/15/2023, 2:48:14 PM