制作一个带版本的CocoaPods开源三方库并托管到GitHub

日常开发的时候,我们会用CocoaPods集成一些第三方库在项目中使用。但我们也希望能够将自己的代码制作成Pod库供别人使用。下面我们就来制作一个属于自己的Pod开源库,并发布到CocoaPods供他人使用。

1、新建项目

首先在Github上新建一个项目, 新建的时候要勾选许可类型:MIT License

新建项目

2、将新创建的项目克隆到本地

git clone https://github.com/wuyukobe24/WXQOpenSourceLibrary.git

打开项目,会有一个LICENSE文件。

3、添加开源代码

往克隆到本地的文件夹中添加要开源的代码:

开源代码

WXQOpenSourceLibrary文件夹内为要开源的代码。

4、创建podspec文件

备注:podspec 文件是 Pod 库的描述文件,每个 Pod 库必须有且仅有一个这样的文件。文件名需要与我们创建的 Pod 库的名称一致。

打开终端, 进入到项目的根目录:

cd /Users/wangxueqi/Desktop/WXQOpenSourceLibrary

然后执行下面的指令新建Podspec文件(创建的Podspec文件名称要和项目名称保持一致):

pod spec create WXQOpenSourceLibrary
成功创建Podspec文件

此时, 本地文件夹下就多了一个文件: WXQOpenSourceLibrary.podspec
然后对WXQOpenSourceLibrary.podspec双击右键->打开方式->文本编辑,打开这个文件(或者使用其他的方式打开, 例如:XcodeVSCode等),然后修改其中的内容为以下:

Pod::Spec.new do |s|
  #库名
  s.name         = "WXQOpenSourceLibrary"
  #库版本
  s.version      = "0.0.1"
  #库简短描述
  s.summary      = "creat a OpenSourceLibrary"
  #库详细描述(要比上面的简短描述长)
  s.description  = <<-DESC
      It introduces how to creat a OpenSourceLibrary
                   DESC

  #库介绍主页地址
  s.homepage     = "https://github.com/wuyukobe24/WXQOpenSourceLibrary"
  # s.screenshots  = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif"

  #库开源许可
  s.license      = { :type => "MIT", :file => "LICENSE" }
  #作者信息
  s.author             = { 'wuyukobe24' => 'jkwxq@sina.com' }
  # Or just: s.author    = "wuyukobe24"
  # s.authors            = { "wuyukobe24" => "jkwxq@sina.com" }

  # s.platform     = :ios
  # s.platform     = :ios, "5.0"
  #库依赖系统版本
  # s.ios.deployment_target = "8.0"
  #源码git地址
  s.source       = { :git => "https://github.com/wuyukobe24/WXQOpenSourceLibrary.git", :tag => "#{s.version}" }
  #源码文件配置
  s.source_files  = 'WXQOpenSourceLibrary/Classes/*.{h,m}'
  s.exclude_files = "Classes/Exclude"
  #源码头文件配置
  # s.public_header_files = "WXQOpenSourceLibrary/Classes/*."
  #资源文件配置
  # s.resource  = "icon.png"
  # s.resources = "Resources/*.png"

  # s.preserve_paths = "FilesToSave", "MoreFilesToSave"
  #系统框架依赖
  # s.framework  = "SomeFramework"
  # s.frameworks = "SomeFramework", "AnotherFramework"

  # s.library   = "iconv"
  # s.libraries = "iconv", "xml2"
  #是否支持arc
  # s.requires_arc = true

  # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
  # s.dependency "JSONKit", "~> 1.4"

end

完成后,执行下面的指令来验证这个文件是否可用:

pod lib lint WXQOpenSourceLibrary.podspec

如果有错误,根据错误提示,进行修改;如果仅仅是警告,不想修改的话,可以使用下面的指令来忽略:

pod lib lint WXQOpenSourceLibrary.podspec —allow-warnings

最后,输出下面这个,即是验证通过:

podspec验证通过

5、将代码推送到Github:

终端依次输入命令如下:

cd /Users/wangxueqi/Desktop/WXQOpenSourceLibrary 
git add .
git commit -m "添加开源源码和podspec"
git pull
git push origin master

完整输出命令行如下:

localhost:WXQOpenSourceLibrary wangxueqi$ cd /Users/wangxueqi/Desktop/WXQOpenSourceLibrary 
localhost:WXQOpenSourceLibrary wangxueqi$ ls
LICENSE             WXQOpenSourceLibrary.podspec
WXQOpenSourceLibrary
localhost:WXQOpenSourceLibrary wangxueqi$ git add .
localhost:WXQOpenSourceLibrary wangxueqi$ git commit -m "添加开源源码和podspec"
[master 9ab8d16] 添加开源源码和podspec
 10 files changed, 555 insertions(+)
 create mode 100644 WXQOpenSourceLibrary.podspec
 create mode 100644 WXQOpenSourceLibrary/Classes/WXQCustomLabelFlow.h
 create mode 100644 WXQOpenSourceLibrary/Classes/WXQCustomLabelFlow.m
 create mode 100644 WXQOpenSourceLibrary/Classes/WXQCustomLabelFlowCell.h
 create mode 100644 WXQOpenSourceLibrary/Classes/WXQCustomLabelFlowCell.m
 create mode 100644 WXQOpenSourceLibrary/Classes/WXQCustomLabelFlowConfig.h
 create mode 100644 WXQOpenSourceLibrary/Classes/WXQCustomLabelFlowConfig.m
 create mode 100644 WXQOpenSourceLibrary/Classes/WXQCustomLabelFlowLayout.h
 create mode 100644 WXQOpenSourceLibrary/Classes/WXQCustomLabelFlowLayout.m
 create mode 100644 WXQOpenSourceLibrary/Classes/WXQLabelFlow.h
localhost:WXQOpenSourceLibrary wangxueqi$ git pull
Already up to date.
localhost:WXQOpenSourceLibrary wangxueqi$ git push origin master
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (13/13), done.
Writing objects: 100% (14/14), 7.29 KiB | 3.65 MiB/s, done.
Total 14 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), done.
To https://github.com/wuyukobe24/WXQOpenSourceLibrary.git
   57215f4..9ab8d16  master -> master

推送成功后,刷新Github仓库之后如下:

上传源码展示

6、新建版本

来到Github上,创建release版本,选择release:

选择release

点击release之后,如果是个新的项目的话,里面没有任何版本信息的,需要点击create a new release

新建版本提示

注意: 这里的Tag verson 一定要和上面设置的s.version以及s.source中的tag保持一致。信息填写如下:

信息填写

填好之后,点击下面的Public release即可完成!

完成版本创建

7、注册CocoaPods账户

接下来输入以下指令,来链接到你的CocoaPods账户:

// 邮箱  用户名   描述信息
pod trunk register jkwxq@sina.com 'WXQOpenSourceLibrary'

正确的话会出现下图:

CocoaPods账户验证

根据提示,到你的邮箱里去确认邮件即可。邮件内容为:

Hi wuyukobe24,
Please confirm your CocoaPods session by clicking the following link:
https://trunk.cocoapods.org/sessions/verify/9b021c15
If you did not request this you do not need to take any further action.
Kind regards, the CocoaPods team

打开其中链接https://trunk.cocoapods.org/sessions/verify/9b021c15出现下图即为验证成功。

邮件验证成功

确认之后,可以使用下面的指令来确认账号是否可用:

pod trunk me

如果可用,会输出相关的信息:

CocoaPods账户验证成功

8、上传代码到Cocoapods

以上全部完成后,最后一步就是上传代码到Cocoapods了。
首先,使用下面的指令来检查文件是否可用:

pod spec lint

远程验证成功,会输出:

远程验证成功

最后就是上传代码了,使用下面的指令进行上传:

pod trunk push WXQOpenSourceLibrary.podspec

上传的时间可能会有点长,耐心等待,成功后会输出:

上传成功
注意:如果这里因为有警告而导致失败,可以在后面添加--allow-warnings来忽略警告,即:
pod trunk push WXQOpenSourceLibrary.podspec --allow-warnings

至此,制作带版本号的开源三方库并托管到GitHub的流程就完成了。

我们可以搜索刚制作的三方库WXQOpenSourceLibrary

pod search WXQOpenSourceLibrary

结果会搜不到:

[!] Unable to find a pod with name, author, summary, or description matching `WXQOpenSourceLibrary`

当搜索不到这个库,或者在使用时找不到这个库,可以使用下面的指令来清理一下缓存:

rm ~/Library/Caches/CocoaPods/search_index.json

然后重新搜索,耐心等待,就会出现:

搜索成功

最后我们可以创建一个项目,添加CocoaPods,引入开源库pod 'WXQOpenSourceLibrary', '~> 0.0.1'测试我们刚创建的开源库,
pod install之后没问题会出现:

CocoaPods成功导入WXQOpenSourceLibrary库

然后我们就可以愉快的在项目中使用我们的开源库了〜

9、更新代码以及开源库的版本

如果我们需要更新自己的类库,只需要将最新的代码提交到Github,然后创建新的release版本(注意:这里的版本要和podspec文件内的s.version一致)。

步骤:

首先创建新的release版本(上面步骤6),如0.0.2。然后cd到当前文件夹(WXQOpenSourceLibrary.podspec平级的文件夹),执行以下命令即可:

 cd /Users/wangxueqi/Desktop/WXQOpenSourceLibrary
 git add .                      //新增的文件 加入仓库 
 git commit -a -m "0.0.2"       //需要提交的文件上传确认
 git pull origin master         //下拉最新资源
 git push origin master         //上传本地最新代码
 git tag 0.0.2                  //打tag,设置版本号
 git push --tags                //推送新版本号
 pod spec lint --allow-warnings //验证远程服务器的库是否正确 spec换成 lib的话就是验证本地库是否正确
 pod trunk push WXQOpenSourceLibrary.podspec //上传代码

10、参考

(1)参考:[Cocoapods]使用Cocoapods + Github托管代码
(2)出现问题可参考: [Cocoapods]项目添加Cocoapods支持遇到的坑使用cocoapods时常见错误
(3)创建私有库可参考:[iOS模块式开发]例讲如何制作一个CocoaPods私有库

WXQOpenSourceLibrary开源库制作GitHub地址:WXQOpenSourceLibrary
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 文/海沙 母爱历来是个放之四海皆不会厌倦的话题。《妈妈再爱我一次》这部影片更是戳中了很多人的泪点。 影片以倒叙方式...
    河南海沙阅读 1,057评论 0 2
  • 上一回 英雄联盟野史〔序〕 “站住!” 扭曲丛林的寂静被一声呵斥打破。一群乌鸦飞起。 一个人影在林中穿梭,身后紧随...
    初心丶阅读 443评论 0 5
  • 对于育儿的恐惧大多源于对这一领域的无知,所以最近都有意识去多读些育儿书,多去听一些关于幼儿的心理发展的节目,多了解...
    低调的潇洒阅读 670评论 0 1
  • 晚上去图书馆看见了这本书,突然又想起了我家的小折耳,到现在它都4岁半了——如果它还活着的话。 还是那句老生常谈:如...
    贩梦俗人阅读 422评论 0 3