fastlane-plugin-analyze_ios_linkmap 0.1.0 → 0.1.1

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