組件化開發(fā)流程__(組件打包發(fā)布)

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 來驗證了啡直,否則會找不到依賴的私有庫,需要從遠程驗證并指定私有庫的地址苍碟,下面是驗證步驟酒觅。


依賴私有庫.png
  • 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 版本司抱,接著再次提交到 私有庫 就可以了筐眷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市习柠,隨后出現(xiàn)的幾起案子匀谣,更是在濱河造成了極大的恐慌,老刑警劉巖资溃,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件武翎,死亡現(xiàn)場離奇詭異,居然都是意外死亡溶锭,警方通過查閱死者的電腦和手機宝恶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趴捅,“玉大人垫毙,你說我怎么就攤上這事」鞍螅” “怎么了综芥?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長欺栗。 經(jīng)常有香客問我毫痕,道長征峦,這世上最難降的妖魔是什么迟几? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮栏笆,結(jié)果婚禮上类腮,老公的妹妹穿的比我還像新娘。我一直安慰自己蛉加,他們只是感情好蚜枢,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著针饥,像睡著了一般厂抽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丁眼,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天筷凤,我揣著相機與錄音,去河邊找鬼。 笑死藐守,一個胖子當著我的面吹牛挪丢,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播卢厂,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乾蓬,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了慎恒?” 一聲冷哼從身側(cè)響起任内,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎融柬,沒想到半個月后族奢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡丹鸿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年越走,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片靠欢。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡廊敌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出门怪,到底是詐尸還是另有隱情骡澈,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布掷空,位于F島的核電站肋殴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏坦弟。R本人自食惡果不足惜护锤,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望酿傍。 院中可真熱鬧烙懦,春花似錦、人聲如沸赤炒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽莺褒。三九已至掩缓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間遵岩,已是汗流浹背你辣。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绢记。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓扁达,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蠢熄。 傳聞我的和親對象是個殘疾皇子跪解,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容