iOS项目组件化搭建

作者: lattr | 来源:发表于2018-01-25 17:42 被阅读927次

项目组件化,顾名思义,就是将项目中的各个模块按照基础组建,功能组件,业务组件划分成一个个单独的模块,以使得各个模块间可以单独开发、测试、组合运行。

一般公司在天使轮后产品闭环已经确定,就需要实施组件化来应对A轮之后的业务扩张。

但也不是非得等到这一步才开始,如果在项目初期实施组件化,虽然代码量会有所增加,但是要把一个小项目组件化的难度也会小很多。

私有索引库

私有索引库的作用是存放.podSpec文件的。当你使用pod search AFN时,pod会在本地的索引库中进行搜索。

私有索引库分为本地私有索引库和远程私有索引库,它们是相互对应的。

  • 本地私有索引库


    本地索引库

可以发现只有一个master,这个是CocoaPods的本地索引库,但它不是私有的,只要安装过CocoaPods的电脑,都会有这么一个索引库。它对应CocoaPods的远程索引库

由于它不是私有的,所以我们需要自己创建一个私有索引库。目前GitHub的私有代码仓库是需要money的,我们可以选择码云码市等具有可以免费创建私有代码仓库的代码托管平台。操作和GitHub是一样的。就拿码市做例子。

  • 远程私有索引库

1.创建远程私有索引库。


创建远程私有索引库

2.复制远程索引库地址。


复制远程仓库地址

3.打开终端,将远程私有库关联到本地。
cd /Users/yufu/.cocoapods/repos
pod repo add LTSpec https://git.coding.net/lt1061961387/LTSpec.git

4.可以发现在Finder中多了一个LTSpec。这里就是我们用来存放组件的.podSpec文件的。


LTSpec私有库

私有代码仓库

代码仓库也分公私有,因为是公司的项目,不想暴露给别人,所以也需要建立私有代码仓库。

私有索引库也属于私有代码仓库,只是从功能上分开。一个是用来存放代码的,一个是用来存放.podSpec文件的。

私有代码仓库也分为本地私有代码库和远程私有代码库,它们也是相互对应的。

  • 本地私有代码库
    1.在我们的主工程的同级目录下,创建我们的组件工程,比如我的主工程在我的桌面的LTMainProject目录下,我想抽取主工程里的网络通信模块。使用CocoaPods的模板在终端输入:
    cd /Users/yufu/Desktop/LTMainProject
    pod lib create LTNetworking
    2.将自己抽取出的组件拷贝到创建的模板工程中

    抽取的组件代码
  • 远程私有代码仓库
    1.创建远程私有代码仓库

    网络通信组件的私有代码仓库
    2.修改组件的.podSpec文件
    修改文件
    3.提交本地私有模板组件代码到远程私有代码仓库,并打上tag标签
    cd /Users/yufu/Desktop/LTMainProject/LTNetworking
    git add .
    git commit -m '创建网络通信组件'
    git tag '0.1.0'
    git remote add origin git@git.coding.net:lt1061961387/LTNetworking.git
    git push -u origin master
    git push --tag
    4.对文件进行本地验证和远程验证
    cd /Users/yufu/Desktop/LTMainProject/LTNetworking
    pod lib lint --private
    pod spec lint --private
    5.将验证通过的.podSpec文件加入到本地私有索引库,并上传到远程私有索引库
    pod repo push LTSpec LTNetworking.podspec
    6.在LTSpec路径下就会出现LTNetworking
    LTNetworking.podspec
    7.查看远程私有索引库
    远程私有索引库
    8.使用终端查看自己的私有组件
    pod search LTNetworking
    pod search LTNetworking

现在就可以使用pod安装自己的私有组件了。

安装私有组件

打开终端一顿操作猛如虎
cd /Users/yufu/Desktop/LTMainProject/LTMainProject
pod init
vim Podfile
添加source ‘https://git.coding.net/lt1061961387/LTSpec.git’
添加pod 'LTNetworking'后退出
pod install

打开主工程发现组件已经乖乖躺在Pod里了


集成组件成功

集成完成。

相关文章

网友评论

  • 一往情深_b560:我看网上其他的都有提到router这个东西,在本文中是用不到吗
    lattr:这个是对工程进行解耦时用的中间件。一般有两种方式。1.使用OC独有的运行时,进行消息转发。比如CTMediator 。2,使用protocol/openURL进行路由。比如蘑菇街。具体使用何种方式对工程进行拆分,并不在本文讨论范畴。
  • 一往情深_b560:3.提交本地私有模板组件代码到远程私有代码仓库,并打上tag标签, 在这一部中,git remote add origin git@git.coding.net:lt1061961387/LTNetworking.git 这个命令式创建远程仓库,可是在这步之前你已经创建了远程仓库,我感觉这一部的这个命令没必要
    一往情深_b560:@iOS_Latte pod安装私有组件时, 从本地私有索引库中查找到索引文件后, 然后是从远程私有代码仓库下载并安装组件的吗
    lattr:@一往情深_b560 第三步的目的是将组件代码同步到远程代码,不是索引文件。第四步是验证索引文件,第五步是同步索引文件,顺序没错。
    一往情深_b560:@iOS_Latte 那你文章中的顺序写的有问题啊, 明明是需要验证了之后,没问题了才可以放入本地私有索引库和远程私有索引库, 按照你说的 ( 这一步的目的不是创建远程仓库,是将模板代码里的索引文件,先存到本地私有索引库,再将索引文件,同步到远程私有索引库。这里是同步,不是创建。), 明显是先存了, 再验证的。 ====》[3.提交本地私有模板组件代码到远程私有代码仓库,并打上tag标签 4.对文件进行本地验证和远程验证 ]
  • 一往情深_b560:安装私有组件,添加source ‘https://git.coding.net/lt1061961387/LTSpec.git’这里的地址我可不可以换成git@git.coding.net:lt1061961387/LTNetworking.git
    lattr:@一往情深_b560 1.可以换成SSH的方式,两种方式的区别只是在用户权限的验证方式上有区别而已。2.你自己开发时,可能不需要,但是当多人协作开发时,别人的电脑能找到你电脑里面的本地索引库吗?你们之间自然是通过这个远程索引库去同步组件代码的版本。
    一往情深_b560:@iOS_Latte 额 我贴错了, 我是想说 索引仓库的地址我可不可以换成 SSH 方式的地址, 另外是从本地索引库中查找组件的索引文件的,为什么要添加 远程索引库的地址,感觉没什么用啊
    lattr:不可以。LTNetworking.git是私有代码仓库,是存放组件代码的,LTSpec.git是私有索引仓库,是存放索引文件的,这两个概念你不要搞混了。
  • 一往情深_b560:4.对文件进行本地验证和远程验证
    cd /Users/yufu/Desktop/LTMainProject/LTNetworking
    pod lib lint --private
    pod spec lint --private. 你这一块验证的文件是什么
    lattr:就是模板里自动创建的.podSpec文件。验证该文件里面的配置是否合法,只有合法了才能放入本地私有索引库和远程私有索引库。不然是传不上去的。
  • 一往情深_b560:我整体理解是: 生成.podspec文件是为了使取出的组件支持 pod管理,(前提需要检验.podspec文件是否正确,没问题的话将.podspec文件添加到 远程索引库 中), 同时取出的组件代码也需要添加到远程代码仓库中,这样我们使用CocoaPods管理的时候,它会从远程索引库中去查找对应组件的 索引文件,通过索引文件可以找到组件代码所属的远程代码仓库,从而导入到自己的项目工程中,不知道理解的对不对
    lattr:查找索引文件其实是在本地查找的,在本地私有索引库里面,拷贝了远程私有索引库的文件。在没有网络的情况下,你使用pod search XXX,同样可以查询出来。这就是本地索引库存在的意义。
  • 一往情深_b560:本地私有代码库那里
    pod lib create LTNetworking 其实主要是生成 .podspec 描述文件吧, 我不太明白为什么还要将取出的组件拷贝到创建的模板工程中, 如果你是要将组件代码提交到远程代码仓库(/Users/yufu/Desktop/LTMainProject/LTNetworking) 这个路径也不是模板工程啊的路径啊(/Users/yufu/Desktop/LTNetworking,这个才是)。这一块看不明白,望作者能够解答我的迷惑
    lattr:1.我们要提交到远程私有代码仓库的是模板工程,模板工程的作用是对提取的代码进行测试用的,所以要添加到模板工程,也可直接理解成测试工程。
    2.我的主工程和模板工程在同级目录下,都在/Users/yufu/Desktop/LTMainProject路径下,可能我最外层文件夹/LTMainProject的命名让您产生了歧义。

本文标题:iOS项目组件化搭建

本文链接:https://www.haomeiwen.com/subject/zzvmaxtx.html