-
GitHub上創(chuàng)建項(xiàng)目
AE7318BE-2663-4132-9C56-AB58D27A473C.png - 項(xiàng)目拉到本地
git clone https://github.com/wxm6099/BMToastView

-
提交框架源碼和demo
B7D28D09-049A-4F72-8C1B-BF2884AF9BED.png
git add BMToastView
git add BMToastViewDemo
git commit -m 'add BMToastView and BMToastViewDemo'
git push
- 創(chuàng)建 podspec 文件
打開終端,cd到項(xiàng)目文件夾,執(zhí)行一下命令( BMToastView換成你的框架名稱)
pod spec create BMToastView
執(zhí)行完畢項(xiàng)目目錄中會(huì)生成一個(gè) .podspec 的文件。

- 編輯 podspec 文件
用編輯器打開 .podspec 的文件
Pod::Spec.new do |s|
s.name = 'BMToastView'
s.version = '1.0.0'
s.summary = '這部分是搜索框架時(shí)候顯示的介紹'
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地方是需要修改的內(nèi)容
s.name = 'xxx' :框架名稱,pod search 搜索的關(guān)鍵詞,一定要和 .podspec 文件的名稱一樣,否則驗(yàn)證報(bào)錯(cuò)。(必須)
s.version = 'xxx' :框架版本號(hào)。(必須)
s.summary = 'xxx' : pod search 搜索框架時(shí),顯示的框架簡(jiǎn)介。(必須)
s.homepage = 'xxx' :項(xiàng)目主頁(yè)地址.(必須)
s.license = { :type => 'MIT', :file => 'LICENSE' } :這里就這樣寫不用修改。(必須)
s.author = { 'xxx' => 'xxx' } :作者,前面填英文名,后面填個(gè)人郵箱。(必須)
s.social_media_url = 'xxx' :社交網(wǎng)址,填的是我的微博地址。
s.platform = :ios :所屬平臺(tái),這邊不用更改。(必須)
s.ios.deployment_target = '9.0' :最低支持的 iOS 版本(必須)
s.swift_version = '4.0' :如果是 Swift 的話指定 Swift 編譯版本
s.source = { :git => 'xxx', :tag => s.version } :GitHub 項(xiàng)目的倉(cāng)庫(kù)地址,這里只支持 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 結(jié)尾的文件
'**':表示匹配所有子目錄
s.resource_bundle = { 'xxx' => ['xxx/**/*.xcassets'] } :要添加 CocoaPods 支持的圖片資源,這個(gè)是我后補(bǔ)的所以 Demo 截圖中沒(méi)有這個(gè),可以根據(jù)自己需求寫。
如果要在主工程中使用 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:用于聲明包含靜態(tài)庫(kù)
s.dependency 'xxx' :項(xiàng)目依賴的其他 pod 庫(kù),不能依賴未發(fā)布的庫(kù),版本號(hào)可以不寫。
多個(gè)依賴可以這樣寫:
s.dependency 'xxx'
s.dependency 'xxx'
s.dependency 'xxx'
指定版本可以這樣寫:
s.dependency 'xxx', '1.0.0'
s.subspec 'xxx' do |s|
end
表示建立一個(gè)名字為 xxx 的子文件夾,可以將文件分類,不需要可以不寫,里面寫法和外面是一樣的,例如:
s.subspec 'xxx' do |s|
s.source_files = 'xxx/*.{h,m}'
s.resource_bundle = { 'xxx' => ['xxx/**/*.xcassets'] }
end
注意:不同子文件夾下 source_files 中的文件是單獨(dú)編譯的,如果文件中引入了別的子文件夾下的代碼是編譯不通過(guò)的。
修完完成后,command + s 保存
- 驗(yàn)證 podspec 文件
用終端 cd 到你的項(xiàng)目目錄,終端沒(méi)關(guān)就直接執(zhí)行以下命令:
pod lib lint
如果是如下圖1提示只有 warning 錯(cuò)誤,并提示 but you can use '--allow-warnings' to ignore them 的話,就執(zhí)行以下命令忽略 warning 來(lái)驗(yàn)證:
pod lib lint --allow-warnings

如果提示有 error 錯(cuò)誤的話,就必須按照提示將錯(cuò)誤解決掉,大多數(shù)都是 podspec 文件信息編輯有誤,解決完后重新進(jìn)行驗(yàn)證,如果提示信息不足,可以執(zhí)行以下命令以獲取更多錯(cuò)誤信息:
pod lib lint --verbose
出現(xiàn)上圖2的提示就是驗(yàn)證成功了。
- 提交修改
podspec 文件驗(yàn)證成功后,將改動(dòng)后的文件 commit 提交,push到 GitHub
git commit -am "correct a content in BMToastView.podspec"
git push --all
- 項(xiàng)目打上 tag 版本
版本名必須要和之前podspec 文件中的 s.version 一致。
git tag "1.0.0" // 為 git 提交打上 tag
git push --tags // 將 tag 推送到遠(yuǎn)程倉(cāng)庫(kù)
- 發(fā)布到 cocoapods公共倉(cāng)庫(kù)
1)注冊(cè)trunk
已經(jīng)注冊(cè)過(guò) trunk 的就不需要注冊(cè)了,執(zhí)行以下命令查看自己有沒(méi)有注冊(cè)過(guò):
pod trunk me
出現(xiàn)以下注冊(cè)信息就代表已經(jīng)注冊(cè)過(guò) trunk 了

如果沒(méi)有就執(zhí)行以下命令來(lái)注冊(cè) trunk ,前面填寫郵箱地址,后面英文名字。例如下圖1命令
pod trunk register xxx "xxx"

執(zhí)行注冊(cè)命令完成之后,會(huì)驗(yàn)證注冊(cè)郵箱,打開剛才填的郵箱,打開郵件里面的鏈接,彈出網(wǎng)頁(yè)后就注冊(cè)成功了。
2)發(fā)布到 CocoaPods
cd 到你的項(xiàng)目目錄(如果終端始終未關(guān)閉就不需要)
- 如果剛才是用 pod lib lint 驗(yàn)證成功的,就執(zhí)行以下命令發(fā)布:
pod trunk push BMToastView.podspec
- 如果剛才是用 pod lib lint --allow-warnings 驗(yàn)證成功的,就執(zhí)行以下命令發(fā)布:
pod trunk push BMToastView.podspec --allow-warnings
-
最后出現(xiàn)如下圖所示,就表示發(fā)布成功了。
35B3890D-51A2-444A-9C91-9ECB86350E64.png
3)驗(yàn)證
執(zhí)行以下命令驗(yàn)證自己的庫(kù)( cocoapods 需要一些處理時(shí)間, 可以去 cocoapods 官網(wǎng)去查看自己的庫(kù))
pod search BMToastView


