1. 編輯 podspec 文件
這一步非常重要趴荸,能不能驗證通過就主要看這個文件的內(nèi)容編輯是否正確了。
- pod自動生成了一部分必須的字段十电,如果需要設(shè)置更多字段揭保,點擊這里肥橙,以下部分字段并不是必須的,根據(jù)需求編輯即可秸侣。
#
# Be sure to run `pod lib lint BSDModuleNet.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'BSDModuleNet'
s.version = '0.1.0'
s.summary = '組件化/基礎(chǔ)工具/網(wǎng)絡(luò)請求'
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'http://114.55.74.197/ios-team/Modulization/BSDModuleNet'
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'linjiangfeng' => 'linjiangfeng@basestonedata.com' }
s.source = { :git => 'git@114.55.74.197:ios-team/Modulization/BSDModuleNet.git', :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '8.0'
s.source_files = 'BSDModuleNet/Classes/**/*'
# s.resource_bundles = {
# 'BSDModuleNet' => ['BSDModuleNet/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
s.dependency 'AFNetworking', '~> 2.3' #第三方庫
s.dependency 'BSDModuleTools' #私有庫
end
- 修改其中的內(nèi)容存筏,講解一下各字段的含義,xxx 處就是需要修改的內(nèi)容味榛。
s.name = 'xxx' :框架名稱椭坚,也是 pod search 搜索的關(guān)鍵詞,并且一定要和 .podspec 文件的名稱一樣搏色,否則驗證報錯善茎。(必須)
s.version = 'xxx' :框架版本號。(必須)
s.summary = 'xxx' : pod search 搜索框架時频轿,顯示的框架簡介垂涯。(必須)
s.homepage = 'xxx' :項目主頁地址.(必須)
s.license = { :type => 'MIT', :file => 'LICENSE' } :許可證烁焙,這里就這樣寫不用修改。(必須
s.author = { 'xxx' => 'xxx' } :作者耕赘,前面填你的英文名骄蝇,后面填你的個人郵箱。(必須)
s.source = { :git => 'xxx', :tag => s.version } :GitHub 項目的倉庫地址操骡。(必須)
s.social_media_url = 'xxx' :社交網(wǎng)址九火。(非必須)
s.ios.deployment_target = '8.0' :系統(tǒng)類型和系統(tǒng)版本。(必須)
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 支持的圖片資源岔激。
如果要在主工程中使用 pod 中的圖片,方法如下:
// 假如 podspec 中定義的 Bundle 名字為 TestBundle
s.resource_bundle = { 'TestBundle' => ['xxx/**/*.xcassets'] }
// 調(diào)用的時候要注意一下方法
s.ios.vendored_frameworks = 'xxx/xxx.framework' :用于引入自己打包的framework
s.frameworks = 'UIKit':用于引入官方的 framework
s.dependency 'xxx' :項目依賴的其他 pod 庫是掰,不能依賴未發(fā)布的庫虑鼎,版本號可以不寫。
多個依賴可以這樣寫:
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 中的文件是單獨編譯的乐尊,如果文件中引入了別的子文件夾下的代碼是編譯不通過的戚丸。
2. 驗證 podspec 文件
podspec
文件修完完成以后,command + s
保存一下扔嵌,接下來開始驗證限府。
- 依舊用終端 cd 到你的項目目錄執(zhí)行以下命令:
pod lib lint
- 如果是提示只有 warning 錯誤,并提示 but you can use '--allow-warnings' to ignore them 的話痢缎,就執(zhí)行以下命令忽略 warning 來驗證:
pod lib lint --allow-warnings
- 如果提示有 error 錯誤的話胁勺,就必須按照提示將錯誤解決掉,大多數(shù)都是 podspec 文件信息編輯有誤独旷,解決完后重新進行驗證署穗,如果提示信息不足,可以執(zhí)行以下命令以獲取更多錯誤信息:
pod lib lint --verbose
-
如果出現(xiàn)如下圖的 BSDModuleTools passed validation. 就是驗證成功了嵌洼。
驗證成功.png
3.給項目打上 tag 版本
因為 CocoaPods
是依賴項目的 tag
版本的案疲,所以必須打上 tag
版本。
-
podspec
文件驗證成功后麻养,先將改動后的文件commit
提交褐啡,接著push
推送到Git
倉庫 。 - 然后執(zhí)行以下命令打上 tag 版本鳖昌,版本名必須要和之前podspec 文件中的 s.version 一致备畦。
git tag "1.0.0" // 為 git 提交打上 tag
git push --tags // 將 tag 推送到遠程倉庫
4.發(fā)布到私有倉庫
發(fā)布之前需要先創(chuàng)建一個用來存放私有庫的 Git倉庫 (已經(jīng)建好低飒,鏈接為地址),然后將倉庫 git clone 到 ~/.cocoapods/repos/ 這個目錄懂盐。
-
然后在終端輸入 pod repo 就可以看到除了有一個 master 的官方庫以外逸嘀,還多了一個自己的私有倉庫。
clone私有庫.png 然后依舊先
cd
到你的項目目錄允粤,接著要注意的是崭倘,發(fā)布時會再次驗證你的podspec
文件,如果剛才驗證時使用了--allow-warnings
类垫,那么發(fā)布的時候也應(yīng)該使用司光,否則會出現(xiàn)相同的報錯,BSDModuleCocoapodsRepo
是我們自己的私有倉庫的名字悉患,BSDModuleTools
改成你自己維護的podspec
文件的名字残家。如果剛才是用 pod lib lint 驗證成功的,就執(zhí)行以下命令發(fā)布:
pod repo push BSDModuleCocoapodsRepo BSDModuleTools.podspec
- 如果剛才是用 pod lib lint --allow-warnings 驗證成功的售躁,就執(zhí)行以下命令發(fā)布:
pod repo push BSDModuleCocoapodsRepo BSDModuleTools.podspec --allow-warnings
最后出現(xiàn)綠色的
Updating the 'BSDModuleCocoapodsRepo' repo
Adding the spec to the 'BSDModuleCocoapodsRepo' repo
Pushing the 'BSDModuleCocoapodsRepo' repo
就算成功了-
如要項目中要使用私有倉庫來 pod install 坞淮,必須在 podfile 開頭指明私有倉庫的地址和官方倉庫地址,注意兩個地址都要指定陪捷,例如:pod引用私有庫.png
5. 私有庫依賴私有庫
這個情況就比較特殊了回窘,如果私有庫中依賴了另一個私有庫,podspec 文件中依舊要使用 s.dependency 'xxx' 來指明依賴的私有庫市袖,但是在驗證 podspec 時就不能使用 pod lib lint 來驗證了啡直,否則會找不到依賴的私有庫,需要從遠程驗證并指定私有庫的地址苍碟,下面是驗證步驟酒觅。
-
podspec
文件的編輯沒有區(qū)別,編輯完以后微峰,由于需要遠程驗證而不是本地驗證舷丹,所以需要先將編輯完的podspec
文件git push
再打上tag
。 - 然后使用以下命令開始驗證蜓肆,后面指明私有倉庫的地址和官方倉庫地址颜凯,注意兩個地址都要指定。
pod spec lint --sources='私有倉庫地址,https://github.com/CocoaPods/Specs.git' --allow-warnings
(例如:pod spec lint --sources='git@114.55.74.197:ios-team/BSDModuleCocoapodsRepo.git,https://github.com/CocoaPods/Specs.git' --allow-warnings)
- 驗證成功后發(fā)布到私有倉庫時症杏,也需要指明私有倉庫的地址和官方倉庫地址装获,如下。
pod repo push 私有倉庫名 xxx.podspec --sources='私有倉庫地址,https://github.com/CocoaPods/Specs.git' --allow-warnings
(例如:pod repo push BSDModuleCocoapodsRepo BSDModuleNet.podspec --sources='git@114.55.74.197:ios-team/BSDModuleCocoapodsRepo.git,https://github.com/CocoaPods/Specs.git' --allow-warnings)
好了厉颤,大功告成穴豫,其實過程挺簡單的,只要 podspec 文件編輯正確,就會少走很多坑精肃,以后再次更新框架的話秤涩,只需要修改 podspec 文件中的 s.version 版本,然后把你的項目再打一個 tag 版本司抱,接著再次提交到 私有庫 就可以了筐眷。