iOS 組件化(一) - CocoaPods原理理論篇
iOS 組件化(二) - 遠程/本地管理私有庫
iOS 組件化(三) - 組件化工程介紹
本章節(jié)解決如下疑問
1.安裝CocoaPods后并拉取遠程的三方庫到本地,其三方庫會存儲在本地嗎
2.CocoaPods/Spec是什么
3.CocoaPods的底層原理
一、查看CocoaPods的目錄
$ open /Users/xxx/.cocoapods/repos
找到CocoaPods本地Specs目錄(這里面的數(shù)據(jù)是從遠程CocoaPods的Specs里拉取下來的,這個Specs就是CocoaPods下載完后,拉取三方庫很慢的原因)

隨意進入里面的文件夾,在一群打散文件夾里可以找到這些三方庫,版本號文件夾,里面只存儲了一個json文件

(如何定位到你想要找到的三方庫目錄呢?比如AFNetworking,取它的32位Hash值的前三位,就能找到AFNetworking的目錄)
這個json文件的內(nèi)容只存儲了該三方庫的信息而已。
{
"name": "Holarchy",
"version": "0.0.1",
"summary": "A subclass of UIScrollView that provides painless building of forms etc.",
"description": "\n A subclass of UIScrollView that provides painless building of forms etc.\n",
"homepage": "https://github.com/rimsan/Holarchy",
"license": "MIT",
"authors": {
"Roman Petryshen": "roman@travelbird.com"
},
"source": {
"git": "https://github.com/rimsan/Holarchy.git",
"tag": "0.0.1"
},
"social_media_url": "https://twitter.com/RomanPetryshen",
"platforms": {
"ios": "8.0"
},
"requires_arc": true,
"source_files": "Holarchy/*",
"frameworks": "UIKit"
}
結(jié)論一:CocoaPods本地目錄只保存了三方庫的各個版本的json信息。
pod update先更新的是新版本三方庫的json信息,然后再拉取新版本的三方庫。
二、CocoaPods的底層原理
CocoaPods遠程倉庫的Specs
它存儲了很多很多的三方庫各個版本對應的庫的信息

CocoaPods本地存儲的Specs
它是通過輸入命令$ pod repo update從遠程倉庫的Specs拉取到本地(這是一個特別漫長的過程),于是乎我們本地的Specs就同步了遠程的Specs

常用的pod命令
$ pod search AFNetworkinng
查詢遠程倉庫Specs里的AFNetworkinng庫的版本記錄
$ pod install
1.若沒有指定庫的版本號,Profile聲明的三方庫找本地Specs里最新版本號,去git遠程倉庫拉取對應的三方庫。
2.若指定庫的版本號,則找本地Specs里三方庫對應的版本信息,去git遠程倉庫拉取對應的三方庫(若拉取不成功,則需要update操作)。
$ pod update
根據(jù)Profile聲明的三方庫,去更新本地Specs,然后拉取最新版本的三方庫。
$ pod repo update
本地Specs與遠程Specs進行同步操作。
CocoaPods的底層原理圖如下:

三、建立私倉理論
了解CocoaPods原理之后,我們就能夠通過其原理建立自己的組件私有倉庫。
1.創(chuàng)建自己的遠程私有倉庫
一般情況是在公司的服務器去配置git倉庫,我們可以選擇github、碼云等等。
創(chuàng)建一個遠程私有倉庫Spec,得到一個git鏈接。
將這個遠程私有倉庫Spec同步到本地/Users/xxx/.cocoapods/repos
(本地的repos目錄下master下文件,master是git的遠程索引庫)
2.創(chuàng)建自己的組件工程
創(chuàng)建遠程組件工程的地址
通過pod命令可創(chuàng)建自己的組件工程,并寫好主要的代碼和把資源文件添加到工程。
修改工程里的.podSpec文件,與遠程創(chuàng)建遠程組件工程地址關(guān)聯(lián);
并且將本地組件工程與遠程組件工程地址關(guān)聯(lián)。
將工程里的xxx..podspec文件交由本地Specs倉庫管理