iOS如何让自己的框架支持CocoaPods

  1. GitHub上创建项目


    AE7318BE-2663-4132-9C56-AB58D27A473C.png
  2. 项目拉到本地
git clone https://github.com/wxm6099/BMToastView
06EF7F68-A369-44B5-AD3D-4FC4B05155D3.png
  1. 提交框架源码和demo


    B7D28D09-049A-4F72-8C1B-BF2884AF9BED.png
git add BMToastView
git add BMToastViewDemo
git commit -m 'add BMToastView and BMToastViewDemo'
git push
  1. 创建 podspec 文件
    打开终端,cd到项目文件夹,执行一下命令( BMToastView换成你的框架名称)
pod spec create BMToastView

执行完毕项目目录中会生成一个 .podspec 的文件。


439A5387-514E-4B17-9066-4AFCC1BE776A.png
  1. 编辑 podspec 文件
    用编辑器打开 .podspec 的文件
Pod::Spec.new do |s|
    s.name                       = 'BMToastView'
    s.version                    = '1.0.0'
    s.summary                    = '这部分是搜索框架时候显示的介绍'
    s.homepage                   = 'https://github.com/Bobo168/BMToastView'
    s.license                    = { :type => 'MIT', :file => 'LICENSE' }
    s.author                     = { 'BoboMa' => '996815278@qq.com' }
    s.social_media_url           = 'http://weibo.com/bobo_Ma'
    s.platform                   = :ios
    s.ios.deployment_target      = '9.0'
    s.swift_version              = '4.0'
    s.source                     = { :git => 'https://github.com/Bobo168/BMToastView.git', :tag => s.version }
    s.source_files               = 'BMToastView/*.{h,m}'
    s.resource_bundle            = { 'BMToastView' => ['Resources/**/*.xcassets'] }
    s.resource                   = 'xxx/xxx.bundle'
    s.ios.vendored_frameworks    = 'xxx/xxx.framework'
    s.frameworks                 = 'UIKit'
    s.static_framework           = true
    s.dependency                 'AFNetworking'
    s.subspec 'GroupName' do |s|
        ...
    end
end

各字段含义 x x x地方是需要修改的内容

s.name = 'xxx' :框架名称,pod search 搜索的关键词,一定要和 .podspec 文件的名称一样,否则验证报错。(必须)

s.version = 'xxx' :框架版本号。(必须)

s.summary = 'xxx' : pod search 搜索框架时,显示的框架简介。(必须)

s.homepage = 'xxx' :项目主页地址.(必须)

s.license = { :type => 'MIT', :file => 'LICENSE' } :这里就这样写不用修改。(必须)

s.author = { 'xxx' => 'xxx' } :作者,前面填英文名,后面填个人邮箱。(必须)

s.social_media_url = 'xxx' :社交网址,填的是我的微博地址。

s.platform = :ios :所属平台,这边不用更改。(必须)

s.ios.deployment_target = '9.0' :最低支持的 iOS 版本(必须)

s.swift_version = '4.0' :如果是 Swift 的话指定 Swift 编译版本

s.source = { :git => 'xxx', :tag => s.version } :GitHub 项目的仓库地址,这里只支持 HTTPS ,不支持 SSH 。(必须)

s.source_files = 'xxx/*.{h,m}' :要添加 CocoaPods 支持的文件路径。

几种写法:
s.source_files = 'xxx/*'
s.source_files = 'xxx/*.{h,m}'
s.source_files = 'xxx/**'

'*':表示匹配所有文件
'*.{h,m}':表示匹配所有以 .h 和 .m 结尾的文件
'**':表示匹配所有子目录

s.resource_bundle = { 'xxx' => ['xxx/**/*.xcassets'] } :要添加 CocoaPods 支持的图片资源,这个是我后补的所以 Demo 截图中没有这个,可以根据自己需求写。

如果要在主工程中使用 pod 中的图片,方法如下:

// 假如 podspec 中定义的 Bundle 名字为 TestBundle
s.resource_bundle = { 'TestBundle' => ['xxx/**/*.xcassets'] }

// 例如:
let url = Bundle(for: View.self).resourceURL!
let bundle = Bundle(url: url.appendingPathComponent("TestBundle.bundle"))
let image = UIImage(named: "imageName", in: bundle, compatibleWith: nil)

s.resource = 'xxx/xxx.bundle' :用于引入自己打包的bundle

s.ios.vendored_frameworks = 'xxx/xxx.framework' :用于引入自己打包的framework

s.frameworks = 'UIKit':用于引入官方的 framework

s.static_framework = true:用于声明包含静态库

s.dependency 'xxx' :项目依赖的其他 pod 库,不能依赖未发布的库,版本号可以不写。

多个依赖可以这样写:
s.dependency 'xxx'
s.dependency 'xxx'
s.dependency 'xxx'

指定版本可以这样写:
s.dependency 'xxx', '1.0.0'

s.subspec 'xxx' do |s|

end

表示建立一个名字为 xxx 的子文件夹,可以将文件分类,不需要可以不写,里面写法和外面是一样的,例如:

s.subspec 'xxx' do |s|

    s.source_files       = 'xxx/*.{h,m}'
    s.resource_bundle    = { 'xxx' => ['xxx/**/*.xcassets'] }

end

注意:不同子文件夹下 source_files 中的文件是单独编译的,如果文件中引入了别的子文件夹下的代码是编译不通过的。

修完完成后,command + s 保存

  1. 验证 podspec 文件
    用终端 cd 到你的项目目录,终端没关就直接执行以下命令:
 pod lib lint

如果是如下图1提示只有 warning 错误,并提示 but you can use '--allow-warnings' to ignore them 的话,就执行以下命令忽略 warning 来验证:

pod lib lint --allow-warnings
6071B6FC-8B32-4895-861A-997F4F95CCA1.png

如果提示有 error 错误的话,就必须按照提示将错误解决掉,大多数都是 podspec 文件信息编辑有误,解决完后重新进行验证,如果提示信息不足,可以执行以下命令以获取更多错误信息:

pod lib lint --verbose

出现上图2的提示就是验证成功了。

  1. 提交修改
    podspec 文件验证成功后,将改动后的文件 commit 提交,push到 GitHub
git commit -am "correct a content in BMToastView.podspec"
git push --all
  1. 项目打上 tag 版本
    版本名必须要和之前podspec 文件中的 s.version 一致。
git tag "1.0.0" // 为 git 提交打上 tag
git push --tags // 将 tag 推送到远程仓库
  1. 发布到 cocoapods公共仓库
    1)注册trunk
    已经注册过 trunk 的就不需要注册了,执行以下命令查看自己有没有注册过:
pod trunk me

出现以下注册信息就代表已经注册过 trunk 了


CA1A1AB4-DCB8-4BEB-8222-4215B426FF57.png

如果没有就执行以下命令来注册 trunk ,前面填写邮箱地址,后面英文名字。例如下图1命令

pod trunk register xxx "xxx"
7879C496-ED83-447A-BE31-78CECCC66CB0.png

执行注册命令完成之后,会验证注册邮箱,打开刚才填的邮箱,打开邮件里面的链接,弹出网页后就注册成功了。
2)发布到 CocoaPods
cd 到你的项目目录(如果终端始终未关闭就不需要)

  • 如果刚才是用 pod lib lint 验证成功的,就执行以下命令发布:
 pod trunk push BMToastView.podspec
  • 如果刚才是用 pod lib lint --allow-warnings 验证成功的,就执行以下命令发布:
 pod trunk push BMToastView.podspec --allow-warnings
  • 最后出现如下图所示,就表示发布成功了。


    35B3890D-51A2-444A-9C91-9ECB86350E64.png

3)验证
执行以下命令验证自己的库( cocoapods 需要一些处理时间, 可以去 cocoapods 官网去查看自己的库)

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

推荐阅读更多精彩内容