CocoaPods库的种类
创建一个其他人用pod也能够搜索到的库。这种库分为两种:一种是公有的,所有人都能访问到;一种是私有需要Podfile中提供source才能使用。
下面是创建私有库的原理图
想要创建私有库,首先要搞清楚CocoaPods的原理,其功能是让创建一个工程导入所有项目需要依赖的库,然后让项目依赖这个工程。这样项目只需要导入这一个工程,就能使用所有需要的第三方库。简化了项目的集成的复杂性。详细的原理可以参考这篇文章。
创建私有库
首先要选择一个位置用来存放podspec文件,该文件的作用就是记录你的私有库的信息,包含版本、位置等。
另外还要有一个位置来存放私有库的内容,私有库存放位置信息就被保存在上面的podspec文件中。
所以一共会有两个仓库,一个用来保存podspec,另一个用来保存私有库。
提供仓库保存的平台有很多,github、gitlab、码云等等,由于github私有仓库收费,故用码云来创建私有库。但原理都是一样的。
1.创建版本记录仓库
创建成功之后,打开terminal把这个描述仓库clone到本地。安装了CocoaPods的电脑都会在用户根目录下创建一个.cocoapods文件夹,来存放github上面所有的公开库记录仓库。repos下本来只有master文件夹,另外两个是创建的记录仓库。
执行pod repo add testRepo https://gitee.com/zhouzheren/TestRepo.git
指令将记录仓库添加到本地电脑。
打开目录发现里面只有两个文件,.git隐藏文件夹和README.md文件。
2.创建代码库
步骤同创建描述仓库相同,不过需要按照图中勾选几项。创建好之后将其clone到本地,添加仓库名.podspec
、.swift-version
(针对swift)两个文件。
添加一个TestClass类测试私有库。使用下图的指令把内容上传到私有库。非常重要的一点是完成对TestClass的修改之后,千万不要忘记去修改.podspec文件中的s.version,要设置高于0.1.0这个版本。当然如果有想要描述的内容,也要在描述项目中去添加。
完成之后还有一步很重要的操作:添加tag.
tag值与上传的.podspec文件中s.version保持一致,tag值是用来区分同一个私有库不同的版本的。
2.2编辑.podspec文件
上面clone代码库的图片中,包含了一个指令创建的podspec文件注释内容非常多,可以复制下面的内容来创建。
Pod::Spec.new do |s|
s.name = "TestFramework" # 项目名称
s.version = "0.1.0" # 版本号 与 你仓库的tag值对应
s.license = "MIT" # 开源证书
s.summary = "私人pod代码" # 项目简介
s.homepage = "https://gitee.com/zhouzheren/TestFramework" # 仓库的主页
s.source = { :git => "https://gitee.com/zhouzheren/TestFramework.git", :tag => "#{0.1.0}" }#你的仓库地址,不能用SSH地址
s.source_files = "TestFramework/*/"
s.requires_arc = true # 是否启用ARC
s.platform = :ios, "7.0" #平台及支持的最低版本
s.author = { "蜗牛" => "a595429717@163.com" } # 作者信息
s.social_media_url = "http://www.jianshu.com/u/611e4882e4dc" # 个人主页
end
pod spec create TestFramework
命令可以创建TestFramework.podspec文件,但注释比较的多,可以精简为上面的内容。
名称 | 作用 |
---|---|
s.name | 是私有库的名字,因为写的Demo是TestFramework,所以使用这个 |
s.version | 当前私有库版本默认值是0.1.0,每次修改私有库都需要增加这个值 |
s.summary | 总结,你的私有库的主要功能是什么 |
s.description | 详细的描述,可以写当次修改的内容有哪些,增加了什么功能 |
s.source_files | 私有库文件路径,会用到哪些文件 |
s.homepage | 是主页的地址,私有库的主页地址 |
s.source | 私有库内容clone地址 |
pod lib lint
指令可以测试编辑的.podspec文件是否正确。使用这个命令先要cd到.podspec目录。提示了错误就要根据提示内容修改,当修改到没有error信息只有warning信息的时候就可以使用pod lib lint --allow-warnings
指令。
绿色文字表示.podspec文件是合法的,这就算编辑完成了。可以将.podspec文件上传到描述仓库。
testRepo是在.cocoapods文件夹里的目录,TestFramework.podspec版本描述库文件的名字。
.podspec文件上传完毕之后,可以使用pod search 私有库名字
在终端搜索这个库。
3.使用私有库
首先要编辑Podfile的内容,使用了私有库的Podfile需要指定source,详情见下图。
然后cd到对应的工程目录下,使用pod install
,安装完成pod之后,可以去工程中调用对应的测试文件。如果使用#import不到对应的类,可以尝试先cmd+b编译一下对应的项目,然后再来#import。
4.如果更新维护私有库
第一步:修改私有库内容,修改.podspec文件;将这些修改push到私有库中。
第二步:打上tag,tag值保持和.podspec中的version相同,上传tag。
第三步:利用pod repo push 本地repo名 .podspec文件
指令更新本地repo,同时上传.podspec文件到描述仓。
如果希望把别人更新的repo拉到本地,可以使用pod repo update repo名字
命令。
tips
1.pod install 之后,测试私有库内容的时候,使用#import不到对应的类,可以先cmd +b 编译一下项目。
2.podspec文件上传了两次,一次是修改私有库的时候,修改.podspec,然后一起上传到私有库中;另一次是给私有库打上tag之后,将.podspec上传到描述仓库。
- 每次修改完.podspec文件之后,使用了私有库的项目需要执行pod update,这样才能拿到最新的私有库内容。当然如果Podfile文件中指定了引用私有库的版本,就不需要update了,除非修改Podfile文件然后updata。
4.多人协同维护私有库时,更新本地私有库的repo,pod repo update repo名字
如何删除一个私有库呢?
私有库如何包含图片等资源文件?
私有库包含其他私有库?
问题集合
帮同事上传.podspec的时候出现这个错误。
我的步骤是先帮他打出framework,并把库放到一级目录下面,然后修改.podspec文件中的版本号到0.1.1,然后把所有的内容push到代码库中并贴上tag0.1.1。
之后忽然发现s.ios.vendored_frameworks = "ZLLBanner.framework"
少了一个下划线,应该是s.ios.vendored_frameworks = "ZLL_Banner.framework"
。重新修改了.podspec文件并push。
怀疑是贴上tag之后,又传了代码导致的问题。于是撤销0.1.1的tag。在最新的一次提交上贴tag。最后就成功了。
常用命令集合
name | function |
---|---|
git clone 私有库地址 | 将server上的仓库复制到本地电脑上 |
pod repo add repoName podspec地址 | 在.cocoapods目录下增加一个repo |
echo "3.0" > .swifit-version | 创建一个.swift-version文件,swift版本是3.0 |
pod spec create name.podspec | 创建一个name.podspec文件 |
git add . | 将当前目录下所有的修改都添加到git缓存 |
git commit -s -m "commit description " | commit这次的修改,并添加描述 |
git push origin master | 将修改的内容push到server的master分支上 |
git tag | 查看当前目录的所有tag记录 |
git tag -m "description " "version" | 给修改增加一个tag,包含描述信息,和tag的版本号 |
git push --tags | 将tag push到server仓库里 |
pod lib lint (--allow-warnings) | 编译name.podspec文件,检验内容是否合法 |
pod repo push repoName name.podspec | 上传name.podspec文件到描述仓库里,并更新本地repo目录 |
pod search 私有库name | 查询私有库信息 |
pod install | 为项目安装cocoapods |
pod outdated | 查看本地项目中所有已安装的库的版本 |
pod repo update repoName | 更新本地私有库的repo |
参考资料
CocoaPods 私有仓库的创建(超详细)
实现CocoaPods的subspec分支功能
使用Cocoapods创建私有podspec
Cocoapods使用私有库中遇到的坑
使用私有库中遇到的坑
使用Cocoapods创建私有podspec