我爱编程

快速找到pod库中的所有依赖链

2018-04-13  本文已影响599人  JasonLee宸

需求描述

-针对项目中组件化进程中,多个私有库及第三方库的引用,依赖链长度是逐渐增加的,为了便于版本管理,需要知道项目中所有库的依赖项。

思考

了解此处的前提是,对cocoapods私有库有所了解,对于私有库来说,基本信息都放在.podspec文件中。我们先来看一下podspec长什么样:


image.png

具体各个字段代表的含义,此处就不赘述了。
对于依赖项: dependency
如果这里去掉了注释,代表MJExtension内部依赖了AFNetworking
我们需要的就是所有库中的每个库的依赖项
so,如果我们拿到所有库的podspec,从中获取dependency 内容,就解决了该问题。

方法一

对应的.podspec文件,还有一类文件,.podspec.json
可以通过工程文件中 -- Pods(.xcodeproj同目录下)--》Local Podspecs
该目录下存放的就是.json文件
也可以通过终端中
//打印转换后的JSON。
$ pod ipc spec Name.podspec
//转换JSON
$ pod ipc spec Name.podspec >> Name.podspec.json

转换成json文件后,我们就可以解析json,来获取该库的依赖项
这里我写了一个shell脚本,通过js插件 将依赖项输出到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

方法二

方法一还需要自己写脚本,并且Local Podspecs 里面不一定包含所有库的podspec的json文件
那么,还有什么办法呢?
在Local Podspecs 所在同一目录中,即Pods文件下,有一个文件Manifest.lock,这玩意干嘛的?

Manifest.lock 是 Podfile.lock 的副本,每次只要生成 Podfile.lock 时就会生成一个一样的 Manifest.lock 存储在 Pods 文件夹下。在每次项目 Build 的时候,会跑一下脚本检查一下 Podfile.lock 和 Manifest.lock 是否一致。
我们看一下里面长什么样:

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
image.png

这东西不是正是我们所需要的么!

最后

对于这个问题,也只是为了知道工程的所有依赖项,如果某一个组建库出现问题,便于快速定位和不遗漏解决问题。需求解决了,也学到js,js插件能过快速解析json文件输出所需内容。
对于podfile.lock可参考👇

关于 Podfile.lock 带来的痛

上一篇下一篇

猜你喜欢

热点阅读