需求描述
-針對(duì)項(xiàng)目中組件化進(jìn)程中,多個(gè)私有庫(kù)及第三方庫(kù)的引用蔽豺,依賴(lài)鏈長(zhǎng)度是逐漸增加的,為了便于版本管理拧粪,需要知道項(xiàng)目中所有庫(kù)的依賴(lài)項(xiàng)修陡。
思考
了解此處的前提是,對(duì)cocoapods私有庫(kù)有所了解可霎,對(duì)于私有庫(kù)來(lái)說(shuō)魄鸦,基本信息都放在.podspec文件中。我們先來(lái)看一下podspec長(zhǎng)什么樣:
具體各個(gè)字段代表的含義癣朗,此處就不贅述了拾因。
對(duì)于依賴(lài)項(xiàng): dependency
如果這里去掉了注釋?zhuān)鞰JExtension內(nèi)部依賴(lài)了AFNetworking
我們需要的就是所有庫(kù)中的每個(gè)庫(kù)的依賴(lài)項(xiàng)
so,如果我們拿到所有庫(kù)的podspec,從中獲取dependency 內(nèi)容绢记,就解決了該問(wèn)題扁达。
方法一
對(duì)應(yīng)的.podspec文件,還有一類(lèi)文件蠢熄,.podspec.json
可以通過(guò)工程文件中 -- Pods(.xcodeproj同目錄下)--》Local Podspecs
該目錄下存放的就是.json文件
也可以通過(guò)終端中
//打印轉(zhuǎn)換后的JSON跪解。
$ pod ipc spec Name.podspec
//轉(zhuǎn)換JSON
$ pod ipc spec Name.podspec >> Name.podspec.json
轉(zhuǎn)換成json文件后,我們就可以解析json签孔,來(lái)獲取該庫(kù)的依賴(lài)項(xiàng)
這里我寫(xiě)了一個(gè)shell腳本叉讥,通過(guò)js插件 將依賴(lài)項(xiàng)輸出到out.log
for file in ./*.json
do
if test -f $file
then
jq '.dependencies' $file >../out.log
fi
if test -d $file
then
echo $file 是目錄
fi
done
方法二
方法一還需要自己寫(xiě)腳本,并且Local Podspecs 里面不一定包含所有庫(kù)的podspec的json文件
那么饥追,還有什么辦法呢图仓?
在Local Podspecs 所在同一目錄中,即Pods文件下判耕,有一個(gè)文件Manifest.lock透绩,這玩意干嘛的?
Manifest.lock 是 Podfile.lock 的副本壁熄,每次只要生成 Podfile.lock 時(shí)就會(huì)生成一個(gè)一樣的 Manifest.lock 存儲(chǔ)在 Pods 文件夾下帚豪。在每次項(xiàng)目 Build 的時(shí)候,會(huì)跑一下腳本檢查一下 Podfile.lock 和 Manifest.lock 是否一致草丧。
我們看一下里面長(zhǎng)什么樣:
PODS:
- AFNetworking/NSURLSession (3.1.0):
- AFNetworking/Reachability
- AFNetworking/Security
- AFNetworking/Serialization
- AFNetworking/Reachability (3.1.0)
- AFNetworking/Security (3.1.0)
- AFNetworking/Serialization (3.1.0)
- Masonry (1.0.0)
DEPENDENCIES:
- Masonry (= 1.0.0)
EXTERNAL SOURCES:
xxxx:
:path: "../"
SPEC CHECKSUMS:
AFNetworking: xxxxxxx
PODFILE CHECKSUM: xxxxxx
COCOAPODS: 1.2.1
這東西不是正是我們所需要的么狸臣!
最后
對(duì)于這個(gè)問(wèn)題,也只是為了知道工程的所有依賴(lài)項(xiàng)昌执,如果某一個(gè)組建庫(kù)出現(xiàn)問(wèn)題烛亦,便于快速定位和不遺漏解決問(wèn)題。需求解決了懂拾,也學(xué)到j(luò)s煤禽,js插件能過(guò)快速解析json文件輸出所需內(nèi)容。
對(duì)于podfile.lock可參考??