美文网首页我爱编程
快速找到pod库中的所有依赖链

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

作者: JasonLee宸 | 来源:发表于2018-04-13 15:38 被阅读599次

需求描述

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

思考

了解此处的前提是,对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 带来的痛

相关文章

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

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

  • Cocoapods 1.10

    更优雅、更快速的pod依赖(编译更快速) 更简洁,更快速的repo仓库 (下载库更快速) 既然现在pod这么有好的...

  • pod lint lint 报错

    环境(现象) 私有库(A)依赖私有库(B) podfile中 pod ‘B’,podspec 中 s.depend...

  • Include of non-modular header in

    产生原因 pod 私有库中依赖其他库,在头文件中引用了依赖库的头文件 解决办法: 1 去掉头文件中的依赖,放在.m...

  • iOS:SDK开发「二」

    本篇主要讲在自己的pod库中,添加系统库和第三方库 自己的pod中需要依赖系统库,比如libc++.tbd和AVF...

  • XCode 8中使用UITest

    1: 在podfile中添加单元测试依赖库 1:在pod file添加依赖库 不添加单元测试会报file not ...

  • CocoaPods-Unable to satisfy the

    记录CocoaPods遇到的问题 准备好把所有要用到的依赖库加入到Podfile文件中后,在这终端输入pod in...

  • cocoapods 本地私有库依赖

    本地私有库依赖 pod spec create xxx 生成.podspe .podspec 中 s.homepa...

  • Cocopods 提示target has transitive

    制作自己的pod库时,依赖其他第三方库,在pod install时提示: 解决方案:在自己的pod库.podspe...

  • CocoaPods详解2:基本功能结构

    一:CocoaPods介绍 CocoaPods将所有依赖的库都放在一个名为Pods的项目下,然后让主项目依赖Pod...

网友评论

    本文标题:快速找到pod库中的所有依赖链

    本文链接:https://www.haomeiwen.com/subject/payckftx.html