最近手头在做的事情是公司老项目转组件化的开发,采用的方案是CTMediator + pod私有库的方式,这也是现在比较流行的组合方式,当前公司的项目,要将大部分代码复用到多个类似的项目,所以组件化也是刚需,今天我们主要来讲怎么创建私有的pod库。
1. 建立repo库
如上图,默认我们的Cocoapods使用的是上面的来自GitHub的地址,下面的另一个就是我自己建立的用来推送私有库的repo地址。接下来我们看怎么操作:
- 1.首先需要一个远程的git仓库,这里我使用的是码云的仓库,不仅免费,对于国内用户来说,速度真的比GitHub快的不是一点。这个仓库可以是公开也可以是私有,因为他只是来存储我们提交的私有库的
podspec
文件,不需要很高的保密性,公开反而更方便团队成员查看和推送。 - 2. 终端执行
pod repo add SpecName ******.git
这里的SpecName自己设置,后面跟上自己刚才申请的git地址
执行成功后,可以使用pod repo
查看,可以看到自己刚才添加的repo
2. 建立pod私有库
-
1. 现在开始创建我们自己的私有pod仓库,在本地新建一个文件夹,终端
cd
到目录下,我们使用pod提供的模板来建一个空的项目,执行下面的命令
pod lib create YourLib
之后会出现几个选择,按自己的需求来就好了。执行完毕会自动打开这个工程,我们来看一下工程的目录:
- Example文件夹放置了我们的模板工程,可以在这里找到
.xcworkspace
文件来打开项目 - Assets文件夹用来放置图片等资源文件
- Classes文件夹用来放置你的代码
- Example文件夹放置了我们的模板工程,可以在这里找到
资源文件和代码文件替换完成后,进入Example
文件夹执行pod install
,模板工程会自动组织好文件。
-
2. 配置podspec文件
打开工程后,可以直接在工程中找到podspec
文件,这里填写的内容和语法什么的,和自己上传pod公开库是一样的,就不具体说明了,想要具体了解的,可以读这篇👉iOS上传自己的开源框架到Cocoapods,这里由于我们还没有建立私有库的git仓库,所以项目主页和代码路径先不填
PS:这里讲我遇到的一个坑,我的一个私有库依赖了静态库,我这里是分享组件依赖了
ShareSDK
,在私有库里怎么都不能引用头文件,桥接文件也不行,最后的解决方案是主工程导入ShareSDK,然后模块中使用CTMediator
调用
另一个不是坑,是个新的尝试,我在pod库的资源文件里放了一个
.xcassets
文件夹,验证过后可以使用,这样的话我们整理私有库里的图片文件就方便多了
-
3. 上传私有库到git
我们这里继续建一个私有的git仓库,一定要是私有(私有库嘛😂),然后cd
到我们的刚才私有库的根目录,与git关联
git remote add origin ****.git
git push origin master
这里是把本地项目添加到了仓库的origin/master
,你也可以使用SourceTree
这些工具,把删除了git文件夹的项目拖入对应的仓库目录,使用工具推送到远程仓库,这里推荐使用SourceTree
,对于这种基本的git操作这里就不赘述了。然后就是给分支节点打上对应的tag
然后推送,将对应的版本号和代码路径填入podspec
文件。
3. 将私有仓库推送到spec
- 1. 我们来验证
podspec
文件是否可用,先cd
到podspec文件所在的文件夹,执行
pod lib lint --allow-warnings ****.podspec
- 2. 验证通过,我们推送到我们的自定义spec
pod repo push MySpec MyLib.podspec --allow-warnings
这里的MySpec
、MyLib
改成自己对应的spec名和文件名,推送不成功的话,看一下报的错,自行解决。
4. 私有库使用
-
1. 像普通的pod库使用一样,在podfile文件添加
pod '****'
\ -
2. 在podfile文件最上部添加
source '*****spec.git'
注意这里的git仓库是私有库spec的地址,不是私有库工程
PS:这里有个自己遇到的坑,就是自己的私有库和pod公开库的一个项目重名了,要在自己的pod引用之后加上对应的地址
:git => '***.git'
。还是要尽量避免重名,加上声明地址会导致每次install或者update都要预下载,减慢pod速度。