创建CocoaPods私有库首先要明白几个概念:
-
索引文件:一个组件化好的项目对外公开的可以访问下载代码进行开发的公开文件,通过索引文件可以找到代码的地址下载。如果有某个组件化组件需要别人访问那么需要把索引文件公开,这样别人才能访问。每一个私有库都有一个索引文件
项目名称.podspec
-
索引库:一个存放索引文件的仓库。如CocoaPods下就有一个master索引库,这库里面有所有项目中所下载过的第三方库。如果这索引库对外公开别人可以访问这个索引库下所有的库。: 和远端索引库
索引库也分本地索引库和远端索引库
- 本地索引库:存放你下载过的所有的第三方的库索引文件的库。如安装过CocoaPods就会有一个master本地索引库,这个库里面保存了所有用CocoaPods下载过的第三方库的索引文件。可以用
pod repo
命令查看。

- 远端索引库: 和本地索引库一样,只是它是放带服务器上的索引库。只有放到服务器上才能让别人访问下载进行开发。
代码库分为本地代码库和远端代码库:一般创建私有库的时候都会直接生成一个可以独立运行的项目。
一. 创建远端代码库。
远端代码库和本地代码库名称尽量保持一致
1.把项目的地址粘贴到某处,等下会用。会填写到.podspec
文件下的s.source
栏。



一. 创建本地代码库
1. 首先cd
到想要创建代码库的目录下,执行pod lib create 项目名称
命令。
leon:~ huanghaipo$ cd Desktop/
leon:Desktop huanghaipo$ pod lib create HBPrivateLibrary
2. 回车后会拷贝远端的代码到私有库中,然后会询问一些问题,回答过问题,创建成功会自动打开项目。
不区分大小写
//运行平台
What platform do you want to use?? [ iOS / macOS ]
> iOS
//用什么语言写代码
What language do you want to use?? [ Swift / ObjC ]
> ObjC
//这个私有库是不是个可以运行的程序
Would you like to include a demo application with your library? [ Yes / No ]
> Yes
//用那个测试框架
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
//要不要做视图测试
Would you like to do view based testing? [ Yes / No ]
> No
//类名的前缀
What is your class prefix?
> HB
3. 把代码拖到项目中。找到创建好的项目,拖一些写好的类放到里面我写的是页面跳转,等会测试是否成功。
需要注意的是Classes文件一般都是放代码。Assets文件放资源文件图片XIB之类的。

4. cd
到项目中的Example
目录下,执行pod install
。把刚才添加的代码pod
到项目中。
leon:Desktop huanghaipo$ cd HBPrivateLibrary/
leon:HBPrivateLibrary huanghaipo$ cd Example/
leon:Example huanghaipo$ pod install
pod完成 编译看看是否成功

5. 编辑当前库的项目名.podspec
文件,
-
s.homepage 写等会创建的代码库的地址,记得修改说不定会报错。
-
s.source 远端代码库的地址也是等会申请

三. 创建远端索引库。
本地索引库和远端索引库的名称尽量一致 记得选中创建readme.me文件,不然到后面提交索引库的时候会遇到一个很坑爹的问题。
完成后复制地址。

四. 创建本地索引库。
- 通过
pod repo add 本地索引库名称 远端索引库的地址
命令创建本地索引库并和远端索引库关联。或者通过pod repo
命令查看本地已有的索引库。

通过pod repo
命令查看本地索引库是否创建成功并且和远端关联。

五. 运行项目查看项目是否能运行。
首先执行pod install
。如果在第二步时项目能编译成功这一步直接可以略过,都无所谓。


把刚才添加的类设置为启动页面。

能跳转,证明代码没问题,项目也能跑。

六. 发布项目。
1. 提交代码
提交代码是在当前项目的根目录下不是在Example
目录下。
# 保存代码
$ git add .
# 先提交到本地仓库,并填写提交描述
$ git commit -a -m "项目组件化第一步创建私有库"
# 添加远程地址,即上面创建码云项目的地址 将本地仓库和远程仓库绑定,如果绑定过不用执行这步命令
git remote add origin https://github.com/HuangHaiPo/HBPrivateLibrary.git
# git pull origin maste可能会失败 ,提示:fatal: refusing to merge unrelated histories 原因是远程仓库origin上的分支master和本地分支master被Git认为是不同的仓库,所以不能直接合并,需要添加 --allow-unrelated-histories 如果已经绑定过这
$ git pull origin master --allow-unrelated-histories
# 推送项目到master分支上
$ git push origin master
# 提交版本号 建议和 podspec文件里面写的版本号一致
$ git tag 0.0.1
# push到远程分支 或者执行git push --tags
$ git push origin 0.0.1


2. 验证pod 项目名称.podspec文件填写是否正确。
为了保证提交代码时不出什么幺蛾子,我们需要验证podspec
文件填写是否正确。
1). 本地验证 不会验证 s.source 中的tag
$ pod lib lint
验证时有两个警告一个是因为简要描述没有改,一个是说不能用SSH。修改描述,替换成http再次验证成功。

2). 远程验证会验证 s.source 中的tag,如果此时没有打上相应的标签则会报。
$ pod spec lint
3). 验证podspec文件可选参数
- 如果验证的是私有库,可以在后面加上--private。
- 如果因为waring验证不通过可以选择加上 --allow-warnings 来忽略警告,或者验证出错,而 project build success 可以尝试添加这个参数。
- 加上 --verbose 可以查看验证过程反馈信息等。
- 加上 --source 如果依赖的库是一个私有仓库,可以使用这个参数指定私有仓库的 podspec 仓库,除此之外最好将 cocoapods 公有库的 source 也指定一下 。
- --no-clean
例子
远程验证同理只是lib换成spec
$ pod lib lint --private --verbose --allow-warnings --sources='https://github.com/CocoaPods/Specs.git,远端私有索引仓库的地址顺序无所谓'
4) .验证提交一块
这一步完成 私有库就算完成了 可以使用
pod repo push 本地索引库 要提交的podspec --verbose --allow-warnings --use-libraries --sources='https://github.com/CocoaPods/Specs.git,远端索引库地址'

3. 验证通过后,终端执行下方命令提交索引文件到远端索引库。
如果执行的验证提交一块可以忽略这一步
pod repo push 本地索引库(上面第四步创建的本地索引库 如我的testSpecs) 索引文件名(项目中的索引文件名如我的HBPrivateLibrary.podspec) --verbose --allow-warnings`命令
在提交代码这点遇到个BUG,我创建远端索引库的时候没有创建readme.md文件,也就是是个空仓库。在提交的时候一直报错卡在更新索引库这步。网上找了半天也没找到原因,最后重新生成了一个仓库,添加了readme.md文件。在去提交索引库就可以了。先前那个提交一直报错的那个,我复制了个readme.md文件提交上去,然后再去提交索引库就可以了。所以创建索引库的时候一定不能是个空仓库里面有啥都行就是不能为空。
Updating the `testSpecs' repo
[!] /usr/local/bin/git -C /Users/huanghaipo/.cocoapods/repos/testSpecs pull
Your configuration specifies to merge with the ref 'refs/heads/master'
from the remote, but no such ref was fetched.

上传完成,至于里面的警告改不改都行。

到这就完成了,新创建个项目导入刚才提交的私有库,验证下。
8. 验证私有库
新建项目,通过pod init
初始化项目,修改Podfile
文件执行pod install
命令。



网友评论