最近在看模块化相关知识,里面用到代码仓库。在这里把流程和遇到的坑做个记录总结。
大致流程是给自己想要添加到pods的工程添加一个podspec描述文件,然后把这个文件添加到自己的索引库。索引库的作用就是告诉cocoapods如何才能找到自己的私有库,就像一本书的目录。所以,我们至少需要两个库(这里拿github举例 github最近刚提供免费私有库),一个存放索引,一个存放代码,当然索引库中可以放多个代码库的索引。(open ~/.cocoapods/repos可以看到已有的库索引)
流程
-
创建>校验>提交 podspec文件(用来描述你的库):
为已有项目创建描述文件:(例如远程代码仓库地址为https://example.git 这里只是一个例子)
- cd到文件目录下(一般与.xcodeproj文件同目录)
- 执行命令行pod spec create podspec文件名 (例如文件命名为 TestLib.podspec)
- 编辑podspec:
(1)s.name podspec文件名(这里应该是TestLib)
(2)s.version 版本号
(3)s.summary 摘要
(4)s.description 描述 一定要比summary长
(5)s.homepage 代码库主页(s.source 一般是https://example 不带.git)
(6)s.license开源协议
(7)s.author 作者信息
(8)s.source 代码地址 (这里是https://example.git) tag: 与s.version一致
(9)s.ios.deployment_target 目标版本与工程中的Development Target 一致
(10)s.source_files 库资源文件的路径,该路径是相对于podspec文件而言的
‘’:表示匹配路径文件夹下所有文件。
‘**’:表示匹配所有子目录。
'.{h,m}’:表示匹配路径下的所有.h 和 .m 文件。
例如:s.source_files = 'Lib/**/*.{h,m}'表示匹配与.podspec文件同目录下的Lib文件夹和Lib文件夹的子文件夹中的所有.h 和 .m文件 - 把podspec文件同步到远程代码库(可以用命令行push 也可以用工具push)
- 给代码打标签: git tag ‘版本号’ 该版本号要与podspec文件中的s.version一致
- 提交标签(把标签推送到远程)git push --tags(可以看到代码仓库中多一个release版本)
- pod lib lint --allow-warnings 本地校验podspec
- pod spec lint --allow-warnings 校验远程podspec文件
-
创建索引库
- 在远程创建一个索引库Lib(例:https://index.git)
- 把索引库添加到本地的repo仓库中:(可能需要等一会儿)
pod repo add Lib https://index.git
-
把自己的私有库的描述文件添加到索引中
pod repo push Lib LibTest.podspec(公有pod库的话不需要创建索引库 因为已经有master库了 用pod trunk push LibTest.podspec 将自己的库推到master库 前提是已经注册过trunk了,注册trunk相关内容可以 ) -
使用时 在Podfile文件前面添加上source https://index.git
坑
- s.ios.deployment_target = '版本号’要与工程中的Development Target保持一致,不然会报[iOS] file patterns: The
source_files
pattern did not match any file.(感觉报错给出的提示很奇怪) - pod spec lint 文件名.podspec 之前要先把本地代码仓库的代码推送到远端 不然可能会出现:The
source_files
pattern did not match any file错误 - 工程必须有 LICENSE文件否则会报错
- s.source_files是以.podspec文件作为参考