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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4439f62914038a8cba09904c1069208dd9e991f4
4
- data.tar.gz: 6929ca0020de842be7a25dc6bf5b8374dcfd9b55
3
+ metadata.gz: 06554a76886f0eb5f2b8a4f0ed628920f378ba81
4
+ data.tar.gz: e402da7a36bf33ad233aa52165231cff38001736
5
5
  SHA512:
6
- metadata.gz: 67a5df802e61c2a390a6777eea3781c1c387c8d808b5c5f371df04c3824900e61d6045d136476b4a5b412a0bcef5ebf8f91451df7c996216a4a83db2235201bd
7
- data.tar.gz: 734a7c8b62f563510399923e4c3646270efd4eead98f30549ecd383d4fcbfb443d15398363b33750b07cd54235205e4f45102ca632a81ce08abb659158b667a8
6
+ metadata.gz: 3293f3d7942a084397c856148815fd40e5ca8baa0cd639b697a6ca17811cd377f1e9a1cccc8f62dee5bd07e3e2a8303eb978a8816023605c752d463cd6cf6a66
7
+ data.tar.gz: 700dea1d82f7b0a52101f23e4f8daf53f8a4fdaca501bf1d02812fc36a0f2a52eff6076ca2bf4887b9cdd46517d6fe30c8730dfd595b199212df5b2096aa06df
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- ![](http://tosv.byted.org/obj/iosbinary/general/BDAnalyze.jpeg)
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] **修复Pods之间不规范的引用方式**
29
- - [x] **分析组件的实际依赖与隐式依赖**
26
+ - [x] **[一键沉库,分析出不同层次的依赖关系](#Case1)**
27
+ - [x] **[源码级别分析代码之间的引用关系](#Case2)**
28
+ - [x] **[修复Pods之间不规范的引用方式](#Case3)**
29
+ - [x] **[分析组件的实际依赖与隐式依赖](#Case2)**
30
30
 
31
- ## Usage
32
- ![](http://tosv.byted.org/obj/iosbinary/general/BDAnalyze.gif)
31
+ ## Example
32
+ ![](https://ios.bytedance.net/wlapi/tosDownload/iosbinary/general/BDAnalyze.gif)
33
33
 
34
- ### 1.一键沉库,分析出不同层次的依赖关系
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.一份编译好的头条源码工程「i.e.为了测试准确性以及完整性,需要用到所有源码信息,因此需要使用一份源码编译的头条工程」
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
- 具备上述条件后,可以终端输入以下指令「**默认分析是只分析依赖的哪些Pods,但不分析Pods的.m中的二级依赖,如需分析Pods中.m文件的二级依赖,请使用--analyzePods指令**」
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
- │   └── containedPods.txt
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
- ### Case:分析单个组件的实际依赖情况
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
- │   ├── BDAccountFlowscene.h
201
- │   ├── BDSDKApi.h
202
- │   ├── BDSDKApi.m
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
- │   ├── BDSDKApi+Privates.h
206
- │   ├── BDSDKApi+Privates.m
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
- │   ├── AFNetworking.h
210
- │   ├── AFgzipRequestSerializer.h
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
- │   ├── AFHTTPSessionManager.h
214
- │   ├── AFURLRequestSerialization.h
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
- │   ├── AFNetworkReachabilityManager.h
218
- │   ├── AFURLSessionManager.h
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
- ├── AFSecurityPolicy.h
325
+ ├── Podfile
326
+ ├── Pods
327
+ │   └── AFNetworking
328
+ │   ├── AFSecurityPolicy.h
329
+ │   └── AFSecurityPolicy.m
222
330
  └── containedPods.txt
223
331
 
224
- 6 directories, 19 files
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
@@ -1,3 +1,3 @@
1
1
  module BDAnalyze
2
- VERSION = "2.1.0"
2
+ VERSION = "2.2.0"
3
3
  end
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.1.0
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-12 00:00:00.000000000 Z
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