CocoaPods的原理與技巧(二)

下載原理

pod 'LPLineChartView', :git => 'https://github.com/xiaofei86/LPLineChartView.git', :tag => '1.0.0'

當(dāng)使用 CocoaPods 導(dǎo)入私有庫時(shí),CocoaPods 先是根據(jù):git => 'https://github.com/xiaofei86/LPLineChartView.git'找到對(duì)應(yīng)的 Git 倉庫,然后根據(jù):tag => '1.0.0'定位到對(duì)應(yīng) tag 的提交(如果沒有注明 Pod 依賴庫版本則定位到最后一次的提交),然后在這次提交中檢索到后綴為“.podspec”的文件(文件可以隨便命名)。找到 Podspec 文件后先要驗(yàn)證 s.name 是否與Podfile中的一致,如果不一致則 install 時(shí)會(huì)報(bào)錯(cuò)“[!] Unable to find a specification for 'LPLineChartView'.”。驗(yàn)證成功后,就會(huì)根據(jù) Podspec 中的 s.source_files 找到需要導(dǎo)入代碼文件,并通過其他的數(shù)據(jù)找到對(duì)應(yīng)的配置文件或資源文件等。最后,將其下載到本地項(xiàng)目中。如果是公有庫,這些原理也相同。只是公有庫需要將 Podspec 文件上傳到 CocoaPods。在導(dǎo)入的時(shí)候通過名字 LPLineChartView 去 CocoaPods 匹配對(duì)應(yīng)的 Podspec ,然后根據(jù)"s.source"去找到對(duì)應(yīng)的倉庫和對(duì)應(yīng)的版本,然后會(huì)再去匹配新的 Podspec,后邊的步驟就完全相同了。

  • 對(duì)下載原理的驗(yàn)證有興趣的可以點(diǎn)擊這里查看。

集成原理

當(dāng)所有的依賴庫都下載完后,CocoaPods 會(huì)將所有的依賴庫都放到另一個(gè)名為 Pods 的項(xiàng)目中,然后讓主項(xiàng)目依賴 Pods 項(xiàng)目。這樣,源碼管理工作都從主項(xiàng)目移到了 Pods 項(xiàng)目中。Pods 項(xiàng)目最終會(huì)編譯成一個(gè)名為 libPods.a 的文件,主項(xiàng)目只需要依賴這個(gè).a文件即可。對(duì)于資源文件,CocoaPods 提供了一個(gè)名為 Pods-resources.sh 的 bash 腳本,該腳本在每次項(xiàng)目編譯的時(shí)候都會(huì)執(zhí)行,將 Pods 依賴庫的各種資源文件復(fù)制到目標(biāo)目錄中。CocoaPods 還通過一個(gè)名為 Pods.xcconfig 的文件來在編譯時(shí)設(shè)置所有的依賴和參數(shù)。

版本控制原理

當(dāng)執(zhí)行完 pod install 之后,CocoaPods會(huì)生成一個(gè)名為 Podfile.lock 的文件。Podfile.lock 文件最大得用處在于多人開發(fā)。如果你沒有在 Podfile 中指定 Pods 版本pod 'LPLineChartView',那么默認(rèn)為獲取當(dāng)前 LPLineChartView 依賴庫的最新版本。當(dāng)團(tuán)隊(duì)中的某個(gè)人執(zhí)行完 pod install 命令后,生成的 Podfile.lock 文件就記錄下了當(dāng)時(shí)最新 Pods 依賴庫的版本,這時(shí)團(tuán)隊(duì)中的其它人 check 下來這份包含 Podfile.lock 文件的工程以后,再去執(zhí)行 pod install 命令時(shí),獲取下來的 Pods 依賴庫的版本就和最開始用戶獲取到的版本一致。如果沒有 Podfile.lock 文件,后續(xù)所有用戶執(zhí)行 pod install 命令都會(huì)獲取最新版本的 LPLineChartView,這就有可能造成同一個(gè)團(tuán)隊(duì)使用的依賴庫版本不一致,這對(duì)團(tuán)隊(duì)協(xié)作來說絕對(duì)是個(gè)災(zāi)難!在這種情況下,如果團(tuán)隊(duì)想使用當(dāng)前最新版本的 LPLineChartView 依賴庫,有兩種方案:1.更改 Podfile,使其指向最新版本的 LPLineChartView 依賴庫;2.執(zhí)行 pod update 命令;鑒于 Podfile.lock 文件對(duì)團(tuán)隊(duì)協(xié)作如此重要,所以應(yīng)該加入到版本控制里面(This file should always be kept under version control)。

常用技巧

  • 不更新podspec

CocoaPods 在執(zhí)行 pod install 和 pod update 時(shí),會(huì)默認(rèn)先更新一次 Podspec 索引。使用 --no-repo-update 參數(shù)可以禁止其做索引更新操作。如下所示:

pod install --no-repo-update
pod update --no-repo-update
  • 查看更新細(xì)節(jié)

pod install 和 pod update 的執(zhí)行引發(fā)了很多操作。了解底層運(yùn)行過程最簡單的方式就是給 pod install 語句添加 –verbose 參數(shù)。這樣就可以看到 pod install 和 pod update 執(zhí)行過程的詳細(xì)細(xì)節(jié)。

pod install --verbose
pod update --verbose
  • 使用私有的pods

我們可以直接指定某一個(gè)依賴的 Podspec,這樣就可以使用公司內(nèi)部的私有庫。該方案有利于使企業(yè)內(nèi)部的公共項(xiàng)目支持 CocoaPods。

pod 'LPLineChartView', :git => 'https://github.com/xiaofei86/LPLineChartView.git', :tag => '1.0.0'
  • 調(diào)整podfile位置

通常情況下我們都推薦 Podfile 文件都放在工程根目錄。但 Podfile 也可以放在其他目錄下,這時(shí)只需在 Podfile 中指定工程的路徑即可。

xcodeproj "LPLineChartView/LPLineChartView.xcodeproj" 
xcodeproj "../LPLineChartView.xcodeproj" 
  • 管理Pods依賴庫版本

    pod 'LPLineChartView' //不顯式指定依賴庫版本,表示每次都獲取最新版本
    pod 'LPLineChartView', '2.0' //只使用2.0版本
    pod 'LPLineChartView', '> 2.0' //使用大于2.0的版本
    pod 'LPLineChartView', '>= 2.0' //使用大于或等于2.0的版本
    pod 'LPLineChartView', '< 2.0' //使用小于2.0的版本
    pod 'LPLineChartView', '<= 2.0' //使用小于或等于2.0的版本
    pod 'LPLineChartView', '~> 0.1.2' //使用大于等于0.1.2但小于0.2的版本
    pod 'LPLineChartView', '~> 0.1' //使用大于等于0.1但小于1.0的版本
    pod 'LPLineChartView', '~> 0' //使用大于0的版本,和什么都不寫效果相同

由于 CocoaPods 建議采用pod 'LPLineChartView', '~> 0.1.2'這種寫法,所以在制作 Pod 時(shí),接口不向前兼容的更新最好修改版本號(hào)的第二位數(shù)。

博客:xuyafei.cn
簡書:jianshu.com/users/2555924d8c6e
微博:weibo.com/xuyafei86
Github:github.com/xiaofei86

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 項(xiàng)目組件化、平臺(tái)化是技術(shù)公司的共同目標(biāo),越來越多的技術(shù)公司推崇使用pod管理第三方庫以及私有組件,一方面使項(xiàng)目架構(gòu)...
    swu_luo閱讀 22,296評(píng)論 0 39
  • 一. CocoaPods的介紹 什么是CocoaPods?CocoaPods是一個(gè)負(fù)責(zé)管理iOS項(xiàng)目中第三方開源庫...
    輝712閱讀 4,004評(píng)論 0 7
  • Ruby 安裝 要安裝cocospods 首先需要安裝ruby,可以先安裝xcode,再安裝macport ,最后...
    山天大畜閱讀 1,902評(píng)論 0 1
  • 01 今天,我所在的寫作組,有2個(gè)小伙伴退群了。 退群的原因很簡單,一個(gè)是因?yàn)槊τ诳荚?;一個(gè)則是因?yàn)閯倱Q了崗位,工...
    希希13閱讀 386評(píng)論 0 1
  • 1、天天讀經(jīng) 信仰及生活的準(zhǔn)則 【詩119篇】105你的話是我腳前的燈,是我路上的光。 【提后3:16-17】16...
    古道新釋閱讀 522評(píng)論 0 1