组件化流程
准备了解工作:
什么是组件化?适合什么样的场景?组件化其实就是将我们的业务代码或者一些基础支撑代码变成一个私有库,通过 pod 来拉取代码。这样在项目中我可以随意的加入或者删除别人的代码,也可以指定其他代码的版本
比如我们在一般的开发中都会使用到AFNetworking,我们可以理解为我们的业务代码就是以这种方式存在的,想用的时候就pod 进来不想用就更改一下podfile 把这个库拿掉,是不是很方便
组件化的好处在这里就不多做介绍,感兴趣的同学自行查阅首先我们需要了解 pod 的工作原理是什么样子的,这样对我们后面的流程化操作会有更好的了解,下面我们先看一张图
pod拉取代码的原理:
- pod 有一个类似书本的目录的一个仓库,当我们pod search 的时候它会在那个仓库里取寻找,有没有这个东西
- 跟pod search 一样 当我们pod install 的时候 它也会在那个目录里去寻找这个库,当找到这个库,通过他的git地址clone到我们本地仓库,当然,这里还有一些本地缓存的策略,这里也不多做介绍
组件化操作流程
Step 1
创建远程代码仓库
首先我们要在我们的私有git服务器里创建一个远程仓库,比如,我们用的是GitLab,那就打开,直接NewProjects,这时候远程是一个空的代码仓库叫 MyTest
Step 2
创建远程描述文件的仓库(目录)
还是NewProjects,这个名字我们可以叫做iOSPodSpecs,这里面存放的是我们的描述文件,目前也是空的
加入本地pod 搜索的索引(加搜索目录)
我们先看一下我们本地的目录都有啥pod repo list
我们可以看到,这里有两个描述文件的索引仓库(目录),那我们在加一个,刚刚我们创建的那个iOSPodSpecs仓库
pod repo add iOSSpecs http://192.168.10.81/iOSManager/iOSPodSpecs.git pod repo list
Step 3
克隆github 上的pod 示例
假如我要创建的组件叫做MyProject, 先创建一个pod 的示例pod lib create MyProject
然后根据自己需求去选择相应的配置,最后生成一个工程
PS(可忽略)
当然这个示例我们可以从github上拉下来,放在我们的私有git 上,更改它的配置,就不用每一次都需选择这些配置了。
https://github.com/CocoaPods/pod-template.git把这个template拉下来然后修改里面的配置文件,然后放到我们的远程仓库里,在pod lib create 的时候后面放上我们私有库示例的地址就可以里,这样我们就不用一个一个去选择了
Go On
最后生成这样的东西
将上面生成的东西全部推送到远程仓库
(1).把之前创建的远程空的仓库 MyTest ,clone 到本地
(2).将MyProject下面的所有东西 拷贝进去git clone http://192.168.10.81/iOSManager/MyTest.git MyTest
Classes里面就是我们要放代码的地方
(3).修改描述文件,将本地的代码push 到远程仓库
我们打开workspace 在左边的目录中找到以.podspec的文件然后打开
下图标出的地方 就是我们需要 修改的东西
其中summary 和description 必须修改一下,内容随意,name 改成什么都可以,这几个东西只跟pod search 有关
homepage 和source 修改成我们私有库的地址和git 地址;比如说MyTest 的git地址是:http://192.168.10.81/iOSManager/MyTest.git;homepage 把git 去掉就可以了
修改之后
修改完描述文件以后,我们就可以 push 到远程仓库并且打一个tag 上去
git add . git commit -m 'init pod podspec' git pull git push git tag -a 0.0.1 -m desc git push origin --tags
注意这里的 s.version 的版本号 在你的远程仓库一定要存在,要不然在后面验证描述文件的时候,远程如果没有那个tag,会不通过
Step 5
推送描述文件 到我们远程私有描述文件仓库里(目录)
cd 到本地仓库里,里面对应会有一个 .podspec 的文件这个就是描述文件
#这里是验证你的描述文件格式是否正确,如果不正确是推不上去的 pod lib lint xxx.podspec --allow-warnings
这个意思就是你的描述文件是通过了验证,下面就可以把描述文件推送到我们的目录里了,其中 --allow-warnings 建议一直带上,这个意思是忽略你工程中的一些警告,要不描述文件也是通过不了的pod repo push iOSSpecs XXX.podspec --allow-warnings
LOOK! 这样描述文件就推送成功了,值得注意的是这里push 后面的名称 是我们step2 的时候加的pod索引的名称
FINAL
至此,我们所有的工作就都做完了,我们用 **pod search **搜索一下看能不能找到MyProject这个库
pod search MyProject
搜索到了,这样你在其他的工程中直接通过pod 就可以拉到我的代码
如果搜索不到就执行一下面的命令再搜索
rm ~/Library/Caches/CocoaPods/search_index.json
PS
这里很多细节没有说,比如描述文件的写法,podspec 验证命令的其他状况,这些东西需要大家在实际的操作中自己摸索和总结,在这里我就不多做阐述!