通过cocoaPod生成spec文件

一个简单的spec文件如下

Pod::Spec.new do |s|
s.name = '框架名'
s.version = '0.1.0'
s.summary = 'A short description of ZYTemplateName.'
s.homepage = 'https://github.com/ripperhe/ZYTemplateName'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { '框架作者' => '作者邮箱' }
s.source = { :git => 'https://github.com/ripperhe/ZYTemplateName.git', :tag => s.version.to_s }
s.ios.deployment_target = '8.0'
s.source_files = '框架名/Classes/*/'
end

先进入需要发布的框架的根目录,执行

$ pod spec create [NAME]

这里的 NAME 即为框架名字,不需要手动加 .podspec 后缀。执行完成之后,会生成 NAME.podspec 文件,进入该文件,将对应信息改为你具体的信息即可。

如果你发现你的 spec 文件默认填写的用户名和邮箱不是你刚才利用 trunk 命令注册账号时候填写的不用惊讶,因为默认取的是 git 的用户名和邮箱,所以想修改的话,去修改 ~/.gitconfig 文件中的用户名和邮箱。以下为相关源码:

def default_data_for_template(name)
data = {}
data[:name] = name
data[:version] = '0.0.1'
data[:summary] = "A short description of #{name}."
data[:homepage] = "http://EXAMPLE/#{name}"
data[:author_name] = git config --get user.name.strip
data[:author_email] = git config --get user.email.strip
data[:source_url] = "http://EXAMPLE/#{name}.git"
data[:ref_type] = ':tag'
data[:ref] = '#{s.version}'
data
end

spec 文件的这些描述,基本上看命名是可以看明白的。实在不明白可以查看 官方文档https://guides.cocoapods.org/syntax/podspec.html#specification
需要注意的是,s.version 是你将要发布的 pod 仓库的版本,s.source 是你的仓库源地址和对应的 tag 信息。

version 和 tag 可以是不同的,但是为了方便管理和维护,我们一般将其设置为一样的,所以 tag 可以 直接使用 s.version.to_s。既然这里用到了 tag,那么接下来,就需要为仓库代码打上 tag。

提交代码并为框架打 tag

首先,需要将本仓库的所有修改提交到远程仓库。

$ git add .
$ git ci -m 'release pod'
$ git push

上一步在仓库的根目录创建了 spec 文件,随着代码的提交,spec 文件也会提交到自己的远程代码仓库。这个 spec 文件和需要发布的框架放在一起并不是必须,只是这样可以方便我们以后维护这个框架。

发布 pod 仓库,需要和自己框架的远程仓库代码版本对应,所以这里需要为当前代码打上 tag,这个 tag 是和前面的 spec 文件中填写的 tag 对应的。框架发布成功之后,CocoaPods 会根据 tag 信息去获取相应代码。

$ git push origin master
$ git tag '0.1.0'
$ git push --tags

验证 spec 文件

用于验证 spec 文件是否正确,可以及早发现问题。同样,也是在需要发布的框架的根目录,执行

$ pod spec lint NAME.podspec

这里需要加上 .podspec 后缀来验证这个文件。如果有报错,仔细查看报错信息,一般可以定位问题,可以加上 --verbose 查看详细的验证过程,方便定位问题。

$ pod spec lint NAME.podspec --verbose

验证 spec 文件也可以用另外一个命令

$ pod lib lint NAME.podspec

pod spec lint 和 pod lib lint 最主要的区别是,前者会根据 spec 文件 tag 信息去验证远程仓库代码是否存在,后者不会。简单理解就是,pod spec lint 联网检查,pod lib lint 不联网检查。

验证的时候,可能会报错,或是报警告。报错的话,必须解决,详细看具体信息,一般能找到问题,如果不能,自行 google 😁。警告的话,可以忽略,不过能解决的话,最好解决。

$ pod lib lint ZYTemplateName.podspec --allow-warnings

推送 spec 文件

验证文件通过之后,需要将文件推送到 CocoaPods 描述文件仓库,在框架根目录,执行以下命令:

$ pod trunk push NAME.podspec

这个命令,可以不在后面加描述文件名称,如果不加的话,会在终端当前工作目录下查找 .podspec 文件,执行 trunk push 命令。

这一步稍微会久一点,需要等待一会儿,因为 CocoaPods 需要先将 spec 文件上传到 CocoaPods/Specs 仓库,再 git pull 到本地 CocoaPods/Specs 仓库。等待显示成功之后,可以验证以下自己的框架是否真的发布成功了。搜索一下:

$ pod search [NAME]

如果搜索不到,可能是仓库的索引库出现问题,将其删除,重新生成索引。索引缓存地址:

~/Library/Caches/CocoaPods/search_index.json

如果这样还不行,有可能是官方的 spec 仓库 出现问题。官方 spec 仓库路径:

~/.cocoapods/repos/master

将其删除,再重新克隆官方的 spec 仓库:

$ pod setup

这个时候再试试 pod search 应该就有了。
对于公司内部使用的组件模块,一般是不公开的,所以就需要用到私有 sepc 仓库。

将代码发布到私有仓库和 CocoaPods 官方库最大的区别就是,不需要利用 trunk 命令创建 session。既然整个私有库都是你的,所以也没有必要再有账号机制了,自己想怎样就怎样。

少做了一件事情,但也有额外的事情需要做。前面 spec 文件都是 CocoaPods 帮你管理的,所以做私有 pod,就需要创建私有 spec 仓库。

整体流程如下:

  安装 CocoaPods
  创建远程私有 spec 仓库
  克隆远程私有 spec 仓库到本地
  创建 spec 文件
  提交代码并为框架打 tag
  验证 spec 文件
  通过 pod repo push 推送 spec 文件
  很多流程是相同的,相同的流程一笔带过。

另一种方式

1. 执行命令

projectName--项目名称
pod lib create projectName

2. 选项设置

What language do you want to use?? [ Swift / ObjC ]
ObjC
Would you like to include a demo application with your library? [ Yes / No ]
Yes
Which testing frameworks will you use? [ Specta / Kiwi / None ]
Kiwi
Would you like to do view based testing? [ Yes / No ]
No
What is your class prefix?
项目缩写

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

推荐阅读更多精彩内容