组件化

组件化之路

Posted by JT on August 6, 2018

蘑菇街App的组件化之路

蘑菇街 App 的组件化之路·续

去model化和数据对象

iOS应用架构谈 组件化方案

iOS 组件化方案探索

iOS组件化(上篇)- 拆分基础组件

iOS组件化(中篇)-拆分业务组件

iOS组件化(下篇)-加载XIB、图片资源

iOS-组件化架构漫谈

概念

一般一个项目被组件化拆分为一些基础组件、一些功能组件和业务组件,将拆分好的组件放到远程仓库,统一通过Cocoapods进行管理。我们需要理解远程索引库、本地索引库、远程代码库、本地代码库这些概念。

一、远程索引库

每创建一个组件都会带有一个 xxx.podspec 的索引文件。专门用来存放这些索引文件的库就叫做索引库。我们需要将这些索引文件上传到远程索引库才能保证其他的同事能够拿来用。

创建远程索引库( 注:这里是在github上创建了一个public的organization名字叫FFComponent)笔者这里创建的public的,自己公司的项目创建private的私有索引库即可,私有索引的步骤和pubic的操作方式一样。

远程索引库已经创建成功,可以看到远程索引库的地址。

二、 本地索引库

本地索引库就是用来存放本地索引文件的库。

1、 打开终端 pod repo 查看一下当前有哪些本地索引库(如果你之前没有创建过,应该只有一个master)

2、 通过pod repo add <本地索引库的名字> <远程索引库的地址> (例:pod repo add FFSpecs https://github.com/wtj900/FFSpecs.git),创建本地索引库并和远程索引库做关联(注:本地索引库的名字建议和远程索引库起的名字一样)

3、 通过下面的方式可以查看本地索引库的物理地址

三、远程代码库

代码实际存放的远程仓库。

创建远程代码仓库(和创建远程索引库的方式一样),创建一个FFCategoryKit的远程代码库,用来存放FFCategory组件的代码。同样获取到FFCategoryKit组件的远程代码库地址。

四、本地代码库

1、 pod lib create <组件名>(例:pod lib create FFCategoryKit) 创建本地代码组件模版库(根据自身需求对下面的提示信息做选择就好)

2、编译运行通过看下效果。接着把需要的文件拖入到组件FFCategoryKit的Classes路径下。

3、接着cd到Example下进行pod install (把刚才拖入到classes里的文件夹pod进来)

4、 编译组件看是否报错,编译通过后需要修改podspecs索引文件,一般需要修改下面几个问题。

  • 修改版本号
  • 修改项目的简单概述和详细描述
  • 修改homepage和source地址
  • 添加依赖库

修改前的状态如下图所示:

修改对应的地方即可:

修改后如下:

如果有多个依赖,复制s.dependency 'AFNetworking'即可。

5、 编译运行通过后,提交组件到远程代码库并打tag.切换到FFCategoryKit目录下

  •  git add .

  • git commit -m ”xxx”

  • git remote add origin 远程代码仓库地址

  • git push origin master

  • git tag 版本号 (注:这里的版本号必须和podspec里写的版本号一致)

  • git push –tags

6、 cd 到最外层, 通过pod spec lint --verbose --allow-warnings 命令验证podspec索引文件。

错误说明:如果遇到下面的错误,就按照提示在终端输入echo "2.3" > .swift-version,然后在继续验证,验证通过后再通过 pod repo push 提交到远程索引仓库,如果没有遇到该问题自动略过.

7、 验证通过后,pod repo push <本地索引库> <索引文件名> --verbose --allow-warnings (例:pod repo push FFSpecs FFCategoryKit.podspec --verbose --allow-warnings)提交索引文件到远程索引库。

本地也可以查看已成功

8、 接下来回到工程修改podfile文件,把FFCategoryKit组件pod进来(注:需要在Podfile中指定组件远程索引库地址,如果不指定默认会从master的索引库查找就会报找不到组件)

Podfile文件修改如下 :

执行pod install:

业务组件拆分

1、首先远程和本地创建对应组件。

2、通过pod lib create在本地创建相应的代码模版,将相应代码拖入Classes路径下面。

3、修改.podspec索引文文件和Podfile文件后执行pod install。

4、创建对应的Target_Special文件(创建完之后执行一次pod insall)。

5、接下来就创建对应的FFSpecialKit_Category组件了。

6、创建对应的CTMediator+Special分类(创建分类时的存储路径需要注意一下)。

7、通过下面步骤提交创建的组件。

  • git add .

  • git commit -m “xxx”

  • git remote add origin 远程代码仓库地址

  • git push origin master

  • git tag 版本号 (注:这里的版本号必须和podspec里写的版本号一致)

  • git push –tags

8、通过pod spec lint FFSpecialKit.podspec --verbose --allow-warnings 验证索引文件的有效性,如果出错,尝试pod spec lint FFSpecialKit.podspec --verbose --allow-warnings --sources='https://github.com/wtj900/FFSpecs.git,https://github.com/CocoaPods/Specs.git'

9、通过pod repo push FFSpecs FFSpecialKit.podspec --verbose --allow-warnings --sources='https://github.com/wtj900/FFSpecs.git,https://github.com/CocoaPods/Specs.git'提交索引文件就完成了。