1.前期工作
- 擁有
github帳號(若沒有,前往github.com注冊即可) - 事先將
code準(zhǔn)備好,如果是.a或者framework動靜態(tài)庫,就需要將庫提前編譯好,并且將 模擬器 和 真機(jī) 的庫進(jìn)行合并(lipo -create 路徑1 路徑2 -output 合并文件路徑),這樣才能讓所集成的app集成一個庫進(jìn)而支持更多的 架構(gòu)。否則第一是在上傳檢測podspec時會有警告,二是對于封裝性來考慮的話就是支持不夠,導(dǎo)致沒人會愿意使用。 - 說明:這里我們以 framework 靜態(tài)庫為例。
2.準(zhǔn)備工作和配置相關(guān)信息
- 在github上創(chuàng)建工程
- 新建工程.png
-
打開終端將遠(yuǎn)程倉庫克隆到本地
clone倉庫.png - 在git倉庫目錄下創(chuàng)建.podspec配置文件(名稱和工程名保持一致)
$ cd XXXFramework
$ pod spec create XXXFramework
- 將已經(jīng)準(zhǔn)備好的 framework 添加到git目錄下,然后執(zhí)行命令提交
$ git add . // 提交所有添加的文件
$ git commit -m "描述信息" // 提交修改
$ git tag '1.0.0' // 為當(dāng)前版本標(biāo)記tag, 這個是一定要做的!!! 因?yàn)閜od需要根據(jù)版本號確定引用
$ git push --tags // 提交當(dāng)前標(biāo)記的tag
$ git push origin master // push修改到遠(yuǎn)程倉庫,git push 也可以
- 使用終端或者
Sublime編輯XXXFramework.podspec文件進(jìn)行信息配置
Pod::Spec.new do |s|
s.name = "XXXFramework"
s.version = "1.0.0" // 這個一定要與當(dāng)前版本的tag相對應(yīng)
s.summary = "這里寫簡介信息"
s.description = <<-DESC
這里寫描述信息,并且盡量保證比簡介信息要更多更全面,否則后面驗(yàn)證會有警告(雖然警告沒有影響,但是我們盡量做到驗(yàn)證的時候沒有警告)。
DESC
s.homepage = "github的項(xiàng)目地址"
s.license = 'MIT'
s.author = { "github的帳號" => "github帳號對應(yīng)的郵箱" }
s.source = { :git => "github上面的對應(yīng)工程的git地址(例如:https://github.com/xxxx/XXXFramework.git)", :tag => s.version }
s.platform = :ios
s.ios.deployment_target = '8.0'
# s.osx.deployment_target = '10.7'
s.requires_arc = true
#s.source_files = 'WZMarqueeView/*'
# s.resources = 'Assets'
# s.ios.exclude_files = 'Classes/osx'
# s.osx.exclude_files = 'Classes/ios'
# s.public_header_files = 'Classes/**/*.h'
s.vendored_frameworks = "RoyFramework.framework"
s.frameworks = "Foundation", "UIKit"
end
ps: 這里面用不到的可以直接注釋掉(#).這里對可能用到的配置進(jìn)行說明
s.name // 導(dǎo)入pod后的目錄名
s.version // 當(dāng)前版本號
s.license // 類型,這里直接填寫MIT
s.author // 用戶信息
s.source // 所引用的代碼源地址
s.platform // 適用平臺
s.ios.deployment_target // 最低的系統(tǒng)版本
s.requires_arc // 是否要求arc
s.prefix_header_file // 預(yù)編譯頭文件路徑,將該文件的內(nèi)容插入到pod的pch文件中
===重點(diǎn)====
s.source_files // 將上傳的代碼文件,路徑從.podspec開始,如果是開源的.h .m 文件,就需要寫成路徑/*.{h,.m}, 例如"Classes/**/*.{h,m}
s.resources // 資源文件,圖片或者xib文件
s.vendored_frameworks // 本地最后自己打包的frameworks
s.frameworks // 指定需要使用的系統(tǒng)frameworks, 例如:UIKit, Foundation
s.preserve_paths // 本地自己導(dǎo)入的.a庫
s.dependency //指定依賴,如果依賴的庫不存在或者依賴庫的版本不符合要求將會報錯
s.libraries // 指定導(dǎo)入的庫,比如sqlite3
s.weak_frameworkds // 弱鏈接,比如說一個項(xiàng)目同時兼容iOS和iOS7, 但某一個framework只有在iOS7上有,這時如果使用強(qiáng)連接,那么在iOS7上運(yùn)行就會crash, 使用weak_frameworks可以便面這種情況
通配符說明
a{bb,bc}def.{h,m}表示四個文件abbdef.h abbdef.m abcdef.h abcdef.m
*.{h,m,mm}表示所有的.h .m .mm文件
Class/**/*.{h,m}表示Class目錄下的所有.h .m文件
3.驗(yàn)證編寫的 podspec 文件
- 使用命令來驗(yàn)證編寫的podspec文件是否正確
$ pod spec lint
如果出現(xiàn)--allow-warnings的警告那么執(zhí)行下面這句消除警告
$ pod spec lint --allow-warnings
如果出現(xiàn)錯誤信息,則按照提示進(jìn)行修改
-> XXXFramework (1.0.0)
XXXFramework passed validation.
出現(xiàn)上面這個顯示,則表示通過了驗(yàn)證,就可以進(jìn)行下一步的操作
4.通過 trunk 上傳 spec 到 cocoapods
- 查看當(dāng)前終端的git帳號是否已經(jīng)注冊trunk
$ pod trunk me
// 如果現(xiàn)實(shí)帳號信息則表示已經(jīng)注冊過就可以直接push 面的操作:例如
- Name: xxx
- Email: xxxabc123@qq.com
- Since: March 27th, 04:39
- Pods:
- xxxxxx
- Sessions:
- March 27th, 04:39 - August 2nd, 04:55. IP: 116.228.209.98
// 否則就需要注冊trunk帳號
$ pod trunk register XXX@XXX.com '名字' --verbose
// 然后收到郵件之后點(diǎn)擊進(jìn)入郵件中的鏈接出現(xiàn) ACE, YOU'RE SET UP 就表示注冊成功
- 執(zhí)行 trunk push 操作提交至 cocoapods
$ pod trunk push XXXFramework.podspec
-
等待審核,出現(xiàn)如下信息
審核通過,發(fā)布成功
5.驗(yàn)證
- pod repo update // 更新cocoapods本地索引
- pod search XXXFramework // 成功之后即可搜索到
- 若出現(xiàn)報錯信息
[!] Unable to find a pod with name, author, summary, or description matching XXXFramework
則需要將之前的搜索索引刪除:
rm ~/Library/Caches/CocoaPods/search_index.json
重新搜索從遠(yuǎn)程拉取索引文件:
pod search XXXFramework
6.版本迭代和更新
- 只需要正常提交版本到 github 倉庫, 并且一定要打 tag 標(biāo)記,然后更改 .podspec 中的 version 和 其他需要修改的信息 然后再次驗(yàn)證,通過之后使用 trunk 提交即可~


