cocoapods-lhj-bin 0.0.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 +7 -0
- data/LICENSE.txt +22 -0
- data/README.md +11 -0
- data/lib/cocoapods-lhj-bin.rb +2 -0
- data/lib/cocoapods-lhj-bin/command.rb +1 -0
- data/lib/cocoapods-lhj-bin/command/bin.rb +59 -0
- data/lib/cocoapods-lhj-bin/command/bin/archive.rb +233 -0
- data/lib/cocoapods-lhj-bin/command/bin/auto.rb +198 -0
- data/lib/cocoapods-lhj-bin/command/bin/code.rb +232 -0
- data/lib/cocoapods-lhj-bin/command/bin/dup.rb +78 -0
- data/lib/cocoapods-lhj-bin/command/bin/init.rb +69 -0
- data/lib/cocoapods-lhj-bin/command/bin/initHotKey.rb +70 -0
- data/lib/cocoapods-lhj-bin/command/bin/install.rb +44 -0
- data/lib/cocoapods-lhj-bin/command/bin/lhj.rb +46 -0
- data/lib/cocoapods-lhj-bin/command/bin/lib/lint.rb +69 -0
- data/lib/cocoapods-lhj-bin/command/bin/repo/update.rb +43 -0
- data/lib/cocoapods-lhj-bin/command/bin/spec/create.rb +73 -0
- data/lib/cocoapods-lhj-bin/command/bin/spec/push.rb +115 -0
- data/lib/cocoapods-lhj-bin/command/bin/update.rb +153 -0
- data/lib/cocoapods-lhj-bin/config/config.rb +137 -0
- data/lib/cocoapods-lhj-bin/config/config_asker.rb +57 -0
- data/lib/cocoapods-lhj-bin/config/config_builder.rb +216 -0
- data/lib/cocoapods-lhj-bin/config/config_hot_key.rb +103 -0
- data/lib/cocoapods-lhj-bin/config/config_hot_key_asker.rb +57 -0
- data/lib/cocoapods-lhj-bin/gem_version.rb +9 -0
- data/lib/cocoapods-lhj-bin/helpers.rb +5 -0
- data/lib/cocoapods-lhj-bin/helpers/Info.plist +0 -0
- data/lib/cocoapods-lhj-bin/helpers/build_helper.rb +158 -0
- data/lib/cocoapods-lhj-bin/helpers/build_utils.rb +93 -0
- data/lib/cocoapods-lhj-bin/helpers/framework.rb +85 -0
- data/lib/cocoapods-lhj-bin/helpers/framework_builder.rb +444 -0
- data/lib/cocoapods-lhj-bin/helpers/library.rb +54 -0
- data/lib/cocoapods-lhj-bin/helpers/library_builder.rb +90 -0
- data/lib/cocoapods-lhj-bin/helpers/sources_helper.rb +36 -0
- data/lib/cocoapods-lhj-bin/helpers/spec_creator.rb +168 -0
- data/lib/cocoapods-lhj-bin/helpers/spec_files_helper.rb +75 -0
- data/lib/cocoapods-lhj-bin/helpers/spec_source_creator.rb +227 -0
- data/lib/cocoapods-lhj-bin/helpers/upload_helper.rb +87 -0
- data/lib/cocoapods-lhj-bin/native.rb +19 -0
- data/lib/cocoapods-lhj-bin/native/acknowledgements.rb +27 -0
- data/lib/cocoapods-lhj-bin/native/analyzer.rb +55 -0
- data/lib/cocoapods-lhj-bin/native/file_accessor.rb +28 -0
- data/lib/cocoapods-lhj-bin/native/installation_options.rb +25 -0
- data/lib/cocoapods-lhj-bin/native/installer.rb +135 -0
- data/lib/cocoapods-lhj-bin/native/linter.rb +26 -0
- data/lib/cocoapods-lhj-bin/native/path_source.rb +33 -0
- data/lib/cocoapods-lhj-bin/native/pod_source_installer.rb +19 -0
- data/lib/cocoapods-lhj-bin/native/pod_target_installer.rb +94 -0
- data/lib/cocoapods-lhj-bin/native/podfile.rb +91 -0
- data/lib/cocoapods-lhj-bin/native/podfile_env.rb +37 -0
- data/lib/cocoapods-lhj-bin/native/podfile_generator.rb +199 -0
- data/lib/cocoapods-lhj-bin/native/podspec_finder.rb +25 -0
- data/lib/cocoapods-lhj-bin/native/resolver.rb +230 -0
- data/lib/cocoapods-lhj-bin/native/sandbox_analyzer.rb +34 -0
- data/lib/cocoapods-lhj-bin/native/source.rb +35 -0
- data/lib/cocoapods-lhj-bin/native/sources_manager.rb +20 -0
- data/lib/cocoapods-lhj-bin/native/specification.rb +31 -0
- data/lib/cocoapods-lhj-bin/native/target_validator.rb +41 -0
- data/lib/cocoapods-lhj-bin/native/validator.rb +40 -0
- data/lib/cocoapods-lhj-bin/source_provider_hook.rb +66 -0
- data/lib/cocoapods_plugin.rb +2 -0
- data/spec/command/bin_spec.rb +12 -0
- data/spec/spec_helper.rb +50 -0
- metadata +177 -0
@@ -0,0 +1,230 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'parallel'
|
4
|
+
require 'cocoapods'
|
5
|
+
require 'cocoapods-lhj-bin/native/podfile'
|
6
|
+
require 'cocoapods-lhj-bin/native/sources_manager'
|
7
|
+
require 'cocoapods-lhj-bin/native/installation_options'
|
8
|
+
require 'cocoapods-lhj-bin/gem_version'
|
9
|
+
require 'cocoapods-lhj-bin/command/bin/archive'
|
10
|
+
|
11
|
+
module Pod
|
12
|
+
class Resolver
|
13
|
+
if Pod.match_version?('~> 1.6')
|
14
|
+
# 其实不用到 resolver_specs_by_target 再改 spec
|
15
|
+
# 在这个方法里面,通过修改 dependency 的 source 应该也可以
|
16
|
+
# 就是有一点,如果改了之后,对应的 source 没有符合 dependency 的版本
|
17
|
+
# 分析依赖阶段就会报错了,没法像 resolver_specs_by_target 一样
|
18
|
+
# 没有对应的二进制版本时还可以转到源码源码
|
19
|
+
#
|
20
|
+
def aggregate_for_dependency(dependency)
|
21
|
+
sources_manager = Config.instance.sources_manager
|
22
|
+
if dependency&.podspec_repo
|
23
|
+
sources_manager.aggregate_for_dependency(dependency)
|
24
|
+
# 采用 lock 中的 source ,会导致插件对 source 的先后调整失效
|
25
|
+
# elsif (locked_vertex = @locked_dependencies.vertex_named(dependency.name)) && (locked_dependency = locked_vertex.payload) && locked_dependency.podspec_repo
|
26
|
+
# sources_manager.aggregate_for_dependency(locked_dependency)
|
27
|
+
else
|
28
|
+
@aggregate ||= Source::Aggregate.new(sources)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
if Pod.match_version?('~> 1.4')
|
34
|
+
def specifications_for_dependency(dependency, additional_requirements_frozen = [])
|
35
|
+
additional_requirements = additional_requirements_frozen.dup.compact
|
36
|
+
requirement = Requirement.new(dependency.requirement.as_list + additional_requirements.flat_map(&:as_list))
|
37
|
+
if podfile.allow_prerelease? && !requirement.prerelease?
|
38
|
+
requirement = Requirement.new(dependency.requirement.as_list.map { |r| r + '.a' } + additional_requirements.flat_map(&:as_list))
|
39
|
+
end
|
40
|
+
|
41
|
+
options = if Pod.match_version?('~> 1.7')
|
42
|
+
podfile.installation_options
|
43
|
+
else
|
44
|
+
installation_options
|
45
|
+
end
|
46
|
+
|
47
|
+
if Pod.match_version?('~> 1.8')
|
48
|
+
specifications = find_cached_set(dependency)
|
49
|
+
.all_specifications(options.warn_for_multiple_pod_sources, requirement)
|
50
|
+
else
|
51
|
+
specifications = find_cached_set(dependency)
|
52
|
+
.all_specifications(options.warn_for_multiple_pod_sources)
|
53
|
+
.select { |s| requirement.satisfied_by? s.version }
|
54
|
+
end
|
55
|
+
|
56
|
+
specifications
|
57
|
+
.map { |s| s.subspec_by_name(dependency.name, false, true) }
|
58
|
+
.compact
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
if Pod.match_version?('~> 1.6')
|
63
|
+
alias old_valid_possibility_version_for_root_name? valid_possibility_version_for_root_name?
|
64
|
+
|
65
|
+
def valid_possibility_version_for_root_name?(requirement, activated, spec)
|
66
|
+
return true if podfile.allow_prerelease?
|
67
|
+
|
68
|
+
old_valid_possibility_version_for_root_name?(requirement, activated, spec)
|
69
|
+
end
|
70
|
+
elsif Pod.match_version?('~> 1.4')
|
71
|
+
def requirement_satisfied_by?(requirement, activated, spec)
|
72
|
+
version = spec.version
|
73
|
+
return false unless requirement.requirement.satisfied_by?(version)
|
74
|
+
|
75
|
+
shared_possibility_versions, prerelease_requirement = possibility_versions_for_root_name(requirement, activated)
|
76
|
+
if !shared_possibility_versions.empty? && !shared_possibility_versions.include?(version)
|
77
|
+
return false
|
78
|
+
end
|
79
|
+
if !podfile.allow_prerelease? && version.prerelease? && !prerelease_requirement
|
80
|
+
return false
|
81
|
+
end
|
82
|
+
unless spec_is_platform_compatible?(activated, requirement, spec)
|
83
|
+
return false
|
84
|
+
end
|
85
|
+
|
86
|
+
true
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# >= 1.4.0 才有 resolver_specs_by_target 以及 ResolverSpecification
|
91
|
+
# >= 1.5.0 ResolverSpecification 才有 source,供 install 或者其他操作时,输入 source 变更
|
92
|
+
#
|
93
|
+
if Pod.match_version?('~> 1.4')
|
94
|
+
old_resolver_specs_by_target = instance_method(:resolver_specs_by_target)
|
95
|
+
define_method(:resolver_specs_by_target) do
|
96
|
+
specs_by_target = old_resolver_specs_by_target.bind(self).call
|
97
|
+
|
98
|
+
sources_manager = Config.instance.sources_manager
|
99
|
+
use_source_pods = podfile.use_source_pods
|
100
|
+
|
101
|
+
missing_binary_specs = []
|
102
|
+
specs_by_target.each do |target, rspecs|
|
103
|
+
# use_binaries 并且 use_source_pods 不包含 本地可过滤
|
104
|
+
use_binary_rspecs = if podfile.use_binaries? || podfile.use_binaries_selector
|
105
|
+
rspecs.select do |rspec|
|
106
|
+
([rspec.name, rspec.root.name] & use_source_pods).empty? &&
|
107
|
+
(podfile.use_binaries_selector.nil? || podfile.use_binaries_selector.call(rspec.spec))
|
108
|
+
end
|
109
|
+
else
|
110
|
+
[]
|
111
|
+
end
|
112
|
+
|
113
|
+
# Parallel.map(rspecs, in_threads: 8) do |rspec|
|
114
|
+
specs_by_target[target] = rspecs.map do |rspec|
|
115
|
+
# 含有 subspecs 的组件暂不处理
|
116
|
+
# next rspec if rspec.spec.subspec? || rspec.spec.subspecs.any?
|
117
|
+
|
118
|
+
# developments 组件采用默认输入的 spec (development pods 的 source 为 nil)
|
119
|
+
# 可以使 :podspec => "htts://IMYFoundation.podspec"可以走下去,by slj
|
120
|
+
# unless rspec.spec.respond_to?(:spec_source) && rspec.spec.spec_source
|
121
|
+
# next rspec
|
122
|
+
# end
|
123
|
+
|
124
|
+
# 采用二进制依赖并且不为开发组件
|
125
|
+
use_binary = use_binary_rspecs.include?(rspec)
|
126
|
+
source = use_binary ? sources_manager.binary_source : sources_manager.code_source
|
127
|
+
|
128
|
+
spec_version = rspec.spec.version
|
129
|
+
UI.message 'cocoapods-lhj-bin 插件'
|
130
|
+
UI.message "- 开始处理 #{rspec.spec.name} #{spec_version} 组件."
|
131
|
+
|
132
|
+
begin
|
133
|
+
# 从新 source 中获取 spec,在bin archive中会异常,因为找不到
|
134
|
+
specification = source.specification(rspec.root.name, spec_version)
|
135
|
+
UI.message "#{rspec.root.name} #{spec_version} \r\n specification =#{specification} "
|
136
|
+
# 组件是 subspec
|
137
|
+
if rspec.spec.subspec?
|
138
|
+
specification = specification.subspec_by_name(rspec.name, false, true)
|
139
|
+
end
|
140
|
+
# 这里可能出现分析依赖的 source 和切换后的 source 对应 specification 的 subspec 对应不上
|
141
|
+
# 造成 subspec_by_name 返回 nil,这个是正常现象
|
142
|
+
next unless specification
|
143
|
+
|
144
|
+
used_by_only = if Pod.match_version?('~> 1.7')
|
145
|
+
rspec.used_by_non_library_targets_only
|
146
|
+
else
|
147
|
+
rspec.used_by_tests_only
|
148
|
+
end
|
149
|
+
# used_by_only = rspec.respond_to?(:used_by_tests_only) ? rspec.used_by_tests_only : rspec.used_by_non_library_targets_only
|
150
|
+
# 组装新的 rspec ,替换原 rspec
|
151
|
+
if use_binary
|
152
|
+
rspec = if Pod.match_version?('~> 1.4.0')
|
153
|
+
ResolverSpecification.new(specification, used_by_only)
|
154
|
+
else
|
155
|
+
ResolverSpecification.new(specification, used_by_only, source)
|
156
|
+
end
|
157
|
+
UI.message "组装新的 rspec ,替换原 rspec #{rspec.root.name} #{spec_version} \r\n specification =#{specification} \r\n #{rspec} "
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
rescue Pod::StandardError => e
|
162
|
+
# 没有从新的 source 找到对应版本组件,直接返回原 rspec
|
163
|
+
|
164
|
+
# missing_binary_specs << rspec.spec if use_binary
|
165
|
+
missing_binary_specs << rspec.spec
|
166
|
+
rspec
|
167
|
+
end
|
168
|
+
|
169
|
+
rspec
|
170
|
+
end.compact
|
171
|
+
end
|
172
|
+
|
173
|
+
if missing_binary_specs.any?
|
174
|
+
missing_binary_specs.uniq.each do |spec|
|
175
|
+
UI.message "【#{spec.name} | #{spec.version}】组件无对应二进制版本 , 将采用源码依赖."
|
176
|
+
end
|
177
|
+
Pod::Command::Bin::Archive.missing_binary_specs(missing_binary_specs)
|
178
|
+
|
179
|
+
#缓存没有二进制组件到spec文件,local_psec_dir 目录
|
180
|
+
sources_sepc = []
|
181
|
+
des_dir = CBin::Config::Builder.instance.local_psec_dir
|
182
|
+
FileUtils.rm_f(des_dir) if File.exist?des_dir
|
183
|
+
Dir.mkdir des_dir unless File.exist?des_dir
|
184
|
+
missing_binary_specs.uniq.each do |spec|
|
185
|
+
next if spec.name.include?('/')
|
186
|
+
|
187
|
+
spec_git_res = false
|
188
|
+
CBin::Config::Builder.instance.ignore_git_list.each do |ignore_git|
|
189
|
+
spec_git_res = spec.source[:git] && spec.source[:git].include?(ignore_git)
|
190
|
+
break if spec_git_res
|
191
|
+
end
|
192
|
+
next if spec_git_res
|
193
|
+
|
194
|
+
#获取没有制作二进制版本的spec集合
|
195
|
+
sources_sepc << spec
|
196
|
+
unless spec.defined_in_file.nil?
|
197
|
+
FileUtils.cp("#{spec.defined_in_file}", "#{des_dir}")
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
specs_by_target
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
if Pod.match_version?('~> 1.4.0')
|
208
|
+
# 1.4.0 没有 spec_source
|
209
|
+
class Specification
|
210
|
+
class Set
|
211
|
+
class LazySpecification < BasicObject
|
212
|
+
attr_reader :spec_source
|
213
|
+
|
214
|
+
old_initialize = instance_method(:initialize)
|
215
|
+
define_method(:initialize) do |name, version, source|
|
216
|
+
old_initialize.bind(self).call(name, version, source)
|
217
|
+
|
218
|
+
@spec_source = source
|
219
|
+
end
|
220
|
+
|
221
|
+
def respond_to?(method, include_all = false)
|
222
|
+
return super unless method == :spec_source
|
223
|
+
|
224
|
+
true
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
end
|
229
|
+
end
|
230
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
class Installer
|
5
|
+
class Analyzer
|
6
|
+
class SandboxAnalyzer
|
7
|
+
# def pod_changed?(pod)
|
8
|
+
# spec = root_spec(pod)
|
9
|
+
# 有 subspec 的情况下,root spec 对应的 used_files 可能始终为空
|
10
|
+
# 要添加为空 && 没有 subspec 的情况
|
11
|
+
# file_accessors = spec.available_platforms.map { |platform| Sandbox::FileAccessor.new(sandbox.pod_dir(pod), spec.consumer(platform)) }
|
12
|
+
# files = [
|
13
|
+
# file_accessors.map(&:vendored_frameworks),
|
14
|
+
# file_accessors.map(&:vendored_libraries),
|
15
|
+
# file_accessors.map(&:resource_bundle_files),
|
16
|
+
# file_accessors.map(&:prefix_header),
|
17
|
+
# file_accessors.map(&:resources),
|
18
|
+
# file_accessors.map(&:source_files),
|
19
|
+
# file_accessors.map(&:module_map),
|
20
|
+
# ]
|
21
|
+
# used_files = files.flatten.compact.map(&:to_s).uniq
|
22
|
+
# p pod if used_files.empty?
|
23
|
+
|
24
|
+
# return true if spec.version != sandbox_version(pod)
|
25
|
+
# return true if spec.checksum != sandbox_checksum(pod)
|
26
|
+
# return true if resolved_spec_names(pod) != sandbox_spec_names(pod)
|
27
|
+
# return true if sandbox.predownloaded?(pod)
|
28
|
+
# return true if folder_empty?(pod)
|
29
|
+
# false
|
30
|
+
# end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'cocoapods'
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
class Source
|
7
|
+
# Returns the path of the specification with the given name and version.
|
8
|
+
#
|
9
|
+
# @param [String] name
|
10
|
+
# the name of the Pod.
|
11
|
+
#
|
12
|
+
# @param [Version,String] version
|
13
|
+
# the version for the specification.
|
14
|
+
#
|
15
|
+
# @return [Pathname] The path of the specification.
|
16
|
+
#
|
17
|
+
def specification_path(name, version)
|
18
|
+
raise ArgumentError, 'No name' unless name
|
19
|
+
raise ArgumentError, 'No version' unless version
|
20
|
+
|
21
|
+
path = pod_path(name) + version.to_s
|
22
|
+
|
23
|
+
specification_path = Specification::VALID_EXTNAME
|
24
|
+
.map { |extname| "#{name}#{extname}" }
|
25
|
+
.map { |file| path + file }
|
26
|
+
.find(&:exist?)
|
27
|
+
|
28
|
+
unless specification_path
|
29
|
+
raise StandardError, "Unable to find the specification #{name} " \
|
30
|
+
"(#{version}) in the #{self.name} source."
|
31
|
+
end
|
32
|
+
specification_path
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'cocoapods'
|
4
|
+
require 'cocoapods-lhj-bin/config/config'
|
5
|
+
|
6
|
+
module Pod
|
7
|
+
class Source
|
8
|
+
class Manager
|
9
|
+
# 源码 source
|
10
|
+
def code_source
|
11
|
+
source_with_name_or_url(CBin.config.code_repo_url)
|
12
|
+
end
|
13
|
+
|
14
|
+
# 二进制 source
|
15
|
+
def binary_source
|
16
|
+
source_with_name_or_url(CBin.config.binary_repo_url)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require 'cocoapods-lhj-bin/native/sources_manager'
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
class Specification
|
7
|
+
VALID_EXTNAME = %w[.binary.podspec.json .binary.podspec .podspec.json .podspec].freeze
|
8
|
+
DEFAULT_TEMPLATE_EXTNAME = %w[.binary-template.podspec .binary-template.podspec.json].freeze
|
9
|
+
|
10
|
+
# TODO
|
11
|
+
# 可以在这里根据组件依赖二进制或源码调整 sources 的先后顺序
|
12
|
+
# 如果是源码,则调整 code_source 到最前面
|
13
|
+
# 如果是二进制,则调整 binary_source 到最前面
|
14
|
+
# 这样 CocoaPods 分析时,就会优先获取到对应源的 podspec
|
15
|
+
#
|
16
|
+
# 先要把 Podfile 里面的配置数据保存到单例中,再在这里判断,就不需要 resolver 了
|
17
|
+
# 但是现在这个插件依旧可用,重构需要时间 = = ,没什么动力去重构了呀。。。
|
18
|
+
#
|
19
|
+
# class Set
|
20
|
+
# old_initialize = instance_method(:initialize)
|
21
|
+
# define_method(:initialize) do |name, sources|
|
22
|
+
# if name == 'TDFAdaptationKit'
|
23
|
+
# sources_manager = Pod::Config.instance.sources_manager
|
24
|
+
# # sources = [sources_manager.binary_source, *sources].uniq
|
25
|
+
# sources = [sources_manager.code_source, *sources].uniq
|
26
|
+
# end
|
27
|
+
# old_initialize.bind(self).call(name, sources)
|
28
|
+
# end
|
29
|
+
# end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Pod
|
2
|
+
class Installer
|
3
|
+
class Xcode
|
4
|
+
# The {Xcode::TargetValidator} ensures that the pod and aggregate target
|
5
|
+
# configuration is valid for installation.
|
6
|
+
#
|
7
|
+
class TargetValidator
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
def verify_swift_pods_have_module_dependencies
|
12
|
+
error_messages = []
|
13
|
+
pod_targets.each do |pod_target|
|
14
|
+
next unless pod_target.uses_swift?
|
15
|
+
|
16
|
+
non_module_dependencies = []
|
17
|
+
pod_target.dependent_targets.each do |dependent_target|
|
18
|
+
next if !dependent_target.should_build? || dependent_target.defines_module?
|
19
|
+
non_module_dependencies << dependent_target.name
|
20
|
+
end
|
21
|
+
|
22
|
+
next if non_module_dependencies.empty?
|
23
|
+
|
24
|
+
error_messages << "The Swift pod `#{pod_target.name}` depends upon #{non_module_dependencies.map { |d| "`#{d}`" }.to_sentence}, " \
|
25
|
+
"which #{non_module_dependencies.count == 1 ? 'does' : 'do'} not define modules. " \
|
26
|
+
'To opt into those targets generating module maps '\
|
27
|
+
'(which is necessary to import them from Swift when building as static libraries), ' \
|
28
|
+
'you may set `use_modular_headers!` globally in your Podfile, '\
|
29
|
+
'or specify `:modular_headers => true` for particular dependencies.'
|
30
|
+
end
|
31
|
+
return false
|
32
|
+
|
33
|
+
# raise Informative, 'The following Swift pods cannot yet be integrated '\
|
34
|
+
# "as static libraries:\n\n#{error_messages.join("\n\n")}"
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
class Validator
|
5
|
+
# def validate_source_url(spec)
|
6
|
+
# return if spec.source.nil? || spec.source[:http].nil?
|
7
|
+
# url = URI(spec.source[:http])
|
8
|
+
# return if url.scheme == 'https' || url.scheme == 'file'
|
9
|
+
# warning('http', "The URL (`#{url}`) doesn't use the encrypted HTTPs protocol. " \
|
10
|
+
# 'It is crucial for Pods to be transferred over a secure protocol to protect your users from man-in-the-middle attacks. '\
|
11
|
+
# 'This will be an error in future releases. Please update the URL to use https.')
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# Perform analysis for a given spec (or subspec)
|
15
|
+
#
|
16
|
+
def perform_extensive_analysis(spec)
|
17
|
+
return true
|
18
|
+
end
|
19
|
+
|
20
|
+
#覆盖
|
21
|
+
def check_file_patterns
|
22
|
+
FILE_PATTERNS.each do |attr_name|
|
23
|
+
next if %i(source_files resources).include? attr_name
|
24
|
+
if respond_to?("_validate_#{attr_name}", true)
|
25
|
+
send("_validate_#{attr_name}")
|
26
|
+
else
|
27
|
+
validate_nonempty_patterns(attr_name, :error)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
_validate_header_mappings_dir
|
32
|
+
if consumer.spec.root?
|
33
|
+
_validate_license
|
34
|
+
_validate_module_map
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def validate_source_url(spec); end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'cocoapods-lhj-bin/native/sources_manager'
|
2
|
+
require 'cocoapods-lhj-bin/command/bin/repo/update'
|
3
|
+
require 'cocoapods/user_interface'
|
4
|
+
|
5
|
+
Pod::HooksManager.register('cocoapods-lhj-bin', :pre_install) do |_context, _|
|
6
|
+
require 'cocoapods-lhj-bin/native'
|
7
|
+
|
8
|
+
#pod bin update || install 不走这里
|
9
|
+
if $ARGV[1] = 'update' || $ARGV[1] != 'install'
|
10
|
+
|
11
|
+
else
|
12
|
+
# pod bin repo update 更新二进制私有源
|
13
|
+
Pod::Command::Bin::Repo::Update.new(CLAide::ARGV.new([])).run
|
14
|
+
|
15
|
+
# 有插件/本地库 且是dev环境下,默认进入源码白名单 过滤 archive命令
|
16
|
+
if _context.podfile.plugins.keys.include?('cocoapods-lhj-bin') && _context.podfile.configuration_env == 'dev'
|
17
|
+
dependencies = _context.podfile.dependencies
|
18
|
+
dependencies.each do |d|
|
19
|
+
next unless d.respond_to?(:external_source) &&
|
20
|
+
d.external_source.is_a?(Hash) &&
|
21
|
+
!d.external_source[:path].nil? &&
|
22
|
+
$ARGV[1] != 'archive'
|
23
|
+
_context.podfile.set_use_source_pods d.name
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
# 同步 BinPodfile 文件
|
30
|
+
project_root = Pod::Config.instance.project_root
|
31
|
+
path = File.join(project_root.to_s, 'BinPodfile')
|
32
|
+
|
33
|
+
next unless File.exist?(path)
|
34
|
+
|
35
|
+
contents = File.open(path, 'r:utf-8', &:read)
|
36
|
+
podfile = Pod::Config.instance.podfile
|
37
|
+
podfile.instance_eval do
|
38
|
+
begin
|
39
|
+
eval(contents, nil, path)
|
40
|
+
rescue Exception => e
|
41
|
+
message = "Invalid `#{path}` file: #{e.message}"
|
42
|
+
raise Pod::DSLError.new(message, path, e, contents)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
Pod::HooksManager.register('cocoapods-lhj-bin', :source_provider) do |context, _|
|
48
|
+
#pod bin update || install 不走这里
|
49
|
+
if $ARGV[1] == 'update' || $ARGV[1] != 'install'
|
50
|
+
|
51
|
+
else
|
52
|
+
sources_manager = Pod::Config.instance.sources_manager
|
53
|
+
podfile = Pod::Config.instance.podfile
|
54
|
+
|
55
|
+
if podfile
|
56
|
+
# 添加源码私有源 && 二进制私有源
|
57
|
+
added_sources = [sources_manager.code_source]
|
58
|
+
if podfile.use_binaries? || podfile.use_binaries_selector
|
59
|
+
added_sources << sources_manager.binary_source
|
60
|
+
added_sources.reverse!
|
61
|
+
end
|
62
|
+
added_sources.each { |source| context.add_source(source) }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|