制作集成了一个认证,分享,支付的库,也上载到了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