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

  1. GitHub上創(chuàng)建項(xiàng)目


    AE7318BE-2663-4132-9C56-AB58D27A473C.png
  2. 項(xiàng)目拉到本地
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. 創(chuàng)建 podspec 文件
    打開終端,cd到項(xiàng)目文件夾,執(zhí)行一下命令( BMToastView換成你的框架名稱)
pod spec create BMToastView

執(zhí)行完畢項(xiàng)目目錄中會(huì)生成一個(gè) .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                    = '這部分是搜索框架時(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 保存

  1. 驗(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
6071B6FC-8B32-4895-861A-997F4F95CCA1.png

如果提示有 error 錯(cuò)誤的話,就必須按照提示將錯(cuò)誤解決掉,大多數(shù)都是 podspec 文件信息編輯有誤,解決完后重新進(jìn)行驗(yàn)證,如果提示信息不足,可以執(zhí)行以下命令以獲取更多錯(cuò)誤信息:

pod lib lint --verbose

出現(xiàn)上圖2的提示就是驗(yàn)證成功了。

  1. 提交修改
    podspec 文件驗(yàn)證成功后,將改動(dòng)后的文件 commit 提交,push到 GitHub
git commit -am "correct a content in BMToastView.podspec"
git push --all
  1. 項(xiàng)目打上 tag 版本
    版本名必須要和之前podspec 文件中的 s.version 一致。
git tag "1.0.0" // 為 git 提交打上 tag
git push --tags // 將 tag 推送到遠(yuǎn)程倉(cāng)庫(kù)
  1. 發(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 了


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

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

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

執(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容