CocoaPods 公用Pod库的创建

1,053 阅读3分钟

1. CocoaPods账户创建

注册trunk

pod trunk register 邮箱  '用户名' --verbose
注意:QQ邮箱可能收不到邮件,换了两个QQ邮箱,最终用了163邮箱。

去邮箱中打开邮件,点击链接,即注册成功

pod trunk me
// 查看注册信息,也可以查看自己发布的Pods

2. 创建库文件并上传到GitHub

2.1 创建私有模板库

GitHub创建工程,这里以DDBaseModule为例,创建一个基础库,添加一些常用的宏和分类。

2.2 创建模板库

在你想要放的位置创建一个和组件同名的文件夹,比如DDBaseModule,然后使用下面命令:

cd DDBaseModule的路径
pod lib create DDBaseModule

然后根据情况,配置信息:

2.3 添加组件内容

创建完成后会自动打开Example项目,然后将库文件的相关代码文件拖到Class中替换ReplaceMe.m文件。

2.4 安装与测试本地库

Podfile文件中:

 pod 'DDBaseModule', :path => '../'

模板库已经在Podfile中指定了DDBaseModule.podspec的位置,使组件DDBaseModule可以正常安装使用和测试。

然后,cdExample路径下,执行下面命令:

pod install

此时,我们已经将本地的组件添加到Example中了,接下来可以进行单元测试,确保组件的正常使用。

2.5 修改Specs并验证

  • 修改Specs文件 在测试确保组件的正常后,需要修改Specs文件,

主要修改内容

  s.name             = 'DDBaseModule'
  s.version          = '0.1.0'
  s.summary          = 'DDBaseModule.'
  s.description      = <<-DESC
DDBaseModule是基础组件库,包括分类和常用工具
                       DESC
  s.homepage         = 'https://github.com/DongliangZhao/DDBaseModule'
  s.source           = { :git => 'https://github.com/DongliangZhao/DDBaseModule.git', :tag => s.version.to_s }
  s.source_files = 'LGMacroAndCategoryModule/Classes/**/*'

  • 验证podspec的正确性:

本地验证,添加--allow-warnings忽略警告。

pod lib lint xxxx.podspec --allow-warnings
如果依赖了自己的库需要使用source的方式验证

远程验证

pod spec lint --sources='私有仓库repo地址,https://github.com/CocoaPods/Specs'

如果看到 xxxx passed validation. 就表示成功了

2.5 上传并打tag

  • 上传
git add .
git commit -m '提交描述'
git remote add origin https://github.com/DongliangZhao/DDBaseModule.git
// 第一次push如果报错的话可以加上-f
// git push -f origin master
git push origin master

  • tag

标签0.1.0spec中的s.version保持一致

git tag '0.1.0'
git push --tags

tag, 发布一个release版本,成功之后即可在releases里面看到这个tag的版本

2.6 发布库的描述文件podspec给cocoapods

pod trunk push xxxx.podspec --allow-warnings

看到 这说明已经过了,接着就是等。

这里补充一下,创建私有库时,这里并不是使用trunk的方式提交,而是将podspec添加到私有索引库Sepc repo中,命名如下:

pod repo push PodSpec名称  Demo.podspec

3. 验证与维护

  • 验证

    搜索

pod search DDBaseModule
如果搜索不到,则执行下面命令:
rm ~/Library/Caches/CocoaPods/search_index.json

删除后,再search,出现下面的

Creating search index for spec repo 'master'..

稍等就会搜索到。

使用

pod 'DDBaseModule'
  • 维护

    如有错误或版本迭代,修改工程文件后推送到远端仓库后:

    • 需要修改podspec中的版本号
    • 重新打tag上传
    • 再进行新一轮的验证和发布

    我们还可以创建一个演示demo工程来展示查看,并不会影响我们的pod库。

4. 遇到的问题

4.1 pod 私有库依赖有OC pod库,更新私有库报错

解决方法:

push 时,添加--skip-import-validation,如下

pod repo push xxx[私有仓库] xxxx.podspec[私有库podspec] --allow-warnings --skip-import-validation --verbose

4.2 更新私有库成功,update不到新代码

解决方法:

可能导致的原因:

  1. 需要pod repo update,更新本地私有库索引

  2. 在更新私有库操作时,私有库的podspecs.version和提交时的 tag不一致,或者是终端提交代码有问题(被这个问题卡了好久,最终使用source tree更新提交代码,然后s.versiontag保持一致,再也没出现这个问题)

4.3 pod私有库 文件夹分层问题

如下:

#-------文件分层---------

    s.subspec 'Base' do |base|

        base.source_files = 'YXCommenBaseModule/Classes/Base/**/*'
        base.dependency 'YXCommenBaseModule/BaseController'

    end

    s.subspec 'BaseController' do |controller|

        controller.source_files = 'YXCommenBaseModule/Classes/BaseController/**/*'
        
        controller.dependency 'YXCommenBaseModule/BaseModel'
        controller.dependency 'YXCommenBaseModule/BaseView'

    end


    s.subspec 'BaseModel' do |model|

        model.source_files = 'YXCommenBaseModule/Classes/BaseModel/**/*'

    end

    

    s.subspec 'BaseView' do |model|

        model.source_files = 'YXCommenBaseModule/Classes/BaseView/**/*'

        model.dependency 'YXCommenBaseModule/BaseModel'

    end


    s.subspec 'CustomView' do |model|

        model.source_files = 'YXCommenBaseModule/Classes/CustomView/**/*'
        #添加依赖   model.dependency '私有库名/依赖的文件夹名'  
        model.dependency 'YXCommenBaseModule/Base'  

    end

注意: 文件夹之间有相互引用时,需要添加依赖 model.dependency '私有库名/依赖的文件夹名'