本文是對瓜神的Cocoapos歷險記系列中問題的解答蝉稳,用來記錄學(xué)習過程~
1.0版本管理工具及 Ruby 工具鏈環(huán)境
- PM 是如何進行依賴庫的版本管理童谒?
答:
- PM 工具基本圍繞這個兩個文件來現(xiàn)實包管理:
- 描述文件:聲明了項目中存在哪些依賴焚辅,版本限制;
- 鎖存文件(Lock 文件):- 記錄了依賴包最后一次更新時的全版本列表刺下。
- Ruby 和 RVM/rbenv 之間的關(guān)系是什么?
答
RVM
[11] 和rbenv
[12] 都是管理多個 Ruby 環(huán)境的工具,它們都能提供不同版本的 Ruby 環(huán)境管理和切換可帽。
- Gem、Bundler 和 CocaPods 之間的關(guān)系是什么窗怒?>答:
- Gem:用ruby編寫的工具或依賴映跟;
- Bundler[15] 是管理 Gem 依賴的工具,可以隔離不同項目中 Gem 的版本和依賴環(huán)境的差異扬虚,也是一個 Gem努隙。
- CocoaPods 其實是 iOS 版的 RubyGems + Bundler 組合
- 如何通過 Bundler 來管理工程中的 Gem 環(huán)境?
答:
- 初始化Bundle環(huán)境辜昵,生成Gemfile文件荸镊,在文件列出gem列表和版本號
5.如何鎖死工程內(nèi)部的 CocoaPods 版本?
答:
- 在 Gemfile 中聲明使用的 CocoaPods 版本并安裝
2.0 整體把握 CocoaPods 核心組件
- 簡單概述 CocoaPods 的核心模塊?答:
- CLAide:命令解析器,如解析pod install躬存、pod update
- cocoapods-core :用于 CocoaPods 中模板文件的解析收厨,包括 Podfile、.podspec优构,以及所有的 .lock 文件中特殊的 YAML 文件诵叁。
- cocoapods-downloader:是用于下載源碼的小工具,它支持各種類型的版本管理工具钦椭,包括 HTTP / SVN / Git / Mercurial拧额。它可以提供 tags、commites彪腔,revisions侥锦,branches 以及 zips 文件的下載和解壓縮操作。
- Molinillo:是 CocoaPods 對于依賴仲裁算法的封裝德挣,它是一個具有前向檢查的回溯算法恭垦。不僅在 Pods 中,Bundler 和 RubyGems 也是使用的這一套仲裁算法格嗅。
- Xcodeproj :可通過 Ruby 來操作 Xcode 項目的創(chuàng)建和編輯等番挺。可友好的支持 Xcode 項目的腳本管理和 libraries 構(gòu)建屯掖,以及 Xcode 工作空間 (.xcworkspace) 和配置文件 .xcconfig 的管理。
- cocoapods-plugins:插件管理功能粪摘,其中有 pod plugin 全套命令徘意,支持對于 CocoaPods 插件的列表一覽(list)轩褐、搜索(search)灾挨、創(chuàng)建(create)功能。
- pod 命令是如何找到并啟動 CocoaPods 程序的地技? > 答:
- 通過
/usr/local/bin/pod
腳本文件莫矗,調(diào)用Gem.activate_bin_path 和 Gem.bin_path 用于找到 CocoaPods 的安裝目錄 cocoapods/bin作谚,最終加載該目錄下的 /pod 文件- 再通過 eval[8] 的手段調(diào)起我們需要的 CocoaPods 工程
- 通過調(diào)用 Pod::Command.run(ARGV),實例化了一個 CLAide::Command 對象雀监,開始我們的 CLAide 命令解析階段
- 簡述 pod install 流程眨唬?> 答:
- 環(huán)境準備
- 解析依賴沖突
- 下載依賴
- 驗證target
- 生成工程文件
- 寫入依賴
- 結(jié)束回調(diào)
- resolve_dependencies 階段中的 pre_download 是為了解決什么問題匾竿?> 答:
- 主要是解決當我們在通過 Git 地址引入的 Pod 倉庫的情況下,系統(tǒng)無法從默認的 Source 拿到對應(yīng)的 Spec岭妖,需要直接訪問我們的 Git 地址下載倉庫的 zip 包,并取出對應(yīng)的 podspec 文件假夺,從而進行對比分析废离。
- validate_targets 都做了哪些校驗工作?> 答:
- 驗證是否有重名的 framework
- 驗證動態(tài)庫中是否有靜態(tài)鏈接庫。此時如果項目的 Podfile 設(shè)置了 use_framework! 以動態(tài)鏈接方式打包的時肖方,則會觸發(fā)該錯誤未状。
- 確保 Swift Pod 的 Swift 版本正確配置且互相兼容的司草。
- 檢測 Swift 庫的依賴庫是否支持了 module埋虹,這里的 module 主要是針對 Objective-C 庫而言搔课。
- 檢測是否所有的 Pod Target 中版本一致性問題。