BDAnalyze 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +194 -27
- data/lib/AnalyzeTool +0 -0
- data/lib/BDAnalyze/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06554a76886f0eb5f2b8a4f0ed628920f378ba81
|
4
|
+
data.tar.gz: e402da7a36bf33ad233aa52165231cff38001736
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3293f3d7942a084397c856148815fd40e5ca8baa0cd639b697a6ca17811cd377f1e9a1cccc8f62dee5bd07e3e2a8303eb978a8816023605c752d463cd6cf6a66
|
7
|
+
data.tar.gz: 700dea1d82f7b0a52101f23e4f8daf53f8a4fdaca501bf1d02812fc36a0f2a52eff6076ca2bf4887b9cdd46517d6fe30c8730dfd595b199212df5b2096aa06df
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
![](
|
1
|
+
![](https://ios.bytedance.net/wlapi/tosDownload/iosbinary/general/BDAnalyze.jpeg)
|
2
2
|
# BDAnalyze
|
3
3
|
|
4
4
|
BDAnalyze是一款用于分析iOS代码,快速解析iOS代码依赖关系的工具,同时可修复iOS代码的规范性引用问题
|
@@ -23,15 +23,15 @@ Or install it yourself as:
|
|
23
23
|
|
24
24
|
|
25
25
|
## Feature
|
26
|
-
- [x]
|
27
|
-
- [x]
|
28
|
-
- [x]
|
29
|
-
- [x]
|
26
|
+
- [x] **[一键沉库,分析出不同层次的依赖关系](#Case1)**
|
27
|
+
- [x] **[源码级别分析代码之间的引用关系](#Case2)**
|
28
|
+
- [x] **[修复Pods之间不规范的引用方式](#Case3)**
|
29
|
+
- [x] **[分析组件的实际依赖与隐式依赖](#Case2)**
|
30
30
|
|
31
|
-
##
|
32
|
-
![](
|
31
|
+
## Example
|
32
|
+
![](https://ios.bytedance.net/wlapi/tosDownload/iosbinary/general/BDAnalyze.gif)
|
33
33
|
|
34
|
-
|
34
|
+
#### <a id="Case1"></a>[1] 一键沉库,分析出不同层次的依赖关系
|
35
35
|
|
36
36
|
在大型项目的组件化过程中,沉库操作为最耗时也是最重要的步骤。
|
37
37
|
|
@@ -42,12 +42,12 @@ Or install it yourself as:
|
|
42
42
|
假设我们要将头条项目中的 **tt_app_ios/Article/Model**文件进行沉库.需要准备的条件有:
|
43
43
|
|
44
44
|
```
|
45
|
-
1
|
45
|
+
1.一份编译好的头条 源码 工程「i.e.为了测试准确性以及完整性,需要用到所有源码信息,因此需要使用一份源码编译的头条工程,这里一定要注意需要使用全源码编译,因为二进制的Pods没有hmap信息」
|
46
46
|
2.一个用来存放解析结果「解析结果为:各种文件」的绝对路径。e.g.---- /Users/bob/des
|
47
47
|
3.头条项目在本机的绝对路径 e.g ---- /Users/bob/Git/work/tt_app_ios
|
48
48
|
4.要分析的目标路径 e.g. ---- /Users/bob/Git/work/tt_app_ios/Article/Model「由于头条项目中使用了*.pch文件,因此解析时也要将pch文件放到目标文件下」
|
49
49
|
5.头条项目主工程的hmap文件 e.g. ---- /Users/bob/Library/Developer/Xcode/DerivedData/Article-gynljfcyrfnppnewlnrdnebqxclg/Build/Intermediates.noindex/Article.build/Debug-iphonesimulator/newsbeta.build/newsbeta.hmap
|
50
|
-
6.头条项目Pods工程的hmap文件[任意Pods的中的hmap文件即可] e.g. ---- /Users/bob/Library/Developer/Xcode/DerivedData/TTWenda-gynljfcyrfnppnewlnrdnebqxclg/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/TTAccountLogin.build/TTAccountLogin.hmap
|
50
|
+
6.头条项目Pods工程的hmap文件[任意Pods的中的hmap文件即可] e.g. ---- /Users/bob/Library/Developer/Xcode/DerivedData/TTWenda-gynljfcyrfnppnewlnrdnebqxclg/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/TTAccountLogin.build/TTAccountLogin.hmap「注意这里需要确定你编译的是真机还是模拟器,如果你选择的是真机但是实际用的模拟器编译,会导致Pods信息不全」
|
51
51
|
```
|
52
52
|
**其中第5条和第6条可以通过下面指令获取「以头条工程为例」**
|
53
53
|
|
@@ -58,7 +58,17 @@ BDAnalyze --searchhmap Article
|
|
58
58
|
✅ 👉 /Users/bob/Library/Developer/Xcode/DerivedData/Article-cghgvmicwdcbxwfdfbahfewrpppf/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/AWEVideoPlayer.build/AWEVideoPlayer.hmap
|
59
59
|
|
60
60
|
```
|
61
|
-
|
61
|
+
具备上述条件后,可以终端输入以下指令
|
62
|
+
|
63
|
+
**Note**
|
64
|
+
|
65
|
+
```
|
66
|
+
1.默认分析是不解析Pods的.m中的二级依赖,只分析依赖的哪些Pods,如需分析Pods中.m文件的二级依赖,请再添加--analyzePods指令
|
67
|
+
2.如果需要分析每一层解析的显式Pods与隐式Pods依赖,则需要添加 --parseEachPods 指令
|
68
|
+
3.如果需要每层都生成Podfile文件的话,则需要添加 --podfileLock path[path代表你要分析的主工程的Podfile.lock的绝对路径]
|
69
|
+
4.如果需要分析不准确的情况,先确定是不是用的全源码工程,因为二进制工程中没有信息可提取
|
70
|
+
```
|
71
|
+
|
62
72
|
|
63
73
|
```ruby
|
64
74
|
BDAnalyze --s /Users/bob/des
|
@@ -89,7 +99,10 @@ BDAnalyze --s /Users/bob/des
|
|
89
99
|
│ ├── HTSVideoMusicClass.h
|
90
100
|
│ ├── HTSVideoMusicDetail.h
|
91
101
|
│ ├── HTSVideoMusicList.h
|
92
|
-
│
|
102
|
+
│ ├── containedPods.txt
|
103
|
+
│ └── Pods
|
104
|
+
│ └── AWEVideoPlayer
|
105
|
+
│ └── AWEVideoCachePlayTask.h
|
93
106
|
├── 第11层
|
94
107
|
│ ├── CADisplayLink+HTSBlock.h
|
95
108
|
│ ├── CADisplayLink+HTSBlock.m
|
@@ -142,7 +155,7 @@ BDAnalyze --s /Users/bob/des
|
|
142
155
|
```
|
143
156
|
|
144
157
|
解析结果按照 **依赖层级** 进行分布,上图即说明 **/Users/bob/Git/工作/tt_app_ios/Article/Model** 文件集合共有11层依赖。其中每层依赖的文件夹下表示当前依赖层级的所有文件,其中对于Pods的依赖存放在每个层级的containedPods.txt文件中。在最外层的allDenpendencyPod.txt文件表示所依赖的所有Pods统计
|
145
|
-
|
158
|
+
#### <a id="Case2"></a>[2] 分析单个组件的实际依赖情况
|
146
159
|
在沉库过程中,还有一个重要操作就是梳理已经下沉的组件的实际依赖关系,这样可以提供最小颗粒度的组件给使用方,同时有序的依赖关系会带来解析速度的提升以及维护成本的下降
|
147
160
|
|
148
161
|
以分析头条项目中 BDAccount 组件为例,需要准备的条件有
|
@@ -155,6 +168,7 @@ BDAnalyze --s /Users/bob/des
|
|
155
168
|
5.头条项目主工程的hmap文件 e.g. ---- /Users/bob/Library/Developer/Xcode/DerivedData/Article-gynljfcyrfnppnewlnrdnebqxclg/Build/Intermediates.noindex/Article.build/Debug-iphonesimulator/newsbeta.build/newsbeta.hmap
|
156
169
|
6.头条项目Pods工程的hmap文件[任意Pods的中的hmap文件即可] e.g. ---- /Users/bob/Library/Developer/Xcode/DerivedData/TTWenda-gynljfcyrfnppnewlnrdnebqxclg/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/TTAccountLogin.build/TTAccountLogin.hmap
|
157
170
|
7.打开--analyzePods指令,因为需要分析组件的实现源码依赖情况
|
171
|
+
7.打开--parseEachPods指令,可以分析组件的实际依赖与隐藏依赖
|
158
172
|
```
|
159
173
|
然后使用如下指令进行分析
|
160
174
|
|
@@ -165,6 +179,8 @@ BDAnalyze --s /Users/bob/des
|
|
165
179
|
--mHmap /Users/bob/Library/Developer/Xcode/DerivedData/Article-cghgvmicwdcbxwfdfbahfewrpppf/Build/Intermediates.noindex/Article.build/Debug-iphonesimulator/Explore.build/Explore.hmap
|
166
180
|
--pHmap /Users/bob/Library/Developer/Xcode/DerivedData/Article-cghgvmicwdcbxwfdfbahfewrpppf/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/AWEVideoPlayer.build/AWEVideoPlayer.hmap
|
167
181
|
--analyzePods
|
182
|
+
--parseEachPods
|
183
|
+
--podfileLock /Users/bob/Git/工作/tt_app_ios/Article/Podfile.lock
|
168
184
|
```
|
169
185
|
|
170
186
|
等待几秒后会输出如下:
|
@@ -195,35 +211,186 @@ BDAnalyze --s /Users/bob/des
|
|
195
211
|
|
196
212
|
```
|
197
213
|
.
|
214
|
+
├── Podfile
|
198
215
|
├── allDenpendencyPod.txt
|
199
216
|
├── 第1层
|
200
|
-
│ ├──
|
201
|
-
│ ├──
|
202
|
-
│ ├──
|
217
|
+
│ ├── Podfile
|
218
|
+
│ ├── Pods
|
219
|
+
│ │ ├── BDAccount
|
220
|
+
│ │ │ └── BDAccountFlowscene.h
|
221
|
+
│ │ ├── Bytedancebase
|
222
|
+
│ │ │ ├── BDSDKApi+CompanyProduct.h
|
223
|
+
│ │ │ ├── BDSDKApi.h
|
224
|
+
│ │ │ └── BDSDKApi.m
|
225
|
+
│ │ ├── TTMonitor
|
226
|
+
│ │ │ ├── TTMonitor.h
|
227
|
+
│ │ │ └── TTMonitor.m
|
228
|
+
│ │ ├── TTNetworkManager
|
229
|
+
│ │ │ ├── TTHTTPRequestSerializerBase.h
|
230
|
+
│ │ ├── TTThirdPartySDKs
|
231
|
+
│ │ │ ├── QQApiInterface.h
|
232
|
+
│ │ │ └── WXApi.h
|
233
|
+
│ │ ├── TTTracker
|
234
|
+
│ │ │ ├── TTTracker.h
|
235
|
+
│ │ │ └── TTTracker.m
|
236
|
+
│ │ └── YYModel
|
237
|
+
│ │ └── YYModel.h
|
203
238
|
│ └── containedPods.txt
|
204
239
|
├── 第2层
|
205
|
-
│ ├──
|
206
|
-
│ ├──
|
240
|
+
│ ├── Podfile
|
241
|
+
│ ├── Pods
|
242
|
+
│ │ ├── Bytedancebase
|
243
|
+
│ │ │ ├── BDSDKApi+Privates.h
|
244
|
+
│ │ │ └── BDSDKUtils.m
|
245
|
+
│ │ ├── TTInstallService
|
246
|
+
│ │ │ └── TTInstallSandBoxHelper.m
|
247
|
+
│ │ ├── TTMonitor
|
248
|
+
│ │ │ ├── TTDebugRealMonitorManager.h
|
249
|
+
│ │ │ └── TTSystemMonitorManager.m
|
250
|
+
│ │ ├── TTNetworkManager
|
251
|
+
│ │ │ ├── TTHTTPJSONResponseSerializerBaseAFNetworking.h
|
252
|
+
│ │ │ └── TTNetworkManagerMonitorNotifier.m
|
253
|
+
│ │ ├── TTThirdPartySDKs
|
254
|
+
│ │ │ ├── QQApiInterfaceObject.h
|
255
|
+
│ │ │ ├── TencentMessageObject.h
|
256
|
+
│ │ │ ├── TencentOAuthObject.h
|
257
|
+
│ │ │ ├── WXApiObject.h
|
258
|
+
│ │ │ └── sdkdef.h
|
259
|
+
│ │ ├── TTTracker
|
260
|
+
│ │ │ ├── TTLogServer.h
|
261
|
+
│ │ │ └── TTTrackerUtil.m
|
262
|
+
│ │ └── YYModel
|
263
|
+
│ │ ├── NSObject+YYModel.h
|
264
|
+
│ │ └── YYClassInfo.m
|
207
265
|
│ └── containedPods.txt
|
208
266
|
├── 第3层
|
209
|
-
│ ├──
|
210
|
-
│ ├──
|
267
|
+
│ ├── Podfile
|
268
|
+
│ ├── Pods
|
269
|
+
│ │ ├── AFNetworking
|
270
|
+
│ │ │ └── AFNetworking.h
|
271
|
+
│ │ ├── AFgzipRequestSerializer
|
272
|
+
│ │ │ ├── AFgzipRequestSerializer.h
|
273
|
+
│ │ │ └── AFgzipRequestSerializer.m
|
274
|
+
│ │ ├── Bytedancebase
|
275
|
+
│ │ │ ├── BDSDKSessionManager.h
|
276
|
+
│ │ │ └── BDSDKUserPromotionInteractor.m
|
277
|
+
│ │ ├── FMDB
|
278
|
+
│ │ │ └── FMDB.h
|
279
|
+
│ │ ├── Godzippa
|
280
|
+
│ │ │ ├── NSData+Godzippa.h
|
281
|
+
│ │ │ └── NSData+Godzippa.m
|
282
|
+
│ │ ├── TTInstallService
|
283
|
+
│ │ │ ├── NSData+TTInstallAdditions.h
|
284
|
+
│ │ │ └── UIDevice+TTInstallAdditions.m
|
285
|
+
│ │ ├── TTMonitor
|
286
|
+
│ │ │ ├── TTAppPerformanceMonitorRecorder.h
|
287
|
+
│ │ │ └── TTWatchdogMonitorRecorder.mm
|
288
|
+
│ │ ├── TTNetworkManager
|
289
|
+
│ │ │ ├── TTDefaultHTTPRequestSerializer.h
|
290
|
+
│ │ │ ├── TTResponseModelProtocol.h
|
291
|
+
│ │ │ └── encrypt.h
|
292
|
+
│ │ ├── TTPushManager
|
293
|
+
│ │ │ └── message.h
|
294
|
+
│ │ └── TTTracker
|
295
|
+
│ │ └── TTTrackerStorageManager.m
|
211
296
|
│ └── containedPods.txt
|
212
297
|
├── 第4层
|
213
|
-
│ ├──
|
214
|
-
│ ├──
|
298
|
+
│ ├── Podfile
|
299
|
+
│ ├── Pods
|
300
|
+
│ │ ├── AFNetworking
|
301
|
+
│ │ │ ├── AFHTTPSessionManager.h
|
302
|
+
│ │ │ └── AFURLResponseSerialization.m
|
303
|
+
│ │ ├── FMDB
|
304
|
+
│ │ │ └── FMResultSet.m
|
305
|
+
│ │ ├── TTInstallService
|
306
|
+
│ │ │ └── TTInstallOpenUDID.h
|
307
|
+
│ │ ├── TTMonitor
|
308
|
+
│ │ │ └── TTWatchdogMonitor.m
|
309
|
+
│ │ ├── TTNetworkManager
|
310
|
+
│ │ │ └── TTNetworkReachabilityManager.m
|
311
|
+
│ │ └── TTReachability
|
312
|
+
│ │ ├── TTReachability.h
|
313
|
+
│ │ └── TTReachability.m
|
215
314
|
│ └── containedPods.txt
|
216
315
|
├── 第5层
|
217
|
-
│ ├──
|
218
|
-
│ ├──
|
316
|
+
│ ├── Podfile
|
317
|
+
│ ├── Pods
|
318
|
+
│ │ ├── AFNetworking
|
319
|
+
│ │ │ └── AFURLSessionManager.m
|
320
|
+
│ │ └── TTMonitor
|
321
|
+
│ │ ├── BSBacktraceLogger.h
|
322
|
+
│ │ └── BSBacktraceLogger.m
|
219
323
|
│ └── containedPods.txt
|
220
324
|
└── 第6层
|
221
|
-
├──
|
325
|
+
├── Podfile
|
326
|
+
├── Pods
|
327
|
+
│ └── AFNetworking
|
328
|
+
│ ├── AFSecurityPolicy.h
|
329
|
+
│ └── AFSecurityPolicy.m
|
222
330
|
└── containedPods.txt
|
223
331
|
|
224
|
-
|
332
|
+
45 directories, 281 files
|
333
|
+
```
|
334
|
+
allDenpendencyPod.txt代表目标文件所依赖的**所有Pods统计**;
|
335
|
+
各层级表示相应的依赖层级依赖,比如第一层表示目标文件直接依赖的情况;
|
336
|
+
每一层的Pods文件夹表示该层依赖的Pods文件中的集合「只有直接依赖的文件,并不是每个Pod的所有依赖」;
|
337
|
+
每一层中的containedPods.txt表示该层的依赖解析情况,比如BDAccount的解析情况:
|
338
|
+
|
339
|
+
```
|
340
|
+
BDAccount 0.3.18-alpha.1
|
341
|
+
TTNetworkManager 2.2.8.38-rc.1
|
342
|
+
TTMonitor 0.7.9.42.3
|
343
|
+
YYModel 1.0.4
|
344
|
+
Bytedancebase 0.2.3
|
345
|
+
TTTracker 1.0.2
|
346
|
+
TTThirdPartySDKs 0.1.1
|
347
|
+
|
348
|
+
以下为隐式依赖:
|
349
|
+
TTInstallService 1.0.0.6
|
350
|
+
```
|
351
|
+
|
352
|
+
#### <a id="Case3"></a>[3] 修复Pods之间不规范的引用方式
|
353
|
+
|
354
|
+
由于历史遗留问题,在项目中还存在很多不规范的引用方式,比如
|
355
|
+
|
356
|
+
```objc
|
357
|
+
#import "AFNetworking.h"
|
358
|
+
#import <AFNetworking.h>
|
359
|
+
```
|
360
|
+
这种代码对于Framework方式或是swift混编的工程,往往会编译不过,但是一个一个去校验的工程量又非常大,因此这里提供了一种**一键修复**的方式。
|
361
|
+
以头条项目为例[其他壳工程类似],需要准备的条件有
|
362
|
+
|
363
|
+
```
|
364
|
+
1.一份编译好的头条 源码 工程「i.e.为了测试准确性以及完整性,需要用到所有源码信息,因此需要使用一份源码编译的头条工程,这里一定要注意需要使用全源码编译,因为二进制的Pods没有hmap信息」
|
365
|
+
2.要修复的目标路径 e.g. ---- /Users/bob/Git/work/tt_app_ios/
|
366
|
+
3.头条项目Pods工程的hmap文件[任意Pods的中的hmap文件即可] e.g. ---- /Users/bob/Library/Developer/Xcode/DerivedData/TTWenda-gynljfcyrfnppnewlnrdnebqxclg/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/TTAccountLogin.build/TTAccountLogin.hmap「注意这里需要确定你编译的是真机还是模拟器,如果你选择的是真机但是实际用的模拟器编译,会导致Pods信息不全」
|
367
|
+
```
|
368
|
+
|
369
|
+
只需要执行下面的指令即可
|
370
|
+
|
371
|
+
```ruby
|
372
|
+
BDAnalyze --repairAll /Users/bob/Git/工作/tt_app_ios
|
373
|
+
--pHmap /Users/bob/Library/Developer/Xcode/DerivedData/Article-cghgvmicwdcbxwfdfbahfewrpppf/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/AWEVideoPlayer.build/AWEVideoPlayer.hmap
|
374
|
+
```
|
375
|
+
执行完毕后,会生成修改的文件信息
|
376
|
+
|
377
|
+
```
|
378
|
+
✅ TTHttpRequest.h is repair
|
379
|
+
|
380
|
+
✅ TTLGiftSyncDefines.h is repair
|
381
|
+
|
382
|
+
✅ SSViewControllerBase.h is repair
|
383
|
+
|
384
|
+
✅ SSViewControllerBase.h is repair
|
385
|
+
|
386
|
+
✅ SSViewControllerBase.h is repair
|
387
|
+
|
388
|
+
✅ NSObject+MTLComparisonAdditions.h is repair
|
389
|
+
|
390
|
+
💯 修复完毕,请到 👉 /Users/bob/Git/工作/tt_app_ios 👈 查看修复结果
|
391
|
+
|
392
|
+
🏆 引用修复报告 👉 /Users/bob/Git/工作/tt_app_ios/Repair.json 👈
|
225
393
|
```
|
226
|
-
其中allDenpendencyPod.txt代表目标文件所依赖的所有Pods统计,各层级表示相应的依赖层级依赖,比如第一层表示,目标文件直接依赖的情况
|
227
394
|
## License
|
228
395
|
|
229
396
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/lib/AnalyzeTool
CHANGED
Binary file
|
data/lib/BDAnalyze/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: BDAnalyze
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- bupterambition
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-08-
|
11
|
+
date: 2018-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
97
|
version: '0'
|
98
98
|
requirements: []
|
99
99
|
rubyforge_project:
|
100
|
-
rubygems_version: 2.5.2
|
100
|
+
rubygems_version: 2.5.2.3
|
101
101
|
signing_key:
|
102
102
|
specification_version: 4
|
103
103
|
summary: BDAnalyze,A tool used for analyze the dependencies of your code and Pods
|