fastlane-plugin-analyze_ios_linkmap 0.1.0 → 0.1.1

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
  SHA256:
3
- metadata.gz: cf65a1b127001f7316a0bf431890749143790f804e82d49837757b3fd2279cdc
4
- data.tar.gz: 925a24e97331807852983ae2fc68417ba3413e53e368ece41769e0a168c23b13
3
+ metadata.gz: 2d7e26083cb69298f9af1dec82d0f015bb595454ee6bdcaeae84f121ff9a61c6
4
+ data.tar.gz: 28119251fdc69243ba162aecbd19774589df4cac1ad32402235c8cf9dc96de97
5
5
  SHA512:
6
- metadata.gz: 5ed20a502f407ce23e5fbec2695488fb3bd84eefcfbdc267d26e69ae8e7de2cc8cf161dee73f97045f4199f634cb55853307cfb8cbbf26930cf4f3bd1a3dd203
7
- data.tar.gz: ba0ad68c8c02b451c7ae4716036821ab35a5bd048aedf3124d70192849badc0f85186f4ba3430cb474778bef749654ba40a1db4c00e189399a6925125307e28b
6
+ metadata.gz: f76607c8979fd32f427a7d2e6f35936cf68bf98f1acb5e94f1a7c985e9143356891f442eba0ccb512c3f16bb4dc72abf9b22545f7e2e5419d9e04dbbbb6cb87f
7
+ data.tar.gz: 0a7888ee701c27db2f3643f5e2a2ee372ff212a3552561d8b8b39888fd5360fcd76e447ff2fff7b1ad5d554c2873835994eadd124b9079801e8683ee7ed39e6c
data/README.md CHANGED
@@ -26,8 +26,8 @@ lane :test do
26
26
  analyze_ios_linkmap(
27
27
  filepath: '/Users/xiongzenghui/collect_rubygems/fastlane-plugins/fastlane-plugin-analyze_ios_linkmap/spec/demo-LinkMap.txt'
28
28
  )
29
- pp Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARED_HASH]
30
- pp Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARED_JSON]
29
+ pp Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARSED_HASH]
30
+ pp Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARSED_JSON]
31
31
 
32
32
  # eg2:
33
33
  analyze_ios_linkmap(
@@ -5,16 +5,23 @@ module Fastlane
5
5
  module Actions
6
6
  module ShatedValues
7
7
  ANALYZE_IOS_LINKMAP_SEARCH_SYMBOL = :ANALYZE_IOS_LINKMAP_SEARCH_SYMBOL
8
- ANALYZE_IOS_LINKMAP_PARED_HASH = :ANALYZE_IOS_LINKMAP_PARED_HASH
9
- ANALYZE_IOS_LINKMAP_PARED_JSON = :ANALYZE_IOS_LINKMAP_PARED_JSON
8
+ ANALYZE_IOS_LINKMAP_PARSED_HASH = :ANALYZE_IOS_LINKMAP_PARSED_HASH
9
+ ANALYZE_IOS_LINKMAP_PARSED_JSON = :ANALYZE_IOS_LINKMAP_PARSED_JSON
10
+ ANALYZE_IOS_LINKMAP_PARSED_MERGE_HASH = :ANALYZE_IOS_LINKMAP_PARSED_MERGE_HASH
11
+ ANALYZE_IOS_LINKMAP_PARSED_MERGE_JSON = :ANALYZE_IOS_LINKMAP_PARSED_MERGE_JSON
10
12
  end
11
13
 
12
14
  class AnalyzeIosLinkmapAction < Action
13
15
  def self.run(params)
14
16
  filepath = params[:filepath]
15
17
  search_symbol = params[:search_symbol]
18
+ all_symbols = params[:all_symbols] || false
19
+ merge_by_pod = params[:merge_by_pod] || false
16
20
 
17
- parser = Fastlane::Helper::LinkMap::Parser.new(filepath)
21
+ parser = Fastlane::Helper::LinkMap::Parser.new({
22
+ filepath: filepath,
23
+ all_symbols: all_symbols
24
+ })
18
25
 
19
26
  if search_symbol
20
27
  Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_SEARCH_SYMBOL] = []
@@ -33,8 +40,13 @@ module Fastlane
33
40
  end
34
41
  end
35
42
 
36
- Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARED_HASH] = parser.pretty_hash
37
- Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARED_JSON] = parser.pretty_json
43
+ Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARSED_HASH] = parser.pretty_hash
44
+ Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARSED_JSON] = parser.pretty_json
45
+
46
+ if merge_by_pod
47
+ Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARSED_MERGE_HASH] = parser.pretty_merge_by_pod_hash
48
+ Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARSED_MERGE_JSON] = parser.pretty_merge_by_pod_json
49
+ end
38
50
  end
39
51
 
40
52
  def self.available_options
@@ -51,10 +63,44 @@ module Fastlane
51
63
  key: :search_symbol,
52
64
  description: "search your give symbol in linkmap.txt from what library",
53
65
  optional: true
66
+ ),
67
+ FastlaneCore::ConfigItem.new(
68
+ key: :all_symbols,
69
+ description: "print all symbol size ???",
70
+ optional: true
71
+ ),
72
+ FastlaneCore::ConfigItem.new(
73
+ key: :merge_by_pod,
74
+ description: "merge linkmap parsed hash by pod name ???",
75
+ optional: true
76
+ )
77
+ ]
78
+ end
79
+
80
+ def self.example_code
81
+ [
82
+ 'analyze_ios_linkmap(filepath: "/path/to/linkmap.txt")
83
+ pp Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARSED_HASH]
84
+ pp Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARSED_JSON]',
85
+ 'analyze_ios_linkmap(
86
+ filepath: "/path/to/linkmap.txt",
87
+ search_symbol: "TDATEvo"
88
+ )
89
+ pp Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_SEARCH_SYMBOL]'
90
+ 'analyze_ios_linkmap(
91
+ filepath: "/path/to/linkmap.txt",
92
+ all_symbols: false,
93
+ merge_by_pod: true
54
94
  )
95
+ pp Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARSED_MERGE_HASH]
96
+ pp Fastlane::Actions.lane_context[Fastlane::Actions::ShatedValues::ANALYZE_IOS_LINKMAP_PARSED_MERGE_JSON]'
55
97
  ]
56
98
  end
57
99
 
100
+ def self.return_value
101
+ # If your method provides a return value, you can describe here what it does
102
+ end
103
+
58
104
  def self.description
59
105
  "iOS parse linkmap.txt to ruby Hash or JSON"
60
106
  end
@@ -63,10 +109,6 @@ module Fastlane
63
109
  ["xiongzenghui"]
64
110
  end
65
111
 
66
- def self.return_value
67
- # If your method provides a return value, you can describe here what it does
68
- end
69
-
70
112
  def self.details
71
113
  "iOS parse linkmap.txt to ruby Hash"
72
114
  end
@@ -70,8 +70,12 @@ module Fastlane
70
70
  class Parser
71
71
  attr_accessor(:object_map, :library_map, :section_map, :segment_map)
72
72
 
73
- def initialize(filepath)
74
- @filepath = filepath
73
+ def initialize(options)
74
+ @filepath = options[:filepath]
75
+ @all_symbols = options[:all_symbols]
76
+
77
+ UI.user_error!("❌ #{@filepath} not pass") unless @filepath
78
+ UI.user_error!("❌ #{@filepath} not exist") unless File.exist?(@filepath)
75
79
 
76
80
  @object_map = {}
77
81
  @library_map = {}
@@ -81,6 +85,116 @@ module Fastlane
81
85
  parse
82
86
  end
83
87
 
88
+ def pretty_json
89
+ JSON.pretty_generate(pretty_hash)
90
+ end
91
+
92
+ def pretty_hash
93
+ return @result if @result
94
+
95
+ # sort object_map[i].ObjectFile.symbols
96
+ @object_map.each do |ofid, object|
97
+ next unless object.symbols
98
+
99
+ object.symbols.sort! do |sym1, sym2|
100
+ sym2[:size] <=> sym1[:size]
101
+ end
102
+ end
103
+
104
+ # 计算 linkmap.txt 所有的 symbol 总大小
105
+ total_size = @library_map.values.map(&:size).inject(:+)
106
+ total_dead_size = @library_map.values.map(&:dead_symbol_size).inject(:+)
107
+
108
+ # sort object_map[i]
109
+ library_map_values = @library_map.values.sort do |a, b|
110
+ b.size <=> a.size
111
+ end
112
+ library_map_values.compact!
113
+
114
+ library_maps = library_map_values.map do |lib|
115
+ pod_name = lib.name
116
+ unless lib.pod_name.empty?
117
+ pod_name = lib.pod_name
118
+ end
119
+
120
+ if @all_symbols
121
+ {
122
+ library: lib.name,
123
+ pod: pod_name,
124
+ total: lib.size,
125
+ format_total: Fastlane::Helper::LinkMap::FileHelper.format_size(lib.size),
126
+ total_dead: lib.dead_symbol_size,
127
+ format_total_dead: Fastlane::Helper::LinkMap::FileHelper.format_size(lib.dead_symbol_size),
128
+ objects: lib.object_file_ids.map do |object_file_id|
129
+ # Struct.new(:file_id, :object, :library, :framework, :symbols, :size, :dead_symbol_size)
130
+ object_file = @object_map[object_file_id]
131
+ if object_file
132
+ {
133
+ object: object_file.object,
134
+ symbols: object_file.symbols.map do |symb|
135
+ {
136
+ name: symb.name,
137
+ total: symb.size,
138
+ format_total: Fastlane::Helper::LinkMap::FileHelper.format_size(symb.size),
139
+ }
140
+ end
141
+ }
142
+ else
143
+ nil
144
+ end
145
+ end
146
+ }
147
+ else
148
+ {
149
+ library: lib.name,
150
+ pod: pod_name,
151
+ total: lib.size,
152
+ format_total: Fastlane::Helper::LinkMap::FileHelper.format_size(lib.size),
153
+ total_dead: lib.dead_symbol_size,
154
+ format_total_dead: Fastlane::Helper::LinkMap::FileHelper.format_size(lib.dead_symbol_size)
155
+ }
156
+ end
157
+ end
158
+
159
+ @result = {
160
+ total_count: library_maps.count,
161
+ total_size: total_size,
162
+ format_total_size: Fastlane::Helper::LinkMap::FileHelper.format_size(total_size),
163
+ total_dead_size: total_dead_size,
164
+ format_total_dead_size: Fastlane::Helper::LinkMap::FileHelper.format_size(total_dead_size),
165
+ librarys: library_maps
166
+ }
167
+
168
+ @result
169
+ end
170
+
171
+ def pretty_merge_by_pod_hash
172
+ return @merge_by_pod_result if @merge_by_pod_result
173
+
174
+ @merge_by_pod_result = {
175
+ total_count: pretty_hash[:total_count],
176
+ total_size: pretty_hash[:total_size],
177
+ format_total_size: pretty_hash[:format_total_size],
178
+ total_dead_size: pretty_hash[:total_dead_size],
179
+ format_total_dead_size: pretty_hash[:format_total_dead_size]
180
+ }
181
+
182
+ pods = Hash.new
183
+ pretty_hash[:librarys].each do |lib|
184
+ apod_librarys = pods[lib[:pod]]
185
+ apod_librarys ||= Array.new
186
+ apod_librarys << lib
187
+ pods[lib[:pod]] = apod_librarys
188
+ end
189
+ @merge_by_pod_result[:pods] = pods
190
+
191
+ @merge_by_pod_result
192
+ end
193
+
194
+ def pretty_merge_by_pod_json
195
+ JSON.pretty_generate(pretty_merge_by_pod_hash)
196
+ end
197
+
84
198
  def parse
85
199
  # 读取 Linkmap.txt 【每一行】进行解析
86
200
  File.foreach(@filepath).with_index do |line, line_num|
@@ -373,91 +487,6 @@ module Fastlane
373
487
  @library_map[object_file.library].dead_symbol_size += size
374
488
  end
375
489
  end
376
-
377
- def pretty_json
378
- result = pretty_hash
379
- unless result
380
- UI.user_error!("❌ LinkMap parsed failed!")
381
- end
382
- JSON.pretty_generate(result)
383
- end
384
-
385
- def pretty_hash
386
- UI.user_error!("❌ #{@filepath} not pass") unless @filepath
387
- UI.user_error!("❌ #{@filepath} not exist") unless File.exist?(@filepath)
388
-
389
- result
390
- end
391
-
392
- def result
393
- # 1. cache
394
- return @result if @result
395
-
396
- # 2. sort object_map[i].ObjectFile.symbols
397
- @object_map.each do |ofid, object|
398
- next unless object.symbols
399
-
400
- object.symbols.sort! do |sym1, sym2|
401
- sym2[:size] <=> sym1[:size]
402
- end
403
- end
404
-
405
- # 3. linkmap.txt 所有的 symbol 总大小
406
- total_size = @library_map.values.map(&:size).inject(:+)
407
- total_dead_size = @library_map.values.map(&:dead_symbol_size).inject(:+)
408
-
409
- # 4.
410
- library_map_values = @library_map.values.sort do |a, b|
411
- b.size <=> a.size
412
- end
413
- library_map_values.compact!
414
-
415
- # 5.
416
- library_maps = library_map_values.map do |lib|
417
- pod_name = lib.name
418
- unless lib.pod_name.empty?
419
- pod_name = lib.pod_name
420
- end
421
- # pp "pod_name=#{pod_name}"
422
-
423
- {
424
- library: lib.name,
425
- pod: pod_name,
426
- total: lib.size,
427
- format_total: Fastlane::Helper::LinkMap::FileHelper.format_size(lib.size),
428
- total_dead: lib.dead_symbol_size,
429
- format_total_dead: Fastlane::Helper::LinkMap::FileHelper.format_size(lib.dead_symbol_size),
430
- objects: lib.object_file_ids.map do |object_file_id|
431
- # Struct.new(:file_id, :object, :library, :framework, :symbols, :size, :dead_symbol_size)
432
- object_file = @object_map[object_file_id]
433
- if object_file
434
- {
435
- object: object_file.object,
436
- symbols: object_file.symbols.map do |symb|
437
- {
438
- name: symb.name,
439
- total: symb.size,
440
- format_total: Fastlane::Helper::LinkMap::FileHelper.format_size(symb.size),
441
- }
442
- end
443
- }
444
- else
445
- nil
446
- end
447
- end
448
- }
449
- end
450
-
451
- # 6.
452
- @result = {
453
- total: total_size,
454
- format_total: Fastlane::Helper::LinkMap::FileHelper.format_size(total_size),
455
- total_dead: total_dead_size,
456
- format_total_dead: Fastlane::Helper::LinkMap::FileHelper.format_size(total_dead_size),
457
- librarys: library_maps
458
- }
459
- @result
460
- end
461
490
  end
462
491
  end
463
492
  end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module AnalyzeIosLinkmap
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-analyze_ios_linkmap
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - xiongzenghui
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-31 00:00:00.000000000 Z
11
+ date: 2019-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pry
@@ -168,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
168
  - !ruby/object:Gem::Version
169
169
  version: '0'
170
170
  requirements: []
171
- rubygems_version: 3.0.1
171
+ rubygems_version: 3.0.4
172
172
  signing_key:
173
173
  specification_version: 4
174
174
  summary: iOS parse linkmap.txt to ruby Hash