iOS - framework制作|CocoaPods部署- (2)CocoaPods部署

1,471 阅读4分钟

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文件

    1. 删除 search_index.json 文件。
rm ~/Library/Caches/CocoaPods/search_index.json
    1. 再次此执行 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

参考