1. 前言
在项目的开发过程中我们经常会使用到很多的第三方框架,通过CocoaPods我们可以非常容易的去管理这些第三方库,那如何发布自己的第三方呢?我将用两篇文章的去详细介绍制作及部署过程,这是CocoaPods部署篇,该系列文章链接如下
2. CocoaPods部署
2.1. 在公有云上新建framework仓库,我这里用的是github.
2.2. git clone到本地
我这里选择和上面RFKitDemo工程同一个目录。将上面通过脚本生成的RFKit.framework 拷贝到RFkit这个本地仓库中
2.3 生成 podspec
cd + 工程目录
pod spec create RFkit
2.4 编辑 .podspec 文件
使用 Xcode 打开RFKit.podspec 文件,进行编辑。我是直接清空原有的内容找了个第三方,根据自己的情况写的。更多的细节 你可以参考大神的作品 AFNetworking编写
Pod::Spec.new do |s|
s.name = "RFKit"
s.version = "0.0.1"
s.summary = "this is s.summary s.summary s.summary s.summary s.summary s.summary"
s.description = <<-DESC
this is s.description s.descriptions.descriptions.descriptions.descriptions.descriptions.descriptions.descriptions.descriptions.descriptions.descriptions.description
DESC
s.homepage = "https://github.com/lala/RFKit"
s.license = "MIT"
s.author = { "lala" => "xxxx@qq.com" }
s.source = { :git => "https://github.com/lala/RFKit.git", :tag => "#{s.version}" }
s.requires_arc = true
s.platform = :ios, "11.0"
# 因为是发布自己的framework,这句话很重要
s.vendored_frameworks = "RFKit.framework"
end
2.5. 注册trunk账户,有账户的直接走第2.6
pod trunk register [你的邮箱地址] '[用户名]',eg:
pod trunk register xxxxx@qq.com 'lala' --description='macbook pro' --verbose
注册后 CocoaPods 会给你的邮箱发送验证链接,点击后就注册成功了。可以用pod trunk me 命令查看自己的注册信息。
2.6. 验证本地的podspec文件
使用 pod spec lint,如果warnings 可以忽略,但是error就一定处理,具体什么问题,google下一般都能解决,打印绿色的 xxxx.podspec passed validation,就代表已经验证成功。--allow-warnings代表允许有警告
pod spec lint --allow-warnings
...
...
...
RFKit.podspec passed validation.//passed validation 代表通过验证
2.7. 提交podspec文件
使用 truk push 命令,eg
pod trunk push RFKit.podspec
...
...
...
出现下面打印表示truk push spec成功
----------------------------------------------------------
🎉 Congrats
🚀 RFKit (0.0.1) successfully published
📅 September 16th, 23:52
🌎 https://cocoapods.org/pods/RFKit //这个就是库被CocoaPods收录的地址
👍 Tell your friends!
2.8. 验证
使用 pod search xxxx命令,搜索下你刚push的库是否存在。如果搜不到,请看下文坑点第二条
pod search RFKit
-> RFKit (0.0.1)
this is s.summary s.summary s.summary s.summary s.summary s.summary
pod 'RFKit', '~> 0.0.2'
- Homepage: https://github.com/lala/RFKit
- Source: https://github.com/lala/RFKit.git
- Versions: 0.0.2 [trunk repo]
2.9. 使用
自己新建一个工程或者在原有工程的podfile文件里面加上 pod RFKit.到此cocoapods就部署完毕了。如果您对framework制作感性兴趣,请看这篇文章 iOS - framework制作|CocoaPods部署- (1)framework制作
3. 坑点
3.1. 如果发布的库swift版本的
在提交 spec 文件前,如果发布的是 Swift 框架,需要指定 Swift 的版本,否则会报错,执行 echo "4.0" > .swift-version 即可指定版本为 4.0。
3.2. CocoaPods trunk push发布成功后无法pod search到
明明已经 trunk push成功了,但是在pod search却找不到。这是因为CocoaPods本地search_index.json中没有包含你刚trunk pus的库。所以我们需要更新这个json文件
-
- 删除 search_index.json 文件。
rm ~/Library/Caches/CocoaPods/search_index.json
-
- 再次此执行 pod search,CocoaPods会自动在本地重新生成search_index.json文件,并search 你想要的库。eg:
pod search RFKit
-> TestPodF (0.0.2)
this is s.summary s.summary s.summary s.summary s.summary s.summary
pod 'TestPodF', '~> 0.0.2'
- Homepage: https://github.com/lala/RFKit
- Source: https://github.com/lala/RFKit.git
- Versions: 0.0.2 [trunk repo]
pod search TestPodF这步可能会报错,重新执行一遍就可以,该步骤建议在科学上网的环境下进行
4. 相关技巧
4.1. pod使用指定版本
pod 'AFNetworking' //不显式指定依赖库版本,表示每次都获取最新版本
pod 'AFNetworking', '~>0' //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本
pod 'AFNetworking', '~> 0.1.2' //使用大于等于0.1.2但小于0.2的版本
pod 'AFNetworking', '~>0.1' //使用大于等于0.1但小于1.0的版本
pod 'AFNetworking', '2.0' //只使用2.0版本
pod 'AFNetworking', '= 2.0' //只使用2.0版本
pod 'AFNetworking', '> 2.0' //使用高于2.0的版本
pod 'AFNetworking', '>= 2.0' //使用大于或等于2.0的版本
pod 'AFNetworking', '< 2.0' //使用小于2.0的版本
pod 'AFNetworking', '<= 2.0' //使用小于或等于2.0的版本
pod 'AFNetworking', :git => 'http://gitlab.xxxx.com/AFNetworking.git', :branch => 'R20161010' //指定分支
pod 'AFNetworking', :path => '../AFNetworking' //指定本地库
4.2. Git打Tag相关操作
4.2.1. 打标签
//git tag 是命令
//-a 0.1.3是增加 名为0.1.3的标签
//-m 后面跟着的是标签的注释
git tag -a 0.1.3 -m “Release version 0.1.3″
4.2.2. 具体完整操作,例如在一次修改完成后
git add .
git commit -m "fix:some bugs"
git tag -a 0.1.3 -m "Release version 0.1.3"
git push origin master //将改动提交到远程仓库
git push origin --tags //同步标签
–tags参数表示提交所有tag至服务器端,普通的git push origin master操作不会推送标签到服务器端
4.2.3. 切换到已有Tag
git tag --list // 查看已有tag列表
git checkout [tag/branch/commit] // 切换到指定tag/branch/commit都是此命令
4.2.4. 删除标签的命令
git tag -d 0.1.3
4.2.5. 删除远端服务器的标签
git push origin :refs/tags/0.1.3