cocoapods-jxedt 0.0.10 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cocoapods-jxedt/binary/Intergation.rb +18 -13
  3. data/lib/cocoapods-jxedt/binary/config.rb +67 -0
  4. data/lib/cocoapods-jxedt/binary/helper/podfile_post_install_hook.rb +29 -0
  5. data/lib/cocoapods-jxedt/binary/helper/prebuild_sandbox.rb +112 -2
  6. data/lib/cocoapods-jxedt/binary/hooks/CocoapodsJxedtHook.rb +6 -9
  7. data/lib/cocoapods-jxedt/binary/hooks/post_install.rb +2 -2
  8. data/lib/cocoapods-jxedt/binary/hooks/pre_install.rb +33 -9
  9. data/lib/cocoapods-jxedt/binary/main.rb +1 -0
  10. data/lib/cocoapods-jxedt/binary/pod-room/framework.rb +40 -0
  11. data/lib/cocoapods-jxedt/binary/pod-room/xcodebuild_command.rb +79 -1
  12. data/lib/cocoapods-jxedt/binary/pod-room/xcodebuild_raw.rb +1 -1
  13. data/lib/cocoapods-jxedt/binary/prebuild.rb +92 -14
  14. data/lib/cocoapods-jxedt/binary/targets/pod_target.rb +50 -0
  15. data/lib/cocoapods-jxedt/command/binary/binary.rb +36 -0
  16. data/lib/cocoapods-jxedt/command/binary/command/build.rb +84 -0
  17. data/lib/cocoapods-jxedt/command/binary/command/clean.rb +101 -0
  18. data/lib/cocoapods-jxedt/command/binary/command/fetch.rb +36 -0
  19. data/lib/cocoapods-jxedt/command/binary/command/push.rb +41 -0
  20. data/lib/cocoapods-jxedt/command/binary/command/statistics.rb +104 -0
  21. data/lib/cocoapods-jxedt/command/jxedt.rb +1 -1
  22. data/lib/cocoapods-jxedt/command/options/options.rb +85 -2
  23. data/lib/cocoapods-jxedt/gem_version.rb +1 -1
  24. data/lib/cocoapods-jxedt/git_helper/cache_fetcher.rb +34 -0
  25. data/lib/cocoapods-jxedt/git_helper/cache_pucher.rb +42 -0
  26. data/lib/cocoapods-jxedt/git_helper/git_command.rb +48 -0
  27. data/lib/cocoapods-jxedt/git_helper/zip.rb +22 -0
  28. metadata +14 -3
  29. data/lib/cocoapods-jxedt/command/statistics/statistics.rb +0 -98
@@ -22,12 +22,19 @@ module Jxedt
22
22
  return [] if @sandbox_path.nil?
23
23
  return [] unless binary_dir.exist?
24
24
  return [] if @sandbox.source_lockfile.nil?
25
- @targets ||= binary_dir.children().map do |target_path|
26
- if target_path.directory? && (not target_path.children.empty?)
27
- hash_key = @sandbox.source_lockfile.spec_checksums_hash_key(target_path.basename.to_s)
28
- target_path if !(hash_key.nil?) && (target_path + "#{hash_key}.checksum").exist?
29
- end
30
- end.reject(&:nil?).uniq
25
+ @targets ||= begin
26
+ prebuild_targets = binary_dir.children().map do |target_path|
27
+ if target_path.directory? && (not target_path.children.empty?)
28
+ hash_key = @sandbox.source_lockfile.spec_checksums_hash_key(target_path.basename.to_s)
29
+ next if hash_key.nil?
30
+
31
+ checksum_files = target_path.children().select { |path| path.extname == '.checksum' }
32
+ checksum_exists = (target_path + "#{hash_key}.checksum").exist?
33
+ target_path if checksum_files.count == 1 && checksum_exists
34
+ end
35
+ end.reject(&:nil?).uniq
36
+ prebuild_targets
37
+ end
31
38
  @targets
32
39
  end
33
40
 
@@ -80,21 +87,44 @@ module Jxedt
80
87
  target.target_definition.reject_prebuild_pod_names
81
88
  }.uniq
82
89
 
90
+ targets = all_supports_targets.select { |target|
91
+ next if reject_prebuild_pod_names.include?(target.pod_name)
92
+ explicit_prebuild_pod_names.include?(target.pod_name) || Jxedt.config.all_binary_enabled?
93
+ }
94
+ targets
95
+ end
96
+
97
+ def all_supports_targets
83
98
  targets = @source_installer.pod_targets.select { |target|
99
+ # 排除不需要编译
84
100
  next unless target.should_build?
101
+ # 排除target name和pod name不一致的(有两种情况)
102
+ # 1. 同一个pod,在两个target下使用了不同的subspec
103
+ # 2. 同一个pod,在两个不同ios版本的target种引用
85
104
  next unless target.name == target.pod_name
86
- next if reject_prebuild_pod_names.include?(target.pod_name)
87
- explicit_prebuild_pod_names.include?(target.pod_name) || Jxedt.config.all_binary_enabled?
105
+ true
88
106
  }
107
+ # 排除本地pod
89
108
  targets.reject! { |target| @source_installer.sandbox.local?(target.pod_name) } unless Jxedt.config.dev_pods_enabled?
109
+ # 配置中排除的pods
90
110
  targets.reject! { |target| Jxedt.config.excluded_pods.include?(target.pod_name) }
111
+ # target中可能存在需要编译的resource文件
112
+ Jxedt.config.disable_resource_compilable_pods? && targets.reject! { |target|
113
+ # 因为编译library静态库会把需要编译的文件拷贝到宿主工程编译,后面我们要把静态库组装成framework,所以需要过滤掉
114
+ resource_extension_compilable = false
115
+ target.resource_paths.each {|name, resources|
116
+ resources.each {|resource_file|
117
+ resource_extname = Pathname.new(resource_file).basename.extname
118
+ resource_extension_compilable = target.class.resource_extension_compilable?(resource_extname)
119
+ break if resource_extension_compilable
120
+ }
121
+ break if resource_extension_compilable
122
+ }
123
+ resource_extension_compilable
124
+ }
91
125
  targets
92
126
  end
93
127
 
94
- def pods_to_prebuild
95
- targets_to_prebuild.map(&:name).to_a
96
- end
97
-
98
128
  def build
99
129
  check_sandbox = Jxedt::Sandbox.from_sandbox(@source_installer.sandbox)
100
130
  existed_target_names = check_sandbox.target_paths.map { |pair| pair.basename.to_s }
@@ -102,7 +132,7 @@ module Jxedt
102
132
 
103
133
  Pod::UI.puts "Prebuild total count: #{targets.size}"
104
134
  Pod::UI.puts "Prebuild targets: #{ targets.map(&:name)}"
105
- return if targets.empty?
135
+ return [] if targets.empty?
106
136
 
107
137
  require_relative 'pod-room/xcodebuild_command'
108
138
 
@@ -135,15 +165,63 @@ module Jxedt
135
165
 
136
166
  make_prebuild(targets)
137
167
  clear_output_path
168
+
169
+ targets.map(&:pod_name).to_a
170
+ end
171
+
172
+ def build_targets(names: nil, binary_output: nil)
173
+ targets = all_supports_targets
174
+ targets.select! { |target| names.include?(target.pod_name) } if names && names.is_a?(Array) && names.size > 0
175
+
176
+ Pod::UI.puts "Prebuild total count: #{targets.size}"
177
+ Pod::UI.puts "Prebuild targets: #{ targets.map(&:name)}"
178
+ return [] if targets.empty?
179
+
180
+ require_relative 'pod-room/xcodebuild_command'
181
+
182
+ clear_output_path
183
+ case targets[0].platform.name
184
+ when :ios, :tvos, :watchos
185
+ Jxedt.config.support_configurations.each do |configuration|
186
+ Pod::UI.puts "Prebuild configuration: #{configuration}"
187
+ options = make_options
188
+ options[:configuration] = configuration
189
+ options[:targets] = targets
190
+ options[:output_path] = output_path + configuration
191
+ Jxedt::XcodebuildCommand.new(options).run
192
+ end
193
+ when :osx
194
+ Jxedt.config.support_configurations.each do |configuration|
195
+ Pod::UI.puts "Prebuild configuration: #{configuration}"
196
+ options = make_options
197
+ xcodebuild(
198
+ sandbox: options[:sandbox],
199
+ targets: targets,
200
+ configuration: configuration,
201
+ sdk: "macosx",
202
+ clean_build: Jxedt.config.clean_build?,
203
+ args: options[:args]
204
+ )
205
+ end
206
+ else
207
+ raise "Unsupported platform for '#{targets[0].name}': '#{targets[0].platform.name}'"
208
+ end
209
+
210
+ binary_output = Pathname.new(binary_output)
211
+ make_prebuild(targets, binary_output)
212
+ clear_output_path
213
+
214
+ targets.map(&:pod_name).to_a
138
215
  end
139
216
 
140
- def make_prebuild(targets)
217
+ def make_prebuild(targets, binary_output=nil)
141
218
  lockfile = @source_installer.lockfile
142
219
  checksums = lockfile.internal_data["SPEC CHECKSUMS"] || {}
143
220
  checkout_options = lockfile.internal_data["CHECKOUT OPTIONS"] || {}
144
221
 
145
222
  # 目标binary路径
146
223
  binary_path = output_path.parent
224
+ binary_path = binary_output if binary_output && binary_output.parent.exist?
147
225
  prebuild_targets = targets.map(&:name).to_a
148
226
  prebuild_targets.map {|target_name|
149
227
  target_path = binary_path + target_name
@@ -1,4 +1,54 @@
1
1
  module Pod
2
+ class PodTarget < Target
3
+ alias_method :old_resource_paths, :resource_paths
4
+ def resource_paths
5
+ resource_paths = old_resource_paths
6
+ # 没有使用二进制不处理
7
+ return resource_paths unless self.use_binary
8
+
9
+ # 遍历所有的resources
10
+ resource_paths.each do |name, resources|
11
+ resources.map! {|resource_file|
12
+ resource_extname = Pathname.new(resource_file).basename.extname
13
+ # 如果文件不需要编译,跳过
14
+ next resource_file unless self.class.resource_extension_compilable?(resource_extname)
15
+
16
+ # 确定编译后的文件名称
17
+ output_extname = self.class.output_extension_for_resource(resource_extname)
18
+ output_file_name = "#{Pathname.new(resource_file).basename.sub_ext('')}#{output_extname}"
19
+ # 从framework中查找编译后的文件
20
+ file_accessors.each do |file_accessor|
21
+ file_accessor.vendored_frameworks.each do |framework_file|
22
+ framework_name = Pathname.new(framework_file).basename.sub_ext('').to_s
23
+ # 只处理和当前target module_name相同的framework,否则跳过
24
+ next if self.product_module_name != framework_name
25
+
26
+ # xcframework和framework文件分别处理,而且只查找.framework根目录下的文件
27
+ if '.xcframework' == Pathname.new(framework_file).basename.extname
28
+ files = Dir.glob("#{framework_file}/**/#{framework_name}.framework/#{output_file_name}")
29
+ next if files.size == 0 # 没有查找到文件跳过
30
+
31
+ if Gem::Version.new(Pod::VERSION) >= Gem::Version.new('1.10.0')
32
+ resource_file = "${PODS_XCFRAMEWORKS_BUILD_DIR}/#{self.name}/#{framework_name}.framework/#{output_file_name}"
33
+ else
34
+ resource_file = "${PODS_CONFIGURATION_BUILD_DIR}/#{framework_name}.framework/#{output_file_name}"
35
+ end
36
+ else
37
+ files = Dir.glob("#{framework_file}/#{output_file_name}")
38
+ next if files.size == 0 # 没有查找到文件跳过
39
+
40
+ resource_path = Pathname.new("#{framework_file}/#{output_file_name}") # 真实路径
41
+ resource_file = "${PODS_ROOT}/#{resource_path.relative_path_from(self.sandbox.root)}"
42
+ end
43
+ end
44
+ end
45
+ resource_file
46
+ }.reject!(&:nil?)
47
+ end
48
+ resource_paths
49
+ end
50
+ end
51
+
2
52
  class Target
3
53
  # @since 1.5.0
4
54
  class BuildSettings
@@ -0,0 +1,36 @@
1
+ require_relative 'command/statistics'
2
+ require_relative 'command/build'
3
+ require_relative 'command/fetch'
4
+ require_relative 'command/push'
5
+ require_relative 'command/clean'
6
+
7
+ module Pod
8
+ class Command
9
+ class JxedtCommand < Command
10
+ class Binary < JxedtCommand
11
+ self.summary = '二进制相关操作,二进制build、fetch、clean、statistics'
12
+ self.description = <<-DESC
13
+ 二进制相关操作,二进制build、fetch、push、statistics
14
+ DESC
15
+ self.command = 'binary'
16
+ self.abstract_command = true
17
+
18
+ self.arguments = [
19
+ ]
20
+ def self.options
21
+ []
22
+ end
23
+ def initialize(argv)
24
+ super
25
+ end
26
+
27
+ def validate!
28
+ super
29
+ end
30
+
31
+ def run
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,84 @@
1
+ module Pod
2
+ class Command
3
+ class JxedtCommand < Command
4
+ class Binary < JxedtCommand
5
+ class Build < Binary
6
+ self.summary = '组件编译成二进制'
7
+ self.description = <<-DESC
8
+ 统计二进制组件
9
+ DESC
10
+ self.command = 'build'
11
+ self.arguments = [
12
+ ]
13
+ def self.options
14
+ [
15
+ ['--name', '编译的组件name,多个以,分隔'],
16
+ ['--output-path', '编译的二进制文件输出路径'],
17
+ ['--push', 'prebuild frameworks push origin.'],
18
+ ['--force-push', 'force push generated frameworks']
19
+ ]
20
+ end
21
+ def initialize(argv)
22
+ @names = argv.option('name', '').split(',')
23
+ @output_path = argv.option('output-path')
24
+ @force_push = argv.flag?('force-push', false)
25
+ @should_push = argv.flag?('push', false) || @force_push
26
+ super
27
+ end
28
+
29
+ def validate!
30
+ super
31
+ end
32
+
33
+ def run
34
+ podfile = Pod::Config.instance.podfile
35
+ lockfile = Pod::Config.instance.lockfile
36
+ sandbox = Pod::Config.instance.sandbox
37
+ help! '请检查命令执行路径,需要在Podfile文件所在目录执行' if podfile.nil? || lockfile.nil? || sandbox.nil?
38
+
39
+ # 修改config配置
40
+ options = {
41
+ :keep_source_project => true, # 保留源码工程
42
+ }
43
+ Jxedt.config.dsl_config.merge!(options)
44
+
45
+ require 'cocoapods-jxedt/binary/helper/target_definition'
46
+ require 'cocoapods-jxedt/binary/helper/prebuild_sandbox'
47
+ require 'cocoapods-jxedt/binary/helper/podfile_post_install_hook'
48
+
49
+ # 获取原始的installer对象,必须先获取对象
50
+ prebuild_sandbox = Pod::PrebuildSandbox.from_standard_sandbox(sandbox)
51
+ source_installer = Pod::Installer.new(prebuild_sandbox, podfile, lockfile)
52
+ # 执行install
53
+ source_installer.install!
54
+
55
+ # 保存首次`pod install`的lockfile结果,用来验证二进制文件和后面做结果校验
56
+ sandbox.source_lockfile = prebuild_sandbox.source_lockfile = source_installer.lockfile
57
+
58
+ require 'cocoapods-jxedt/binary/helper/podfile_options'
59
+ require 'cocoapods-jxedt/binary/prebuild'
60
+
61
+ # prebuild_job
62
+ prebuild_sandbox.link_source_project!
63
+ log_section "🚀 Prebuild frameworks"
64
+ # 默认放在Pods源码工程同级目录下
65
+ @output_path = prebuild_sandbox.project_path.parent + '.command_build' if @output_path.nil?
66
+ build_targets = Jxedt::Prebuild.new(source_installer).build_targets :names => @names, :binary_output => @output_path
67
+ if @should_push && Jxedt.config.cache_repo_enabled?
68
+ require 'cocoapods-jxedt/git_helper/cache_pucher'
69
+ output_dir = Pathname.new(@output_path)
70
+ Jxedt::CachePucher.push(output_dir, build_targets, @force_push)
71
+ end
72
+ prebuild_sandbox.clean_source_project!
73
+ end
74
+
75
+ def log_section(message)
76
+ Pod::UI.puts "-----------------------------------------"
77
+ Pod::UI.puts message
78
+ Pod::UI.puts "-----------------------------------------"
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,101 @@
1
+ module Pod
2
+ class Command
3
+ class JxedtCommand < Command
4
+ class Clean < JxedtCommand
5
+ class Fecth < Binary
6
+ self.summary = 'clean cache repo.'
7
+ self.description = <<-DESC
8
+ clean cache repo.
9
+ DESC
10
+ self.command = 'clean'
11
+ self.arguments = [
12
+ ]
13
+ def self.options
14
+ [
15
+ ['--name', 'Remove the file with the corresponding name.'],
16
+ ['--local', 'Remove local cache.'],
17
+ ['--all', 'Remove all files.'],
18
+ ]
19
+ end
20
+ def initialize(argv)
21
+ @names = argv.option('name', '').split(',')
22
+ @local = argv.flag?('local', false)
23
+ @all = argv.flag?('all', false)
24
+ super
25
+ end
26
+
27
+ def validate!
28
+ help! "Please enter the necessary options." if @names.empty? && !@all
29
+ super
30
+ end
31
+
32
+ def run
33
+ podfile = Pod::Config.instance.podfile
34
+ help! '请检查命令执行路径,需要在Podfile文件所在目录执行' if podfile.nil?
35
+
36
+ require 'cocoapods-jxedt/git_helper/git_command'
37
+
38
+ repo = Jxedt.config.git_remote_repo
39
+ cache_path = Jxedt.config.git_cache_path
40
+ branch = Jxedt.config.cache_branch
41
+
42
+ local_cache_dir = Pod::Config.instance.sandbox.root + Jxedt.config.binary_dir
43
+
44
+ commander = nil
45
+ commander = Jxedt::GitCommand.new(cache_path) if !@local && Jxedt.config.cache_repo_enabled?
46
+ # fetch
47
+ commander.git_fetch(repo, branch) if commander
48
+
49
+ if @names.size > 0
50
+ local_deleted, remote_deleted = [], []
51
+ @names.each do |name|
52
+ local_cache = local_cache_dir + name
53
+ if local_cache.exist?
54
+ local_cache.rmtree
55
+ local_deleted << name
56
+ end
57
+
58
+ if commander
59
+ remote_cache_dir = Pathname.new(cache_path) + "GeneratedFrameworks"
60
+ remote_cache = remote_cache_dir + name
61
+ if remote_cache.exist?
62
+ remote_cache.rmtree
63
+ remote_deleted << name
64
+ end
65
+ end
66
+ end
67
+ # push
68
+ commander.git_commit_and_push(branch) if commander && remote_deleted.size > 0
69
+ UI.puts "⚠️ ⚠️ ⚠️ 本地缓存文件已清除: #{local_deleted}" if local_deleted.size > 0
70
+ UI.puts "⚠️ ⚠️ ⚠️ 远程缓存文件已清除: #{remote_deleted}" if remote_deleted.size > 0
71
+ else
72
+ random = (0...10).map { (97 + rand(26)).chr }.join
73
+ input = get_stdin("你确认要清除所有缓存吗?包括远程仓库的缓存。确认请输入: #{random}")
74
+ help! "输入错误,自动退出。" if random != input
75
+
76
+ local_cache_dir.rmtree if local_cache_dir.exist?
77
+
78
+ if commander
79
+ remote_cache_dir = Pathname.new(cache_path) + "GeneratedFrameworks"
80
+ if remote_cache_dir.exist?
81
+ remote_cache_dir.rmtree
82
+ # push
83
+ commander.git_commit_and_push(branch)
84
+ end
85
+ end
86
+ UI.puts "⚠️ ⚠️ ⚠️ 所有缓存文件已清除"
87
+ end
88
+
89
+ end
90
+
91
+ def get_stdin(message)
92
+ UI.puts "#{message}".red
93
+ print "请输入--> ".green
94
+ val = STDIN.gets.chomp.strip
95
+ val
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,36 @@
1
+ module Pod
2
+ class Command
3
+ class JxedtCommand < Command
4
+ class Binary < JxedtCommand
5
+ class Fecth < Binary
6
+ self.summary = 'fetch cache repo.'
7
+ self.description = <<-DESC
8
+ fetch cache repo.
9
+ DESC
10
+ self.command = 'fetch'
11
+ self.arguments = [
12
+ ]
13
+ def self.options
14
+ []
15
+ end
16
+ def initialize(argv)
17
+ super
18
+ end
19
+
20
+ def validate!
21
+ super
22
+ end
23
+
24
+ def run
25
+ podfile = Pod::Config.instance.podfile
26
+ help! '请检查命令执行路径,需要在Podfile文件所在目录执行' if podfile.nil?
27
+ help! '你需要在cache_repo中配置正确的git仓库地址!' unless Jxedt.config.cache_repo_enabled?
28
+
29
+ require 'cocoapods-jxedt/git_helper/cache_fetcher'
30
+ Jxedt::CacheFetcher.fetch
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,41 @@
1
+ module Pod
2
+ class Command
3
+ class JxedtCommand < Command
4
+ class Binary < JxedtCommand
5
+ class Push < Binary
6
+ self.summary = 'sync local files to git repo.'
7
+ self.description = <<-DESC
8
+ sync local files to git repo.
9
+ DESC
10
+ self.command = 'push'
11
+ self.arguments = [
12
+ ]
13
+ def self.options
14
+ [
15
+ ['--force-push', 'force push generated frameworks']
16
+ ]
17
+ end
18
+ def initialize(argv)
19
+ @force_push = argv.flag?('force-push', false)
20
+ super
21
+ end
22
+
23
+ def validate!
24
+ super
25
+ end
26
+
27
+ def run
28
+ podfile = Pod::Config.instance.podfile
29
+ help! '请检查命令执行路径,需要在Podfile文件所在目录执行' if podfile.nil?
30
+ help! '你需要在cache_repo中配置正确的git仓库地址!' unless Jxedt.config.cache_repo_enabled?
31
+
32
+ require 'cocoapods-jxedt/git_helper/cache_pucher'
33
+
34
+ output_dir = Pod::Config.instance.sandbox.root + Jxedt.config.binary_dir
35
+ Jxedt::CachePucher.push(output_dir, nil, @force_push)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,104 @@
1
+ module Pod
2
+ class Command
3
+ class JxedtCommand < Command
4
+ class Binary < JxedtCommand
5
+ class Statistics < Binary
6
+ self.summary = '统计二进制使用情况'
7
+ self.description = <<-DESC
8
+ 统计二进制使用详情
9
+ DESC
10
+ self.command = 'statistics'
11
+ self.arguments = [
12
+ ]
13
+ def self.options
14
+ [
15
+ ['--failed', '统计校验失败的二进制'],
16
+ ]
17
+ end
18
+ def initialize(argv)
19
+ @check_failed = argv.flag?('failed')
20
+ super
21
+ end
22
+
23
+ def validate!
24
+ super
25
+ end
26
+
27
+ def run
28
+ podfile = Pod::Config.instance.podfile
29
+ lockfile = Pod::Config.instance.lockfile
30
+ help! '请检查命令执行路径,需要在Podfile文件所在目录执行' if podfile.nil? || lockfile.nil?
31
+
32
+ require 'cocoapods-jxedt/binary/config'
33
+ require 'cocoapods-jxedt/binary/helper/podfile_options'
34
+
35
+ pods_root = Pathname.new(File.dirname(podfile.defined_in_file)) + "Pods"
36
+ binary_dir = pods_root + Jxedt.config.binary_dir
37
+
38
+ used_binary = []
39
+ Dir.glob("#{pods_root}/*/_Prebuild") do |file_path|
40
+ next unless File.directory?(file_path)
41
+ dir_name = File.dirname(file_path)
42
+ name = File.basename(dir_name).to_s
43
+ target_path = binary_dir + name
44
+ next unless target_path.exist? # 路径不存在,跳过
45
+
46
+ new_hash = {}
47
+ # name
48
+ new_hash[:name] = name
49
+
50
+ # multiple_configuration
51
+ configuration_enable = target_path.children().select { |path| "#{path.basename}" == 'Debug' || "#{path.basename}" == 'Release' }.count == 2
52
+ new_hash[:multiple_configuration] = configuration_enable
53
+
54
+ # checksum validation
55
+ checksum_files = target_path.children().select { |path| path.extname == '.checksum' }
56
+ checksum_file = checksum_files.first
57
+ new_hash[:checksum] = checksum_file.basename.to_s.gsub('.checksum', '') unless checksum_file.nil?
58
+ new_hash[:checksum_count] = checksum_files.count
59
+
60
+ used_binary << new_hash
61
+ end
62
+
63
+ # print
64
+ index, failed = 0, []
65
+ used_binary.sort_by {|hash| hash[:name].capitalize }.each do |hash|
66
+ name = hash[:name]
67
+
68
+ checksum = lockfile.spec_checksums_hash_key(name)
69
+ validation_passed = checksum && checksum == hash[:checksum] && hash[:checksum_count] == 1
70
+ failed << name unless validation_passed
71
+
72
+ # 校验和是否用的 git commitid
73
+ checkout_options = lockfile.internal_data["CHECKOUT OPTIONS"] || {}
74
+ is_git_commitid = checkout_options[name] && checkout_options[name][:commit]
75
+
76
+ if validation_passed
77
+ next if @check_failed
78
+ index += 1
79
+ log = <<~LOG
80
+ #{index}). #{name}:
81
+ multiple configuration: #{hash[:multiple_configuration]}
82
+ checksum#{"(git commitid)" if is_git_commitid}: #{hash[:checksum]}
83
+ LOG
84
+ Pod::UI.puts log
85
+ else
86
+ index += 1
87
+ log = <<~LOG
88
+ #{index}). #{name}:
89
+ multiple configuration: #{hash[:multiple_configuration]}
90
+ checksum: #{hash[:checksum]}
91
+ checksum in lockfile#{"(git commitid)" if is_git_commitid}: #{checksum}
92
+ checksum file count: #{hash[:checksum_count]}
93
+ LOG
94
+ Pod::UI.puts log.red
95
+ end
96
+ end
97
+ Pod::UI.puts "checksum校验失败的组件: #{failed}".red if failed.size > 0
98
+ Pod::UI.puts "建议使用命令清除prebuild缓存,再重新pod install或使用pod jxedt binary build。clean命令:`pod jxedt binary clean --name=#{failed.join(',')}`".red if failed.size > 0
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -1,6 +1,6 @@
1
1
  require_relative 'options/options'
2
2
  require_relative 'header/header'
3
- require_relative 'statistics/statistics'
3
+ require_relative 'binary/binary'
4
4
 
5
5
  module Pod
6
6
  class Command