BDAnalyze

BDAnalyze是一款用于分析iOS代码,快速解析iOS代码依赖关系的工具,同时可修复iOS代码的规范性引用问题

Installation

Add this line to your application's Gemfile:

gem 'BDAnalyze'

And then execute:

$ bundle

Or install it yourself as:

$ gem install BDAnalyze

Feature

Example

[1] 一键沉库,分析出不同层次的依赖关系

在大型项目的组件化过程中,沉库操作为最耗时也是最重要的步骤。

对于沉库,一般的操作步骤是先梳理出目标文件集合的所有依赖关系「包含上层业务依赖、关联的Pod组件依赖以及若干层二级业务依赖和组件依赖」,然后暴力沉库,直至编译通过。

使用BDAnalyze可以非常方便的梳理出给定目标文件的所有依赖关系「直接业务以来、关联组件依赖、二级以及若干级依赖」

假设我们要将头条项目中的 tt_app_ios/Article/Model文件进行沉库.需要准备的条件有:

1.

其中第5条和第6条可以通过下面指令获取「以头条工程为例」

BDAnalyze --searchhmap Article

 

具备上述条件后,可以终端输入以下指令

Note:

1.
BDAnalyze --s /Users/bob/des 
          --proj /Users/bob/Git/work/tt_app_ios/Article/Article.xcodeproj
          --tpath /Users/bob/Git/

如果是想要将Development Pods中的Pods进行独立拆解的话,请运行这段代码

BDAnalyze --s /Users/bob/des 
          --proj /Users/bob/Git/work/tt_app_ios/Article/Article.xcodeproj
          --tpath /Users/bob/Git/

等待几秒后会输出如下:

  

其中类似警告的信息表示,代码中通过import xxx方式引入,但是实际编译时没有用到

然后根据提示到/Users/bob/des文件下,查看解析结果「实际解析关联太多,只截取部分」:

.

解析结果按照 依赖层级 进行分布,上图即说明 /Users/bob/Git/工作/tt_app_ios/Article/Model 文件集合共有11层依赖。其中每层依赖的文件夹下表示当前依赖层级的所有文件,其中对于Pods的依赖存放在每个层级的containedPods.txt文件中。在最外层的allDenpendencyPod.txt文件表示所依赖的所有Pods统计.user_header_path.txt表示依赖文件的相对于--proj 的路径

[2] 分析单个组件的实际依赖情况

在沉库过程中,还有一个重要操作就是梳理已经下沉的组件的实际依赖关系,这样可以提供最小颗粒度的组件给使用方,同时有序的依赖关系会带来解析速度的提升以及维护成本的下降

以分析头条项目中 BDAccount 组件为例,需要准备的条件有

1.

然后使用如下指令进行分析

BDAnalyze --s /Users/bob/des 
          --proj /Users/bob/Git/work/tt_app_ios/Article/Article.xcodeproj
          --tpath /Users/bob/Git/

等待几秒后会输出如下:

  

其中类似警告的信息表示,代码中通过import xxx方式引入,但是实际编译时没有用到

根据提示在 /Users/bob/des 下,找到解析结果如下

.

allDenpendencyPod.txt代表目标文件所依赖的所有Pods统计; 各层级表示相应的依赖层级依赖,比如第一层表示目标文件直接依赖的情况; 每一层的Pods文件夹表示该层依赖的Pods文件中的集合「只有直接依赖的文件,并不是每个Pod的所有依赖」; 每一层中的containedPods.txt表示该层的依赖解析情况,比如BDAccount的解析情况:

BDAccount 0.3.18-alpha.1
TTNetworkManager 2.2.8.38-rc.1
TTMonitor 0.7.9.42.3
YYModel 1.0.4
Bytedancebase 0.2.3
TTTracker 1.0.2
TTThirdPartySDKs 0.1.1

[3] 修复Pods之间不规范的引用方式

由于历史遗留问题,在项目中还存在很多不规范的引用方式,比如

#import "AFNetworking.h"
#import <AFNetworking.h>

这种代码对于Framework方式或是swift混编的工程,往往会编译不过,但是一个一个去校验的工程量又非常大,因此这里提供了一种一键修复的方式。 以头条项目为例[其他壳工程类似],需要准备的条件有

1.

只需要执行下面的指令即可

BDAnalyze --repairAll /Users/bob/Git/

执行完毕后,会生成修改的文件信息

  

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the BDAnalyze project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.