BDAnalyze 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
-

|
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
|
-

|
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
|