美文网首页Tools
折腾cocoaPods, 创建自己的依赖库

折腾cocoaPods, 创建自己的依赖库

作者: quankevin | 来源:发表于2016-07-23 09:31 被阅读3680次

制作集成了一个认证,分享,支付的库,也上载到了github,之前一直想做一个自己的pod库,根据网上的教程,走了一些坑,总算折腾完了(写这个文章的时候其实应该还在部署,有点小激动)

1.Github 

     创建自己的Repository,我创建了QShare,然后从本地上传到github上, 这些步骤就不在这里赘述了,经常跑github的同学应该都会。

2.建tag

     打开终端,cd 到项目QShare目录下,

git tag '1.0.0'//这个命令是本地创建tag,1.0.0版本

git push --tags // 这个命令是把tag推送到远端。

3.创建项目的podspec文件

现在终端还是在项目QShare的目录下,执行以下命令

$ pod spec create QShare

在本地目录下同时也生成了QShare.podspec文件

$ vim QShare.podspec

编辑podspec文件,会发现这个文件已经生成了部分的字段

以下是编辑好的podspec 文件 做一些解释

Pod::Spec.new do |s|                       #spec开始  s作为spec的别名

    s.name        = "QShare"               #项目名称

    s.version      = "1.0.0"                 #版本号,

    s.summary      = "Gather Some Auth Share Pay."        #简介

    s.homepage    = "https://github.com/quankevin/QShare"           #github,或者别的开源代码地址

    s.license      = "MIT"        #遵循的开源协议

    s.author            = { "quankevin" => "quankevin@163.com" }       #作者

    s.social_media_url  = "http://weibo.com/quankevin"         #作者联系

    s.platform    = :ios, "7.0"    #对应的ios平台

    s.source      = { :git => "https://github.com/quankevin/QShare.git", :tag => "#{s.version}" }    #代码的git源地址    这里的tag=>"#{s.version}"   引用了上面的s.version  如果,在打tag的时候是用的  git tag 'v1.0.0'     那么这里需要使用   tag => "v#{s.version}" 

    s.frameworks  = "SystemConfiguration","UIKit","CoreTelephony"         #项目需要用到的ios framework 

    s.libraries    = "stdc++", "sqlite3","z"                #项目需要用到的库

    s.requires_arc = true             #arc

    s.public_header_files = "QShare/QShareHeader.h"          #公用的一些头文件

    s.subspec 'Core' do |core|                              #定义一个Core

       core.source_files = "QShare/*.{h,m}"    #指定Core的路径

    end        #结束定义Core

    s.subspec 'WeChat' do |wechat|       #定义微信

      wechat.dependency 'QShare/Core'         #需要上面的Core

      wechat.source_files = "QShare/Wechat/*.{h,m}"    #微信的库 

      wechat.vendored_libraries = "QShare/Wechat/*.a"  #封装了微信的.a

    end   #结束

    s.subspec 'Weibo' do |weibo|

       weibo.dependency "WeiboSDK"   #这里是直接引用了微博的cocoapod

    end

    s.subspec 'Tencent' do |qq|

      qq.dependency 'QShare/Core'

      qq.source_files = "QShare/Tencent/*.{h,m}"

      qq.vendored_frameworks = "QShare/Tencent/SDK/TencentOpenAPI.framework"   #指定framework 的路径

    end

    s.subspec 'Ali' do |ali|

      ali.dependency 'QShare/Core'

      ali.source_files = "QShare/Ali/*.{h,m}"

      ali.resources = "QShare/Ali/SDK*.bundle"   #指定了ali 的非代码资源

      ali.vendored_frameworks = "QShare/Ali/SDK/AlipaySDK.framework"

    end

end

编辑好podspec文件后,需要验证一下这个文件是否能通过编译。

$ pod spec lint QShare.podspec --verbose

然而并没有通过

- ERROR | [iOS] Encountered an unknown error (The'Pods'target has transitive dependencies that include static binaries: (/private/var/folders/bw/c_n89d1n6xqffn525kp80000gn/T/CocoaPods/Lint/Pods/WeiboSDK/libWeiboSDK/libWeiboSDK.a)) during validation.

找了一些相关的,这个错误是因为依赖库(s.dependency)包含了.a静态库造成的。虽然这并不影响Pod的使用,但是验证是无法通过的。可以通过 --use-libraries 来让验证通过。使用以下的命令:

$ pod spec lint QShare.podspec --verbose --use-libraries

然而这种情况下使用 --use-libraries 虽然不会出现错误(error),但是有时候会带来一些警告(waring),警告同样是无法通过验证的。这时可以用 --allow-warnings 来允许警告。

$ pod spec lint QShare.podspec --verbose --use-libraries --allow-warnings

静候佳音----终于通过了。

提交到pod

发布时也会验证 Pod 的有效性,如果你在手动验证 Pod 时使用了 --use-libraries 或 --allow-warnings 等修饰符,那么发布的时候也应该使用相同的字段修饰,否则出现相同的报错。

发布成功后,终于可以使用 pod search 搜索到自己的 Pod 了。

tieguan pod search QShare

-> QShare (1.0.0)

Gather Some Auth Share Pay.

pod 'QShare', '~> 1.0.0'

- Homepage: https://github.com/quankevin/QShare

- Source:https://github.com/quankevin/QShare.git

- Versions: 1.0.0 [master repo]

- Subspecs:

- QShare/Core (1.0.0)

- QShare/WeChat (1.0.0)

- QShare/Weibo (1.0.0)

- QShare/Tencent (1.0.0)

- QShare/Ali (1.0.0)

版本升级

当需要更新 Pod 版本的时候,修改 .podspec 中的 s.version 为更高的版本号,并修改 s.source 中对应的 Git 版本。提交到Git,并打上对应tag。然后再次执行pod trunk push QShare.podspec将新的 .podspec 发布到 CocoaPods。更新完成!

为了更方便的修改版本号,用了以下的语句:

s.source      = { :git => "https://github.com/quankevin/QShare.git", :tag => "v#{s.version}" }

这样与 s.version进行了绑定,每次提交新的版本只需要修改s.version  = "xxxx"。

如有不明白的或者错误的地方,请大家指出,我会将其修正。

参考资料

http://www.tuicool.com/articles/6FF7fi

http://ishalou.com/blog/2012/10/16/how-to-create-a-cocoapods-spec-file/

https://guides.cocoapods.org/syntax/podspec.html#specification

相关文章

网友评论

  • zhengyc:您好,[!] The 'Pods-IFreePlayLoginSDK_Example' target has transitive dependencies that include static binaries: (/Users/ifreeplay/Desktop/IFreePlayLoginSDK/Example/Pods/WechatOpenSDK/OpenSDK1.7.9/libWeChatSDK.a) pod install 报错,请问这个怎么解决呢?
  • kuazi:你好,TencentOpenAPI.framework是什么版本的,TencentOpenAPI.framework 是不支持i386的。 pod lib lint 是验证不过去的,你是怎么解决的。
    粪中一朵狗尾巴花:你好,你得解决了吗。加入tencentapi得。
  • CGPointZero: - ERROR | [iOS] unknown: Encountered an unknown error (/Applications/Xcode.app/Contents/Developer/usr/bin/xcrun simctl list devices
    楼主,这个是什么原因呢?
    quankevin:@CGPointZero 这个是设备的问题吧,不是pod的问题
  • lzxy169:真的不错,有用 ~
    quankevin:@Solomono 谢谢啊 :relaxed:

本文标题:折腾cocoaPods, 创建自己的依赖库

本文链接:https://www.haomeiwen.com/subject/ddmijttx.html