podfileDep 2.1.6 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|