podfileDep 2.1.6 → 2.2.0
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 +4 -4
- data/CHANGELOG.md +3 -0
- data/lib/cocoapods_plugin.rb +5 -3
- data/lib/podfileDep/reference/unused.rb +9 -145
- data/lib/podfileDep/thin/installer.rb +161 -0
- data/lib/podfileDep/thin/local.rb +40 -0
- data/lib/podfileDep/thin/pod_target.rb +37 -0
- data/lib/podfileDep/thin/shell.rb +128 -0
- data/lib/podfileDep/version.rb +1 -1
- data/lib/podfileDep/yaml/yaml_dep.rb +244 -270
- data/lib/podfileDep/yaml/yaml_pod.rb +44 -0
- data/lib/podfileDep.rb +14 -3
- metadata +7 -3
- data/CODE_OF_CONDUCT.md +0 -84
@@ -1,97 +1,51 @@
|
|
1
|
+
require_relative 'yaml_pod'
|
1
2
|
require_relative '../version'
|
2
3
|
require_relative '../constants'
|
3
4
|
require_relative '../check/xcodeproj'
|
4
5
|
|
5
6
|
module Pod
|
7
|
+
class YamlDep
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
@pod = pod
|
11
|
-
end
|
12
|
-
|
13
|
-
def option
|
14
|
-
result = {:configurations => self.configurations, :inhibit_warnings => self.inhibit_warnings, :subspecs => self.subspecs}
|
15
|
-
if self.path #路径依赖
|
16
|
-
result[:path] = self.path
|
17
|
-
elsif self.podspec #podspec引用
|
18
|
-
result[:podspec] = self.podspec
|
19
|
-
elsif self.version #版本号依赖
|
20
|
-
result[:source] = self.source
|
21
|
-
elsif self.git #git仓库引用
|
22
|
-
result[:git] = self.git
|
23
|
-
if self.tag #tag引用
|
24
|
-
result[:tag] = self.tag
|
25
|
-
else #分支引用 或着未指定分支 也按分支引用
|
26
|
-
result[:branch] = self.branch
|
27
|
-
end
|
28
|
-
end
|
29
|
-
result
|
30
|
-
end
|
9
|
+
# 主工程target列表
|
10
|
+
# @return [String]
|
11
|
+
attr_accessor :targets
|
31
12
|
|
32
|
-
|
33
|
-
|
13
|
+
# 主工程里所有yaml文件定义的依赖
|
14
|
+
# @return {String, {String, [Pod:YamlPod]}}
|
15
|
+
attr_accessor :yaml_deps
|
34
16
|
|
35
|
-
|
17
|
+
# 解析后生成主工程里所有yaml文件定义的依赖
|
18
|
+
# @return {String, [Pod:YamlPod]}
|
19
|
+
attr_accessor :all_deps
|
36
20
|
|
37
|
-
|
38
|
-
|
39
|
-
|
21
|
+
# 所有的targets对应的依赖库列表
|
22
|
+
# @return {String, [Pod:YamlPod]}
|
23
|
+
attr_accessor :targets_dependencies
|
40
24
|
|
41
|
-
|
42
|
-
|
25
|
+
attr_accessor :podfile_local_yaml
|
26
|
+
attr_accessor :podfile_module_yaml
|
27
|
+
attr_accessor :podfile_third_party_yaml
|
43
28
|
|
44
|
-
|
45
|
-
|
46
|
-
|
29
|
+
def initialize
|
30
|
+
super
|
31
|
+
@targets = []
|
32
|
+
@yaml_deps = {}
|
33
|
+
@all_deps = {}
|
34
|
+
@targets_dependencies = {}
|
35
|
+
@podfile_local_yaml = Constants::PODFILE_LOCAL_YAML
|
36
|
+
@podfile_module_yaml = Constants::PODFILE_MODULE_YAML
|
37
|
+
@podfile_third_party_yaml = Constants::PODFILE_THIRD_PARTY_YAML
|
47
38
|
end
|
48
39
|
|
49
|
-
|
50
|
-
|
51
|
-
def analysis_yaml(podfile, old)
|
52
|
-
|
53
|
-
# 获取targets列表
|
54
|
-
project_manager = XCProject::XcodeprojManager.share_manager
|
55
|
-
|
56
|
-
targets = project_manager.get_app_targets
|
57
|
-
|
58
|
-
podfile_local_yaml = Constants::PODFILE_LOCAL_YAML
|
59
|
-
podfile_module_yaml = Constants::PODFILE_MODULE_YAML
|
60
|
-
podfile_third_party_yaml = Constants::PODFILE_THIRD_PARTY_YAML
|
61
|
-
|
62
|
-
# 检查参数
|
63
|
-
check_param(targets)
|
64
|
-
|
65
|
-
# 生成YAML文件
|
66
|
-
generate_local_yaml(podfile_local_yaml)
|
67
|
-
generate_module_yaml(podfile_module_yaml, "# 企业内部组件")
|
68
|
-
generate_module_yaml(podfile_third_party_yaml, "# 第三方维护组件")
|
69
|
-
|
70
|
-
# 读取yaml依赖
|
71
|
-
yaml_dependencies = {}
|
72
|
-
read_yaml_dependencies(podfile_third_party_yaml,false ,yaml_dependencies)
|
73
|
-
read_yaml_dependencies(podfile_module_yaml,false ,yaml_dependencies)
|
74
|
-
read_yaml_dependencies(podfile_local_yaml,true ,yaml_dependencies)
|
75
|
-
|
76
|
-
# 打印依赖
|
77
|
-
print_dependencies(yaml_dependencies)
|
78
|
-
|
79
|
-
# 为所有target生成依赖
|
80
|
-
targets_dependencies = {}
|
81
|
-
update_target_dependencies(targets, yaml_dependencies, targets_dependencies)
|
82
|
-
|
83
|
-
# 兼容老方式
|
84
|
-
if old
|
85
|
-
return targets_dependencies
|
86
|
-
end
|
40
|
+
def install_yaml_dep(podfile)
|
41
|
+
analysis_yaml_dep
|
87
42
|
|
88
|
-
|
89
|
-
store_dependencies(targets_dependencies, podfile) do|name|
|
43
|
+
install_dependencies(targets_dependencies, podfile) do|name|
|
90
44
|
yield(name) if block_given?
|
91
45
|
end
|
92
46
|
end
|
93
47
|
|
94
|
-
def
|
48
|
+
def install_dependencies(targets, podfile)
|
95
49
|
# 存储所有的依赖
|
96
50
|
targets.each { |name, dependencies|
|
97
51
|
podfile.target name do
|
@@ -109,165 +63,113 @@ module Pod
|
|
109
63
|
targets
|
110
64
|
end
|
111
65
|
|
112
|
-
#
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
66
|
+
# 获取非扩展target定义在yaml文件的依赖
|
67
|
+
# @return targets_dependencies
|
68
|
+
def analysis_yaml_dep
|
69
|
+
init_main_targets
|
70
|
+
generate_yaml
|
71
|
+
read_yaml_deps
|
72
|
+
analyzing_yaml_deps
|
73
|
+
print_yaml_deps
|
74
|
+
resolve_targets_deps
|
75
|
+
end
|
119
76
|
|
77
|
+
def resolve_targets_deps
|
120
78
|
targets.each { |target|
|
121
|
-
|
122
|
-
puts msg
|
123
|
-
exit!
|
124
|
-
end
|
79
|
+
targets_dependencies[target] = all_deps.values
|
125
80
|
}
|
81
|
+
targets_dependencies
|
126
82
|
end
|
127
83
|
|
128
|
-
#
|
129
|
-
def
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
begin
|
136
|
-
yaml_content = YAML.load_file(yaml_name)
|
137
|
-
rescue Exception => e
|
138
|
-
puts e
|
139
|
-
puts yaml_name+'文件解析异常, 请检查 ⬆️'
|
140
|
-
exit!
|
141
|
-
end
|
84
|
+
# 读取yaml文件的依赖
|
85
|
+
def read_yaml_deps
|
86
|
+
read_yaml_deps_file(podfile_third_party_yaml)
|
87
|
+
read_yaml_deps_file(podfile_module_yaml)
|
88
|
+
read_yaml_deps_file(podfile_local_yaml)
|
89
|
+
end
|
142
90
|
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
91
|
+
# 解析所有的依赖
|
92
|
+
def analyzing_yaml_deps
|
93
|
+
yaml_deps.each do |yaml_name, deps|
|
94
|
+
if yaml_name == podfile_local_yaml
|
95
|
+
clean = false #记录只能清一次就够了
|
96
|
+
deps.each { |name, dep|
|
97
|
+
real_name = name.split("/")[0]
|
98
|
+
# 有子模块 把之前的全部清空
|
99
|
+
if Array(dep.subspecs).size > 0 or Array(dep.configurations).size > 0
|
100
|
+
unless clean
|
101
|
+
all_deps.delete_if{|pod_name|
|
102
|
+
real_pod_name = pod_name.split("/")[0]
|
103
|
+
if real_pod_name == real_name
|
104
|
+
puts "✅ #{pod_name}被#{yaml_name}覆盖"
|
105
|
+
end
|
106
|
+
real_pod_name == real_name
|
107
|
+
}
|
108
|
+
clean = true
|
109
|
+
end
|
110
|
+
end
|
148
111
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
end
|
112
|
+
if all_deps.has_key?(name)
|
113
|
+
puts "✅ #{name}被#{yaml_name}覆盖"
|
114
|
+
end
|
153
115
|
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
116
|
+
all_deps[name] = dep
|
117
|
+
}
|
118
|
+
else
|
119
|
+
@all_deps.merge!(deps)
|
120
|
+
end
|
158
121
|
|
159
|
-
podfile_local_yaml = Constants::PODFILE_LOCAL_YAML
|
160
|
-
if yaml_name != podfile_local_yaml and (not yaml_content['SOURCE'] or yaml_content['SOURCE'].class != String)
|
161
|
-
puts "#{yaml_name}的SOURCE字段必须是字符串且不为空"
|
162
|
-
exit!
|
163
122
|
end
|
123
|
+
all_deps
|
124
|
+
end
|
164
125
|
|
165
|
-
|
166
|
-
puts "#{yaml_name}的BINARY_SOURCE字段必须是字符串且不为空"
|
167
|
-
exit!
|
168
|
-
end
|
126
|
+
def read_yaml_deps_file(yaml_name)
|
169
127
|
|
170
|
-
yaml_content
|
128
|
+
yaml_content = read_yaml_content(yaml_name)
|
171
129
|
|
172
|
-
|
130
|
+
unless yaml_content
|
131
|
+
return
|
132
|
+
end
|
173
133
|
|
174
|
-
|
175
|
-
|
134
|
+
if yaml_name != podfile_local_yaml
|
135
|
+
if not yaml_content["SOURCE"] or yaml_content["SOURCE"].class != String
|
136
|
+
puts "#{yaml_name}的SOURCE字段必须是字符串且不为空"
|
137
|
+
exit!
|
138
|
+
end
|
139
|
+
if yaml_name != podfile_local_yaml and not yaml_content["BINARY_SOURCE"] or yaml_content["BINARY_SOURCE"].class != String
|
140
|
+
puts "#{yaml_name}的BINARY_SOURCE字段必须是字符串且不为空"
|
141
|
+
exit!
|
142
|
+
end
|
143
|
+
end
|
176
144
|
|
177
|
-
|
178
|
-
|
145
|
+
unless yaml_content["PODS"]
|
146
|
+
puts "#{yaml_name}共0个依赖(文件内的key[PODS]不存在)"
|
147
|
+
return
|
148
|
+
end
|
179
149
|
|
180
|
-
|
150
|
+
if yaml_content["PODS"].class != Array
|
151
|
+
puts "#{yaml_name}共0个依赖(文件配置的依赖PODS项不是数组或数组为空)"
|
181
152
|
return
|
182
153
|
end
|
183
154
|
|
184
155
|
# 读取默认源码source
|
185
|
-
default_source_source =
|
186
|
-
if yaml_content.key?('SOURCE') and yaml_content['SOURCE'].class == String
|
187
|
-
default_source_source = yaml_content['SOURCE']
|
188
|
-
end
|
156
|
+
default_source_source = yaml_content['SOURCE']
|
189
157
|
|
190
158
|
# 读取默认二进制source
|
191
|
-
default_binary_source =
|
192
|
-
if yaml_content.key?('BINARY_SOURCE') and yaml_content['BINARY_SOURCE'].class == String
|
193
|
-
default_binary_source = yaml_content['BINARY_SOURCE']
|
194
|
-
end
|
159
|
+
default_binary_source = yaml_content['BINARY_SOURCE']
|
195
160
|
|
196
161
|
# 依赖列表
|
197
162
|
dependencies_pods = yaml_content['PODS']
|
198
|
-
puts "解析:#{yaml_name} => 共#{dependencies_pods.size.to_s}个依赖"
|
199
163
|
|
200
164
|
# 当前yaml文件的组件名字 用来校验本文件内是否重复
|
201
165
|
dependencies_name = []
|
202
166
|
|
167
|
+
yaml_dependencies = {}
|
168
|
+
|
203
169
|
# 遍历依赖库列表
|
204
170
|
dependencies_pods.each { |dependency|
|
205
171
|
|
206
|
-
|
207
|
-
available_keys = %w[module pod subspecs path podspec version git tag branch configurations inhibit_warnings source binary]
|
208
|
-
dependency.each_key { |key|
|
209
|
-
unless available_keys.include?(key)
|
210
|
-
gem_name = "podfileDep"
|
211
|
-
puts "❌ #{yaml_name}: 当前#{gem_name}版本(#{PodfileDep::VERSION})不支持字段#{key}"
|
212
|
-
puts "请检查对应字段或尝试执行如下命令升级"
|
213
|
-
puts "gem uninstall #{gem_name} && gem install #{gem_name}"
|
214
|
-
exit!
|
215
|
-
end
|
216
|
-
}
|
217
|
-
|
218
|
-
# 校验字段
|
219
|
-
unless dependency['pod']
|
220
|
-
puts "#{yaml_name}: pod 字段(组件名字)必须存在,请检查:"
|
221
|
-
exit!
|
222
|
-
end
|
223
|
-
|
224
|
-
unless dependency['path'] or dependency['podspec'] or dependency['version'] or dependency['git'] or dependency['tag'] or dependency['branch']
|
225
|
-
puts "#{yaml_name} - #{dependency['pod']}: path/podspec/version/git/tag/branch 字段需至少有一个存在,请检查"
|
226
|
-
exit!
|
227
|
-
end
|
228
|
-
|
229
|
-
if dependency['tag'] and dependency['branch'] and not dependency['git']
|
230
|
-
puts "#{yaml_name} - #{dependency['pod']}: 请为此组件配置git字段"
|
231
|
-
exit!
|
232
|
-
end
|
233
|
-
|
234
|
-
# 检查数据类型
|
235
|
-
if dependency['configurations'] and dependency['configurations'].class != Array
|
236
|
-
puts "#{yaml_name} - #{dependency['pod']} - #{dependency['configurations']}: configurations字段必须是数组,例如:['Debug','Release']"
|
237
|
-
exit!
|
238
|
-
end
|
239
|
-
|
240
|
-
if dependency['subspecs'] and dependency['subspecs'].class != Array
|
241
|
-
puts "#{yaml_name} - #{dependency['pod']} - #{dependency['subspecs']}: subspecs字段必须是数组,例如:['A','B','C']"
|
242
|
-
exit!
|
243
|
-
end
|
244
|
-
|
245
|
-
# 校验自身文件重复
|
246
|
-
if dependencies_name.include?(dependency['pod'])
|
247
|
-
puts "❌ 发现#{yaml_name}内重复组件:#{dependency['pod']},请检查并删除重复依赖:"
|
248
|
-
exit!
|
249
|
-
else
|
250
|
-
dependencies_name << dependency['pod']
|
251
|
-
end
|
252
|
-
# 校验和总的依赖的重复
|
253
|
-
repeats = []
|
254
|
-
if yaml_dependencies.key?(dependency['pod']) and not can_cover
|
255
|
-
repeats << dependency['pod']
|
256
|
-
end
|
257
|
-
if repeats.size > 0
|
258
|
-
puts "❌ 发现重复组件如下,请检查并删除重复依赖:"
|
259
|
-
puts repeats
|
260
|
-
exit!
|
261
|
-
end
|
262
|
-
|
263
|
-
# 警告
|
264
|
-
podfile_local_yaml = Constants::PODFILE_LOCAL_YAML
|
265
|
-
if dependency['path'] and not can_cover
|
266
|
-
puts "⚠️ 组件#{dependency['pod']}使用path依赖方式应该写在#{podfile_local_yaml}"
|
267
|
-
end
|
268
|
-
if dependency['podspec'] and not can_cover
|
269
|
-
puts "⚠️ 组件#{dependency['pod']}使用podspec依赖方式应该写在#{podfile_local_yaml}"
|
270
|
-
end
|
172
|
+
check_pod(dependency, yaml_name, dependencies_name)
|
271
173
|
|
272
174
|
# 默认值
|
273
175
|
source = dependency['source']
|
@@ -276,36 +178,16 @@ module Pod
|
|
276
178
|
end
|
277
179
|
inhibit_warnings = dependency['inhibit_warnings'] ? !!dependency['inhibit_warnings'] : false
|
278
180
|
binary = dependency['binary'] ? !!dependency['binary'] : true
|
279
|
-
version = (dependency['path'] or dependency['podspec']) ? nil :dependency['version']
|
280
|
-
|
281
|
-
# 记录
|
282
|
-
if yaml_name == Constants::PODFILE_LOCAL_YAML
|
283
|
-
self.local_yaml_deps << dependency['pod']
|
284
|
-
end
|
285
|
-
|
286
|
-
# subspecs的覆盖前 把之前展开的全部清空
|
287
|
-
if can_cover and Array(dependency['subspecs']).size > 0
|
288
|
-
pod_prefix = dependency['pod']
|
289
|
-
yaml_dependencies.delete_if{|key, value|
|
290
|
-
key.start_with?(pod_prefix)
|
291
|
-
}
|
292
|
-
puts "✅ #{dependency['pod']}被#{yaml_name}覆盖"
|
293
|
-
end
|
294
181
|
|
295
|
-
#
|
296
|
-
if
|
297
|
-
puts "✅ #{dependency['pod']}被#{yaml_name}覆盖"
|
298
|
-
end
|
299
|
-
|
300
|
-
need_expand = !!(Array(dependency['configurations']).size > 0 or can_cover)
|
301
|
-
if Array(dependency['subspecs']).size > 0 and need_expand
|
182
|
+
# configurations和subspecs cocoapods不能同时支持,所以要展开
|
183
|
+
if Array(dependency['subspecs']).size > 0 and Array(dependency['configurations']).size > 0
|
302
184
|
dependency['subspecs'].each {|subspec|
|
303
|
-
dep =
|
185
|
+
dep = YamlPod.new(pod = "#{dependency['pod']}/#{subspec}")
|
304
186
|
dep.module_name = dependency['module']
|
305
187
|
dep.subspecs = nil
|
306
188
|
dep.path = dependency['path']
|
307
189
|
dep.podspec = dependency['podspec']
|
308
|
-
dep.version = version
|
190
|
+
dep.version = dependency['version']
|
309
191
|
dep.git = dependency['git']
|
310
192
|
dep.tag = dependency['tag']
|
311
193
|
dep.branch = dependency['branch']
|
@@ -317,12 +199,12 @@ module Pod
|
|
317
199
|
}
|
318
200
|
|
319
201
|
else
|
320
|
-
dep =
|
202
|
+
dep = YamlPod.new(pod = dependency['pod'])
|
321
203
|
dep.module_name = dependency['module']
|
322
204
|
dep.subspecs = dependency['subspecs']
|
323
205
|
dep.path = dependency['path']
|
324
206
|
dep.podspec = dependency['podspec']
|
325
|
-
dep.version = version
|
207
|
+
dep.version = dependency['version']
|
326
208
|
dep.git = dependency['git']
|
327
209
|
dep.tag = dependency['tag']
|
328
210
|
dep.branch = dependency['branch']
|
@@ -334,24 +216,124 @@ module Pod
|
|
334
216
|
end
|
335
217
|
}
|
336
218
|
|
219
|
+
yaml_deps[yaml_name] = yaml_dependencies
|
220
|
+
|
221
|
+
yaml_dependencies
|
337
222
|
end
|
338
223
|
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
224
|
+
def check_pod(dependency, yaml_name, dependencies_name)
|
225
|
+
# 不支持提醒
|
226
|
+
available_keys = %w[module pod subspecs path podspec version git tag branch configurations inhibit_warnings source binary]
|
227
|
+
dependency.each_key { |key|
|
228
|
+
unless available_keys.include?(key)
|
229
|
+
gem_name = "podfileDep"
|
230
|
+
puts "❌ #{yaml_name}: 当前#{gem_name}版本(#{PodfileDep::VERSION})不支持字段#{key}"
|
231
|
+
puts "请检查对应字段或尝试执行如下命令升级"
|
232
|
+
puts "gem uninstall #{gem_name} && gem install #{gem_name}"
|
233
|
+
exit!
|
234
|
+
end
|
344
235
|
}
|
345
236
|
|
346
|
-
|
347
|
-
|
348
|
-
|
237
|
+
# 校验字段
|
238
|
+
unless dependency['pod']
|
239
|
+
puts "#{yaml_name}: pod 字段(组件名字)必须存在,请检查:"
|
240
|
+
exit!
|
241
|
+
end
|
242
|
+
|
243
|
+
current_type = nil
|
244
|
+
current_type = check_only_one_dep(dependency, "path", current_type, yaml_name)
|
245
|
+
current_type = check_only_one_dep(dependency, "podspec", current_type, yaml_name)
|
246
|
+
current_type = check_only_one_dep(dependency, "version", current_type, yaml_name)
|
247
|
+
current_type = check_only_one_dep(dependency, "tag", current_type, yaml_name)
|
248
|
+
current_type = check_only_one_dep(dependency, "branch", current_type, yaml_name)
|
249
|
+
|
250
|
+
unless current_type
|
251
|
+
puts "#{yaml_name} - #{dependency['pod']}: path/podspec/version/git/tag/branch 字段请指定其中一个"
|
252
|
+
exit!
|
253
|
+
end
|
254
|
+
|
255
|
+
unless dependency['git']
|
256
|
+
if dependency['tag']
|
257
|
+
puts "#{yaml_name} - #{dependency['pod']}: 你指定了tag,但未配置git地址,请为此组件配置git字段"
|
258
|
+
exit!
|
259
|
+
end
|
260
|
+
if dependency['branch']
|
261
|
+
puts "#{yaml_name} - #{dependency['pod']}: 你指定了branch,但未配置git地址,请为此组件配置git字段"
|
262
|
+
exit!
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
# 检查数据类型
|
267
|
+
if dependency['configurations'] and dependency['configurations'].class != Array
|
268
|
+
puts "#{yaml_name} - #{dependency['pod']} - #{dependency['configurations']}: configurations字段必须是数组,例如:['Debug','Release']"
|
269
|
+
exit!
|
270
|
+
end
|
271
|
+
|
272
|
+
if dependency['subspecs'] and dependency['subspecs'].class != Array
|
273
|
+
puts "#{yaml_name} - #{dependency['pod']} - #{dependency['subspecs']}: subspecs字段必须是数组,例如:['A','B','C']"
|
274
|
+
exit!
|
275
|
+
end
|
276
|
+
|
277
|
+
# 校验自身文件重复
|
278
|
+
if dependencies_name.include?(dependency['pod'])
|
279
|
+
puts "❌ 发现#{yaml_name}内重复组件:#{dependency['pod']},请检查并删除重复依赖:"
|
280
|
+
exit!
|
281
|
+
else
|
282
|
+
dependencies_name << dependency['pod']
|
283
|
+
end
|
284
|
+
|
285
|
+
# 警告
|
286
|
+
if dependency['path'] and yaml_name != podfile_local_yaml
|
287
|
+
warn "⚠️ 组件#{dependency['pod']}使用path依赖方式应该写在#{podfile_local_yaml}"
|
288
|
+
end
|
289
|
+
if dependency['podspec'] and yaml_name != podfile_local_yaml
|
290
|
+
warn "⚠️ 组件#{dependency['pod']}使用podspec依赖方式应该写在#{podfile_local_yaml}"
|
291
|
+
end
|
292
|
+
|
293
|
+
end
|
294
|
+
|
295
|
+
def check_only_one_dep(dependency, key, current_type, yaml_name)
|
296
|
+
if dependency[key]
|
297
|
+
if current_type
|
298
|
+
puts "#{yaml_name} - #{dependency['pod']}: #{current_type}字段和#{key}只能使用其中一个,请删除不需要的一个"
|
299
|
+
exit!
|
300
|
+
else
|
301
|
+
return key
|
302
|
+
end
|
303
|
+
end
|
304
|
+
current_type
|
305
|
+
end
|
306
|
+
|
307
|
+
def read_yaml_content(yaml_name)
|
308
|
+
unless File.exist?(yaml_name)
|
309
|
+
puts "文件不存在:"+yaml_name
|
310
|
+
return nil
|
311
|
+
end
|
312
|
+
|
313
|
+
begin
|
314
|
+
yaml_content = YAML.load_file(yaml_name)
|
315
|
+
rescue Exception => e
|
316
|
+
puts e
|
317
|
+
puts yaml_name+'文件解析异常, 请检查 ⬆️'
|
318
|
+
exit!
|
319
|
+
end
|
320
|
+
|
321
|
+
unless yaml_content.class == Hash
|
322
|
+
puts "#{yaml_name} => (文件不是keyValue形式)"
|
323
|
+
return nil
|
324
|
+
end
|
325
|
+
|
326
|
+
yaml_content
|
349
327
|
end
|
350
328
|
|
351
|
-
def
|
352
|
-
|
329
|
+
def print_yaml_deps
|
330
|
+
yaml_deps.each do |yaml_name, deps|
|
331
|
+
puts "读取#{yaml_name} => #{deps.size}个"
|
332
|
+
end
|
333
|
+
puts "➡️ 解析后依赖总数共计:#{all_deps.size}个\n"
|
334
|
+
|
353
335
|
puts '⬇️ 打印依赖'
|
354
|
-
|
336
|
+
all_deps.each_value { |dependency|
|
355
337
|
puts_result = "pod '#{dependency.pod}'"
|
356
338
|
|
357
339
|
if dependency.path #路径引用
|
@@ -387,31 +369,13 @@ module Pod
|
|
387
369
|
puts "⬆️ 打印完毕"
|
388
370
|
end
|
389
371
|
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
def quick_build
|
396
|
-
|
397
|
-
podfile_local_yaml = Constants::PODFILE_LOCAL_YAML
|
398
|
-
|
399
|
-
unless File.exist?(podfile_local_yaml)
|
400
|
-
puts "文件不存在:"+podfile_local_yaml
|
401
|
-
return false
|
402
|
-
end
|
403
|
-
|
404
|
-
begin
|
405
|
-
yaml_content = YAML.load_file(podfile_local_yaml)
|
406
|
-
rescue Exception => e
|
407
|
-
puts e
|
408
|
-
return false
|
409
|
-
end
|
410
|
-
|
411
|
-
yaml_content["QUICKBUILD"] == true ? true : false
|
372
|
+
# 生成默认yaml文件
|
373
|
+
def generate_yaml
|
374
|
+
generate_local_yaml(podfile_local_yaml)
|
375
|
+
generate_module_yaml(podfile_module_yaml, "# 企业内部组件")
|
376
|
+
generate_module_yaml(podfile_third_party_yaml, "# 第三方维护组件")
|
412
377
|
end
|
413
378
|
|
414
|
-
# 生成local文件
|
415
379
|
def generate_local_yaml(podfile_local_yaml)
|
416
380
|
if File.exist?(podfile_local_yaml)
|
417
381
|
return
|
@@ -423,8 +387,8 @@ module Pod
|
|
423
387
|
content = content + "# 2、PODS下边的配置是数组形式, 如果有多个就写多个(subspecs需要数组)\n"
|
424
388
|
content = content + "# 3、本文件加入到忽略文件中\n\n"
|
425
389
|
|
426
|
-
|
427
|
-
|
390
|
+
content = content + "# QUICK_BUILD字段如果为true, 则表示会自动解析所有组件的依赖, 并删除不被使用的依赖库, 以达到开发时快速编译的目的\n"
|
391
|
+
content = content + "QUICK_BUILD: false\n\n"
|
428
392
|
|
429
393
|
content = content + "PODS:\n"
|
430
394
|
|
@@ -447,7 +411,6 @@ module Pod
|
|
447
411
|
}
|
448
412
|
end
|
449
413
|
|
450
|
-
# 生成其他的yaml文件
|
451
414
|
def generate_module_yaml(yaml_name, prefix)
|
452
415
|
if File.exist?(yaml_name)
|
453
416
|
return
|
@@ -457,16 +420,15 @@ module Pod
|
|
457
420
|
content = ""
|
458
421
|
content = content + prefix
|
459
422
|
content = content + "\n"
|
460
|
-
content = content + "# 1、优先级:path > podspec > version > tag > branch
|
423
|
+
content = content + "# 1、优先级:path > podspec > version > tag > branch\n"
|
461
424
|
content = content + "# 2、path字段就是直接从对应的路径读取依赖\n"
|
462
425
|
content = content + "# 3、podspec字段就是直接从对应的路径读取podspec文件加载依赖\n"
|
463
426
|
content = content + "# 4、当version不为空时,会取source字段的repo获取组件,如果source字段为空,那么就取文件顶部配置的默认SOURCE\n"
|
464
427
|
content = content + "# 5、当tag字段或branch字段不为空时,会取git字段的地址获取代码\n"
|
465
428
|
content = content + "\n"
|
466
|
-
content = content + "# 如果 source = null && binary = false 则source
|
429
|
+
content = content + "# 如果 source = null && binary = false 则source默认使用SOURCE\n"
|
430
|
+
content = content + "# 如果 source = null && binary = true 则source默认使用BINARY_SOURCE\n"
|
467
431
|
content = content + "SOURCE: 这里替换成源码的source\n"
|
468
|
-
content = content + "\n"
|
469
|
-
content = content + "# 如果 source = null && binary = true 则source默认使用这个\n"
|
470
432
|
content = content + "BINARY_SOURCE: 这里替换成二进制的source\n"
|
471
433
|
content = content + "\n"
|
472
434
|
content = content + "PODS:\n"
|
@@ -489,5 +451,17 @@ module Pod
|
|
489
451
|
}
|
490
452
|
end
|
491
453
|
|
454
|
+
# 读取主工程target列表
|
455
|
+
def init_main_targets
|
456
|
+
project_manager = XCProject::XcodeprojManager.share_manager
|
457
|
+
@targets = project_manager.get_app_targets
|
458
|
+
end
|
459
|
+
|
460
|
+
#是否开启了编译优化开关
|
461
|
+
def quick_build
|
462
|
+
yaml_content = read_yaml_content(podfile_local_yaml)
|
463
|
+
!!(yaml_content["QUICK_BUILD"])
|
464
|
+
end
|
465
|
+
|
492
466
|
end
|
493
467
|
end
|