cocoapods-hmap-simple 1.0.0 → 1.0.3

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hmap +0 -0
  3. data/lib/hmap_optimize.rb +125 -0
  4. metadata +5 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 101a27d1c87a42abed1f131da449ddaa8f1fc6504a5eddb95e232df1eb63d11a
4
- data.tar.gz: e45cafe316f70a83c2c3121486b3b54eb2e0c0f12c5e9ee96c4a2d7272f744b4
3
+ metadata.gz: 25a712f2bbda85f5c9c28c4d34c1d48666d9f6485fe688533d6ba028b6d78b1a
4
+ data.tar.gz: 1d2086d27a19d1d8872924be8161dafd8e7da37b01cc1caba337ed5fae9dde29
5
5
  SHA512:
6
- metadata.gz: 509f49e89238e5be25af044bd07195d87b1ae6c5a34b71e1deda6dec68e9e2569cf82e80d491344070fdbaa0dedffec632954e69fd276e213b1a6a8f973345e1
7
- data.tar.gz: 0bce81e76d616bb168ebc8c1b410ff6b27d3902e9f5b895403380795f6bb6001de52c3807fc77a78654034e17b0259c5db41aacbe6754df99ac8d7cf4d0781f4
6
+ metadata.gz: 0ee2903119b65f1c552671e9d19b40e8fdbb477e8bc065a48fbe2aa64c6f19f78e44b206c5cb9f4f8e6035d8358ebf48188d3913df827ce79b6b580fe97b8eee
7
+ data.tar.gz: 956a599aec20ec0af62992b9127a794fe3b4d8253d645d83c0800ca36de889f1b0420be7f8dcbe57eb9a8e48ab0d438e054830cf754d6db894019de6c4939257
data/lib/hmap ADDED
Binary file
@@ -0,0 +1,125 @@
1
+ =begin
2
+ This plugin modifies HEADER_SEARCH_PATHS in Pods/Target Support Files/*/*.xcconfig
3
+ combining "${PODS_ROOT}/Headers/Public/*" to a single hmap. (not including ${PODS_ROOT}/Headers/Public itself)
4
+ =end
5
+
6
+ module Pod
7
+ class HmapHelper
8
+ def self.post_install(installer)
9
+ to_remove = -> path { path.include?("${PODS_ROOT}/Headers/Public/") }
10
+
11
+ headers_for_path = -> path do
12
+ @cached_headers ||= {}
13
+ cached = @cached_headers.fetch(path, {})
14
+ return cached unless cached.blank?
15
+
16
+ full_path = path.sub(/^\$\{PODS_ROOT\}/, installer.sandbox.root.to_s)
17
+ headers = Dir.glob("#{full_path}/**/{*.h,*.hpp}")
18
+ return {} if headers.blank?
19
+
20
+ target_headers_hash = headers.to_h do |header|
21
+ prefix = File.dirname(header)
22
+ relative_dir = prefix.sub(/^#{full_path}/, '').sub(/^\//, '')
23
+ file_name = File.basename(header)
24
+ file_name = File.join(relative_dir, file_name) unless relative_dir.blank?
25
+
26
+ sub_header_hash = {}
27
+ sub_header_hash['suffix'] = File.basename(header)
28
+ sub_header_hash['prefix'] = prefix + "/"
29
+
30
+ [file_name, sub_header_hash]
31
+ end
32
+ @cached_headers[path] = target_headers_hash
33
+ target_headers_hash
34
+ end
35
+
36
+ create_hmap = -> build_settings do
37
+ header_search_paths = build_settings.header_search_paths
38
+ return if header_search_paths.blank?
39
+
40
+ convert_paths = header_search_paths.select { |p| to_remove.call(p) }
41
+ return if convert_paths.blank?
42
+
43
+ convert_paths_string = convert_paths.join(" ")&.strip
44
+ md5_string = Digest::MD5.hexdigest(convert_paths_string)
45
+
46
+ UI.message "md5(#{convert_paths_string})=#{md5_string}"
47
+
48
+ hmap_dir = File.expand_path("Headers/hmap", installer.sandbox.root.to_s)
49
+ hmap_path = File.expand_path("#{md5_string}.hmap", hmap_dir)
50
+ if File.exist?(hmap_path)
51
+ return md5_string
52
+ end
53
+
54
+ header_path_hash = convert_paths.map { |x| headers_for_path.call(x) }.inject(:merge)
55
+ return if header_path_hash.blank?
56
+
57
+ FileUtils.mkdir_p(hmap_dir) unless File.directory?(hmap_dir)
58
+ json_path = File.expand_path("#{md5_string}.json", hmap_dir)
59
+ File.open(json_path, 'w') do |file|
60
+ file << header_path_hash.to_json
61
+ end
62
+
63
+ hmap = File.expand_path("hmap", File.dirname(__FILE__ ))
64
+ `#{hmap} convert '#{json_path}' '#{hmap_path}' `
65
+ File.delete(json_path)
66
+
67
+ UI.message "created hmap #{hmap_path}"
68
+ return md5_string
69
+ end
70
+
71
+ handle_target_with_settings = -> hmap_md5, target, config do
72
+ return if hmap_md5.blank?
73
+
74
+ xcconfig_path = target.xcconfig_path(config)
75
+ xcconfig = File.exist?(xcconfig_path) ? Xcodeproj::Config.new(xcconfig_path) : target.xcconfigs[config]
76
+
77
+ hmap_path = File.expand_path("Headers/hmap/#{hmap_md5}.hmap", installer.sandbox.root.to_s)
78
+ return unless File.exist?(hmap_path)
79
+
80
+ hmap_item = "\"${PODS_ROOT}/Headers/hmap/#{hmap_md5}.hmap\""
81
+
82
+ header_search_paths = xcconfig.to_hash['HEADER_SEARCH_PATHS']
83
+ path_items = header_search_paths.split(/\s+/)
84
+
85
+ keep_paths = path_items.reject { |p| to_remove.call(p) }
86
+ keep_paths << hmap_item
87
+
88
+ new_header_search_paths = keep_paths.join(" ")
89
+ xcconfig.attributes['HEADER_SEARCH_PATHS'] = new_header_search_paths
90
+ xcconfig.save_as(xcconfig_path)
91
+ end
92
+
93
+ # 生成 hmap file,然后修改 xcconfig 文件
94
+ installer.aggregate_targets.each do |aggregate_target|
95
+ UI.message "convert hmap for aggregate_target #{aggregate_target}"
96
+ aggregate_target.user_build_configurations.each_key do |config| # "Debug" => :debug
97
+ build_settings = aggregate_target.build_settings(config) # AggregateTargetSettings
98
+ hmap_md5 = create_hmap.call(build_settings)
99
+ handle_target_with_settings.call(hmap_md5, aggregate_target, config)
100
+ end
101
+ end
102
+
103
+ installer.pod_targets.each do |pod_target|
104
+ UI.message "convert hmap for pod_target #{pod_target}"
105
+ pod_target.build_settings.each do |config, build_settings| # "Debug" => PodTargetSettings
106
+ hmap_md5 = create_hmap.call(build_settings)
107
+ handle_target_with_settings.call(hmap_md5, pod_target, config)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ # hook point
115
+ module Pod
116
+ class Installer
117
+ alias_method :_old_run_podfile_post_install_hook, :run_podfile_post_install_hook
118
+ def run_podfile_post_install_hook
119
+ HmapHelper.post_install(self)
120
+
121
+ _old_run_podfile_post_install_hook
122
+ end
123
+
124
+ end
125
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-hmap-simple
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - shyang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-06 00:00:00.000000000 Z
11
+ date: 2022-03-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
14
  This plugin modifies HEADER_SEARCH_PATHS in Pods/Target Support Files/*/*.xcconfig
@@ -20,6 +20,8 @@ extensions: []
20
20
  extra_rdoc_files: []
21
21
  files:
22
22
  - lib/cocoapods_plugin.rb
23
+ - lib/hmap
24
+ - lib/hmap_optimize.rb
23
25
  homepage: https://github.com/shyang/cocoapods-hmap
24
26
  licenses:
25
27
  - MIT
@@ -39,7 +41,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
39
41
  - !ruby/object:Gem::Version
40
42
  version: '0'
41
43
  requirements: []
42
- rubygems_version: 3.2.22
44
+ rubygems_version: 3.0.3
43
45
  signing_key:
44
46
  specification_version: 4
45
47
  summary: A simple hmap generating plugin for cocoapods.