发布自己的代码到CocoaPods

##如何发布自己的开源代码到CocoaPods
在开发过程中,经常会使用到第三框架,我们通过一个pod install命令,很方便的就将第三方框架加到我们自己的项目中。

如果我们也想将自己写的组件或库开源出去,让别人也可以通过pod install命令安装自己的框架该怎么做呢?

如果你现在对CocoaPods还不太了解,推荐你看一看这篇文章:用CocoaPods做iOS程序的依赖管理

第一步 注册trunk

在注册trunk之前,我们需要确认当前的CocoaPods版本是否足够新。trunk需要pod在0.33及以上版本,如果你不满足要求,打开Terminal使用ruby的gem命令更新pod:

sudo gem install cocoapods

注册trunk:

pod trunk register 邮箱地址@ "用户名"

用户名这里我是用的github上的用户名

注册成功之后

pod trunk me 

可以查询到你的个人信息:邮箱,姓名,注册时间,开源库,session

添加其他维护者(如果你的pod是由多人维护的,你也可以添加其他维护者)

pod trunk add-owner 名字 邮件@

第二步 建立PodSpec文件并通过trunk推送给CocoaPods服务器

通过下面命令可以创建一个PodSpec文件

pod spec create 文件名

执行完该命令之后会在工程目录生成XPRACSignal.podspec文件,然后编辑这个文件!里面注释很多

Pod::Spec.new do |s|
  s.name             = "ongfei"    #名称
  s.version          = "0.0.1"             #版本号
  s.summary          = "Just Testing."     #简短介绍,下面是详细介绍
  ##s.description      = <<-DESC
                       Testing Private Podspec.

                       * Markdown format.
                       * Don't worry about the indent, we strip it!
                       DESC
  s.homepage          = "https://github.com/ongfei/DfPodTest"  #主页,这里要填写可以访问到的地址,不然验证不通过
  # s.screenshots     = "www.example.com/screenshots_1", "www.example.com/screenshots_2"           #截图
  s.license          = 'MIT'   #开源协议
  s.author           = { "ongfei" => "ong_fei@163.com" }  #作者信息
  s.source           = { :git => "https://github.com/ongfei/DfPodTest.git", :tag => s.version.to_s }     #项目地址,这里不支持ssh的地址,验证不通过,只支持HTTP和HTTPS,最好使用HTTPS
  # s.social_media_url = 'https://twitter.com/<twitter_username>'                       #多媒体介绍地址

  s.platform     = :ios, '7.0'            #支持的平台及版本
  s.requires_arc = true                   #是否使用ARC,如果指定具体文件,则具体的问题使用ARC

  s.source_files = 'ToolTest/*.{h,m}'     #代码源文件地址,**/*表示Classes目录及其子目录下所有文件,如果有多个目录下则用逗号分开,如果需要在项目中分组显示,这里也要做相应的设置
  ##s.resource_bundles = {
    'PodTestLibrary' => ['Pod/Assets/*.png']
  }                                       #资源文件地址
  s.frameworks = 'UIKit'                  #所需的framework,多个用逗号隔开
  s.dependency 'FMDB', '~> 2.5'   #依赖关系,该项目所依赖的其他库,如果有多个需要填写多个s.dependency
end


编辑完podspec文件后,需要验证一下这个文件是否可用,验证需要执行一下命令

pod lib lint

当出现 PodTestLibrary passed validation 的时候 说明 podspec可用

如果出现了错误可以看下这篇文章pod创建问题

提交code到git仓库中,并打上tag版本号

git add -A
git commit -m "first commit"
git push origin master
git tag '1.0.0' 
git push --tags 

公开提交到CocoaPods trunk

pod trunk push podspec文件名

如果没有错误 就会提示 successfully published
说明cocoapod库已接收

这个时候要更新一下本地的依赖库

pod setup

然后用pod search 查询一下吧

提交到私有库

首先创建项目存放私有Repo源

本地添加私有源 pod repo add 私有源 私有源地址

1
2
3
4
5
pod repo push 私有源 podspec文件名 --verbose --use-libraries --allow-warnings
--verbose:有些非语法错误是不会给出错误原因的,这个时候可以使用--verbose来查看详细的验证过程来帮助定位错误。
--use-libraries:表示使用静态库或者是framework,这里主要是解决当我们依赖一些framework库后校验提示找不到库的时候用到。
--allow-warnings:表示允许警告。

常见错误 :

  1. Xcode编译没有问题,但是pod repo push时总是提示”cocoapods specification does not validate”这个问题,是由于执行”pod spec lint”有warning的项目,cocoapods不通过lint,这个时候可以通过在pod repo push命令添加”–allow-warnings”标识,这样对于有warning的项目同样可以通过pod的lint

  2. Encountered an unknown error (Unable to find a specification for xxxx depended upon by xxxx

    我们的 podspec 文件在写依赖的时候也无法在对应的库后面添加源地址。但是我们可以在验证和提交的时候多写一个参数。

    那就是--sources 参数,需要注意的是给--sources 赋值的时候,一定也要带上官方的源。

    1
    pod lib lint --no-clean --verbose --allow-warnings --use-libraries --sources=https://xxx,https://github.com/CocoaPods/Specs
  3. 如果删除了文件,报错还是那个文件未找到。可能是缓存的原因,改下tag版本号即可解决。

更多错误记录

使用需要指定源地址

1
source '私有源地址.git'

关于tag

1
2
3
4
5
git tag -a '0.0.1' -m '描述'//添加tag
git tag //查看tag
git tag -d '0.0.1'//删除tag
git push --tags//将本地创建的tag推到远程库
git push origin :0.0.1//删除tag