為什么我還在寫 CocoaPods 的教程

CocoaPods 已經(jīng)出現(xiàn)很多年了牺六,相信很多同學(xué)都會使用梯投,但是你真的知道 CocoaPods 是如何工作的嗎陌僵?

RubyGems

The RubyGems software allows you to easily download, install, and use ruby software packages on your system. The software package is called a “gem” which contains a packaged Ruby application or library.

人們特別是電腦工程師們胎撤,常常從機(jī)器著想。他們認(rèn)為:“這樣做府寒,機(jī)器就能運(yùn)行的更快魁衙;這樣做,機(jī)器運(yùn)行效率更高株搔;這樣做剖淀,機(jī)器就會怎樣怎樣怎樣∠朔浚”實(shí)際上纵隔,我們需要從人的角度考慮問題,人們怎樣編寫程序或者怎樣使用機(jī)器上應(yīng)用程序炮姨。我們是主人捌刮,他們是仆人 ———— Ruby設(shè)計初衷

CocoaPods 是使用 Ruby 語言編寫的一個作為 iOS 的包管理工具,而 RubyGems 是 Ruby 的包管理工具舒岸。安裝 CocoaPods 需要包管理工具 RubyGems 安裝绅作,而 RubyGems 是 Mac 自帶的工具。關(guān)于RubyGems的更多信息吁津,可以參考 官方文檔 棚蓄。不過,RubyGems 中的 Gems 在國內(nèi)訪問速度很慢碍脏,不過可以使用 Ruby China梭依。如果你想大體了解 Ruby,可以看這篇文章 Ruby典尾。讀到這里相信你對安裝 CocoaPods 已經(jīng)有了一定的了解役拴。

CocoaPods 會被安裝到 /Users/wangsuyan/.cocoapods/repos

更新到最新版本:sudo gem install cocoapods

安裝指定版本: sudo gem install cocoapods -v 1.3.1

Git

掌握 CocoaPods ,需要了解一些 Git 的基本知識钾埂,當(dāng)然你需要至少有一個代碼托管平臺河闰,比如 GitHub。當(dāng)然 這篇文章 講的很不錯褥紫。下面主要說明與這篇文章相關(guān)的內(nèi)容姜性。

  • git add -A
    把文提交到暫存區(qū),等待提交

  • git commit -m "代碼提交信息"
    提交代碼到 HEAD髓考,現(xiàn)在部念,你的改動已經(jīng)提交到了 HEAD,但是還沒到你的遠(yuǎn)端倉庫

  • git tag 1.0
    給當(dāng)前要提交的版本打個標(biāo)簽

  • git push --tags
    提交所有的 tag 到遠(yuǎn)端倉庫

Pod init

它首先需要判斷當(dāng)前目錄有沒有 XCODEPROJ 項(xiàng)目,如果沒有直接報錯儡炼;若果有單個 XCODEPROJ 項(xiàng)目妓湘,會直接創(chuàng)建一個 podfile 文件;如果有多個XCODEPROJ 項(xiàng)目乌询,需要指定一個項(xiàng)目榜贴,否則會報錯:

[!] Multiple Xcode projects found, please specify one

Podfile

經(jīng)過 Pod init 后會生成一個 Podfile 文件。它是一種規(guī)范妹田,描述了一個或多個Xcode項(xiàng)目(target)的依賴關(guān)系唬党。

最簡單的 Podfile 文件,它僅僅給 Target lefeKit 添加一個 SDWebImage 庫秆麸。

platform :ios, '9.0'
target 'lefeKit' do
  pod 'SDWebImage'
end
  • use_frameworks!

使用 Swift 或者動態(tài)庫時需要

  • 版本初嘹,比如:pod 'SDWebImage', '~> 3.7.0'

假如 SDWebImage 目前只有下列版本:

4.1.0, 4.0.0, 4.0.0-beta2, 4.0.0-beta, 
3.8.2, 3.8.1, 3.8.0, 3.7.6, 3.7.5, 3.7.4, 3.7.3, 3.7.2, 3.7.1, 3.7.0, 3.6, 3.5.4, 3.5.2, 3.5.1, 3.5,3.4, 3.3, 3.2, 3.1, 3.0, 
2.7.4, 2.7, 2.6, 2.5, 2.4

那么 pod 'SDWebImage', '~> 3.7.0' 只會安裝 3.7.6 版本,也就是最后一個 . 的最高版本沮趣;

pod 'SDWebImage', '> 3.7.0' 安裝大于 3.7.0 版本屯烦,當(dāng)然有 >=, <=<

pod 'SDWebImage', '3.7.6' 指定版本為 3.7.6

  • :path 指定本地的 Pod 庫

pod 'FLoatDemo', :path => '~/Desktop/TestDemo/FLoatDemo'

這里的地址不是隨便一個目錄就可以,必須是一個 Pod 庫房铭,不然會報錯

No podspec found for `FLoatDemo` in `~/Desktop/TestDemo/FLoatDemo`
  • 指定來源

如果第三方庫不能滿足您項(xiàng)目的需求驻龟,那么你可以 Fork一份,來修改第三方代碼缸匪。

pod 'SDWebImage', :git => 'https://github.com/lefex/SDWebImage.git', :commit => '94cdb773d74967f7ba2feecf0d151012bd965fde'

還可以有::branch翁狐, :tag => '3.1.1'

  • Subspecs

某個庫可能很大,但是你僅僅需要某一部分凌蔬,你只需要導(dǎo)入你需要的那部分即可露懒,比如:

SDWebimage.png

如何我們只需要 pod ‘SDWebImage/Core’
也可以:pod 'SDWebImage', :subspecs => ['Core', 'GIF']

  • 去除警告

去除全部警告
inhibit_all_warnings!

去除某個庫的警告
pod 'SDWebImage', '~> 4.1.0', :inhibit_warnings => true

pod install

如果修改了 Podfile 文件,那么執(zhí)行 pod install砂心。執(zhí)行 pod install 后懈词,會根據(jù) Podfile 中的描述來安裝所依賴的庫。這時會生成很多文件辩诞。

  • Podfile.lock

這個文件主要用來鎖定 Pods 庫的版本坎弯。保證組內(nèi)成員所使用的三方庫都是統(tǒng)一版本。如果處理不當(dāng)译暂,這里很可能發(fā)生沖突抠忘,而且比較嚴(yán)重。

  • Manifest.lock

是 Podfile.lock 的副本外永,每次只要生成 Podfile.lock 時就會生成一個一樣的 Manifest.lock 存儲在 Pods 文件夾下崎脉。在每次項(xiàng)目 Build 的時候,會跑一下腳本檢查一下 Podfile.lock 和 Manifest.lock 是否一致伯顶,如果不一致就拋出異常荧嵌。這是它的腳本呛踊。

diff "${PODS_PODFILE_DIR_PATH}/Podfile.lock" "${PODS_ROOT}/Manifest.lock" > /dev/null
if [ $? != 0 ] ; then
    # print error to STDERR
    echo "error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation." >&2
    exit 1
fi
# This output is used by Xcode 'outputs' to avoid re-running this script phase.
echo "SUCCESS" > "${SCRIPT_OUTPUT_FILE_0}"

pod update

僅僅把 Pods 更新到新的版本時需要。比如 lefeKit 項(xiàng)目中當(dāng)前 SDWebImage 的版本為 3.7.0啦撮,這時我修改 Podfile 文件為:pod 'SDWebImage', '>3.6.0',執(zhí)行 pod install 后汪厨,本地的 SDWebImage 的版本任然為 3.7.0 赃春。當(dāng)執(zhí)行 pod update 后變?yōu)?4.1.0

發(fā)布一個 Pod 庫

創(chuàng)建

下面以 lefeKit 為例,說明創(chuàng)建私有庫的過程劫乱。

  • pod lib create lefeKit
    這時需要輸入提示問題织中,按照官方文檔 逐步完成;
  • 登錄自己的 github衷戈,創(chuàng)建一個名叫 lefeKit 的項(xiàng)目狭吼;
  • 修改 lefeKit.podspec 文件,
    s.source = { :git => 'https://github.com/lefex/lefeKit.git', :tag => s.version.to_s } 需要是你在 github 上創(chuàng)建的項(xiàng)目地址殖妇;s.homepage = 'https://github.com/lefex/lefeKit'
  • 根目錄下(lefeKit)創(chuàng)建目錄 Classes
  • pod lib lint 檢查lefeKit.podspec 文件是否有錯刁笙,成功則顯示 lefeKit passed validation
  • 一切無誤后谦趣,執(zhí)行 pod trunk push lefeKit.podspec
  • pod trunk me 可以查看我注冊的信息

這些步驟不是所有的都有先后順序疲吸,創(chuàng)建私有庫,關(guān)鍵是創(chuàng)建 xxx.podspec 文件和一個 Repository前鹅,讓 xxx.podspec 關(guān)聯(lián)到 Repository摘悴。

發(fā)布成功的提示為:

--------------------------------------------------------------------------------
 ??  Congrats

 ??  lefeKit (1.0.0) successfully published
 ??  August 28th, 21:58
 ??  https://cocoapods.org/pods/lefeKit
 ??  Tell your friends!
--------------------------------------------------------------------------------

更新私有庫

  • 修改 lefeKit.podspec 文件中的版本號;
  • tag tat 1.0.0舰绘,添加一個 tag蹂喻;
  • git push --tags
  • pod lib lint
  • pod trunk push lefeKit.podspec

錯誤總結(jié)

Authentication token is invalid or unverified. Either verify it with the email that was sent or register a new session.

遇到這個錯誤說明你還沒有注冊賬號,注冊一個郵箱 pod trunk register wsyxyxs@126.com

WARN  | url: The URL (https://github.com/lefex1/lefeKit) is not reachable

確保地址可以正確訪問 https://github.com/lefex1/lefeKit 應(yīng)為 https://github.com/lefex1/lefeKit

ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.

找不到資源文件捂寿,在根目錄下創(chuàng)建 Classes 文件夾口四,并創(chuàng)建文件。s.source_files = 'lefeKit/Classes/**/*'

Unable to find a pod with name, author, summary, or description matching `lefeKit`

這個是本地緩存的問題:
清理緩存 rm -rf ~/Library/Caches/Cocoapods者蠕,執(zhí)行 pod setup

技巧

所有命令后添加 --verbose窃祝,會顯示更多的調(diào)試信息。

推薦閱讀

【iOS 國際化】如何把國際化時需要3天的工作量縮減到10分鐘
Promise
微信iOS數(shù)據(jù)庫是什么樣的

感謝

關(guān)于 Podfile.lock 帶來的痛

BY Blog

pluto-y

Cocoapods

Ruby China

===== 我是有底線的 ======
喜歡我的文章踱侣,歡迎關(guān)注我的新浪微博 Lefe_x粪小,我會不定期的分享一些開發(fā)技巧

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抡句,隨后出現(xiàn)的幾起案子探膊,更是在濱河造成了極大的恐慌,老刑警劉巖待榔,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逞壁,死亡現(xiàn)場離奇詭異流济,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)腌闯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門绳瘟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人姿骏,你說我怎么就攤上這事糖声。” “怎么了分瘦?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵蘸泻,是天一觀的道長。 經(jīng)常有香客問我嘲玫,道長悦施,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任去团,我火速辦了婚禮抡诞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渗勘。我一直安慰自己沐绒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布旺坠。 她就那樣靜靜地躺著乔遮,像睡著了一般鲫凶。 火紅的嫁衣襯著肌膚如雪坎匿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天丢早,我揣著相機(jī)與錄音璧疗,去河邊找鬼坯辩。 笑死,一個胖子當(dāng)著我的面吹牛崩侠,可吹牛的內(nèi)容都是我干的漆魔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼却音,長吁一口氣:“原來是場噩夢啊……” “哼改抡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起系瓢,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤阿纤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后夷陋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欠拾,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡胰锌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了藐窄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片资昧。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖荆忍,靈堂內(nèi)的尸體忽然破棺而出榛搔,到底是詐尸還是另有隱情,我是刑警寧澤东揣,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站腹泌,受9級特大地震影響嘶卧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凉袱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一芥吟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧专甩,春花似錦钟鸵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至种樱,卻和暖如春蒙袍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嫩挤。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工害幅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岂昭。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓以现,卻偏偏與公主長得像,于是被迫代替她去往敵國和親约啊。 傳聞我的和親對象是個殘疾皇子邑遏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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

  • 項(xiàng)目組件化、平臺化是技術(shù)公司的共同目標(biāo)棍苹,越來越多的技術(shù)公司推崇使用pod管理第三方庫以及私有組件无宿,一方面使項(xiàng)目架構(gòu)...
    swu_luo閱讀 21,722評論 0 39
  • 一. CocoaPods的介紹 什么是CocoaPods?CocoaPods是一個負(fù)責(zé)管理iOS項(xiàng)目中第三方開源庫...
    輝712閱讀 3,922評論 0 7
  • CocoaPods 是什么枢里? CocoaPods 是一個負(fù)責(zé)管理 iOS 項(xiàng)目中第三方開源庫的工具孽鸡。CocoaPo...
    朝洋閱讀 25,678評論 3 51
  • Ruby 安裝 要安裝cocospods 首先需要安裝ruby蹂午,可以先安裝xcode,再安裝macport 彬碱,最后...
    山天大畜閱讀 1,854評論 0 1
  • 《北京愛上西雅圖之不二情書》其實(shí)與之前的《北京愛上西雅圖》在情節(jié)上一點(diǎn)關(guān)系都沒有豆胸,只不過男女主演、導(dǎo)演都相同巷疼。個人...
    zhenzhenyes閱讀 410評論 0 3