依赖关系可视化

[toc]

依赖关系可视化

参考文档:

一、cocoapods依赖关系可视化

cocoapods管理的三方库之间有时候存在依赖关系,Podfile.lock藏满了各个版本库的版本号信息和彼此的依赖关系。

1、网页可视化导出:cocoapods-graph

终端安装插件:

1
pip install cocoapods-graph

使用方式:

进入到工程的根目录,执行:

1
2
3
cd ~/Project/CQComponent/UIKit-Overlay-iOS/TSOverlayDemo

cocoapods-graph -f Podfile.lock --html

生成 Podfile.lock.html 文件,

cocoapods-graph-01

其内容展示如下:

cocoapods-graph-02

2、图片可视化导出:cocoapods-dependencies

终端安装插件:

1
2
gem install cocoapods-dependencies
brew install graphviz

使用方式:

进入到工程的根目录,执行:

1
pod dependencies [PODSPEC] [--graphviz] [--image]
  • pod 是 CocoaPods 的命令行工具。
  • dependencies 是 CocoaPods 中的一个命令,用于显示特定 pod 或项目中所有 pod 的依赖关系。
  • [PODSPEC] 是一个可选参数,用于指定特定 pod 的名称。如果你提供了 pod 的名称,它将显示该 pod 的依赖关系。如果你没有提供 pod 的名称,它将显示项目中所有 pod 的依赖关系。
  • --graphviz 是一个可选标志,它会生成一个 Graphviz DOT 文件(一般为Podfile.gv),表示 pod 的依赖关系图。这个文件可以用于可视化依赖关系。
  • --image 是一个可选标志,它会从 Graphviz DOT 文件生成一个图像文件(一般为Podfile.png )。这样你就可以以图像格式查看依赖关系图。

示例1:不提供 [PODSPEC] 将显示项目中所有 pod 的依赖关系。

1
2
3
4
5
6
cd ~/Project/CQComponent/UIKit-Overlay-iOS/TSOverlayDemo

pod install

# 不提供 [PODSPEC] 将显示项目中所有 pod 的依赖关系。
pod dependencies --graphviz --image

生成 Podfile.gvPodfile.png文件如下:

cocoapods-dependencies-01-html

其中 Podfile.gv 可用 OmniGraffle应用程序 打开

gv的打开方式

打开方式说明如下:

序号 打开方式 打开说明 示例
1 Hieracchical 层次结构
2 Force-Directed 强制导向
3 Circular 圆形的
4 Radial 径向的

其各自详细效果图,详见 依赖关系可视化-TSOverlayDemo.graffle

示例2:提供 [PODSPEC] 将显示该 pod 的依赖关系

命令:pod dependencies AFNetworking --graphviz --image

这个命令将显示 AFNetworking 这个 pod 的依赖关系,并生成一个 Graphviz DOT 文件和相应的图像文件,用于可视化查看 AFNetworking 的依赖关系。你可以在生成的图像文件中查看依赖关系图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1、安装
gem install reversepoddependency

# 2、查找所安装库里的命令路径
gem which reversepoddependency
# gem which:这是一个用于定位 Ruby gem 安装路径的命令。当你执行 gem which GEM_NAME 时,它会返回指定 gem 的安装路径。
# which:这是一个用于查找可执行文件的命令。
# 得到的结果如下:
# /usr/local/lib/ruby/gems/3.2.0/gems/reversepoddependency-0.1.0/lib/reversepoddependency.rb
# 所以该包的 specbackwarddependency 应在如下目录:
# /usr/local/lib/ruby/gems/3.2.0/gems/reversepoddependency-0.1.0/
# 经查找 specbackwarddependency 的其实际地址为如下:
# /usr/local/lib/ruby/gems/3.2.0/gems/reversepoddependency-0.1.0/exe/specbackwarddependency

# 3、使用所安装库里的命令
/usr/local/lib/ruby/gems/3.2.0/gems/reversepoddependency-0.1.0/exe/specbackwarddependency ~/.cocoapods/repos/trunk AFNetworking

在运行 gem install reversepoddependency 命令后,安装的 reversepoddependency gem 应该会被存储在你使用的 Ruby 安装目录下的 Gems 文件夹中。

问题:执行 /usr/local/lib/ruby/gems/3.2.0/gems/reversepoddependency-0.1.0/exe/specbackwarddependency ~/.cocoapods/repos/trunk AFNetworking 时候出现如下错误:

specbackwarddependency_01

我们通过进入指定文件/usr/local/lib/ruby/gems/3.2.0/gems/cocoapods-core-1.12.1/lib/cocoapods-core/source.rb 查看其210行,并添加以下代码,即可过滤掉该库:

1
2
3
4
if name == "TUICalling" || name == "TUIChat" || name == "VK-ios-sdk" 
name = "AFNetworking"
version = "3.2.1"
end

specbackwarddependency_02

不然你得通过以下命令找到该所在库,然后再一个个删掉,这种方式会造成后续使用问题。所以我们选择修改判断代码

1
2
3
4
cd ~/.cocoapods/repos/trunk/Specs

# 查找指定库
find ~/.cocoapods/repos/trunk/Specs -name 'TUICalling'

添加代码后,重新执行

1
/usr/local/lib/ruby/gems/3.2.0/gems/reversepoddependency-0.1.0/exe/specbackwarddependency ~/.cocoapods/repos/trunk AFNetworking

得到的结果如下:

specbackwarddependency_03

End