pindo 5.13.6 → 5.13.9
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/lib/pindo/command/android/autobuild.rb +38 -7
- data/lib/pindo/command/appstore/adhocbuild.rb +52 -6
- data/lib/pindo/command/appstore/autobuild.rb +51 -5
- data/lib/pindo/command/appstore/autoresign.rb +2 -2
- data/lib/pindo/command/ios/autobuild.rb +62 -16
- data/lib/pindo/command/ios/fixproj.rb +92 -0
- data/lib/pindo/command/ios.rb +1 -0
- data/lib/pindo/command/jps/upload.rb +1 -1
- data/lib/pindo/command/unity/autobuild.rb +47 -10
- data/lib/pindo/command/web/autobuild.rb +44 -14
- data/lib/pindo/module/pgyer/pgyerhelper.rb +1 -1
- data/lib/pindo/module/task/model/git_tag_task.rb +1 -1
- data/lib/pindo/module/task/model/{jps_upload_task.rb → jps/jps_upload_task.rb} +2 -2
- data/lib/pindo/module/task/model/{ipa_local_resign_task.rb → resign/ipa_local_resign_task.rb} +2 -2
- data/lib/pindo/module/task/model/{jps_resign_task.rb → resign/jps_resign_task.rb} +2 -2
- data/lib/pindo/module/task/model/unity/unity_config_task.rb +107 -0
- data/lib/pindo/module/task/model/{unity_export_task.rb → unity/unity_export_task.rb} +71 -74
- data/lib/pindo/module/task/model/unity/unity_update_task.rb +94 -0
- data/lib/pindo/module/task/model/unity/unity_yoo_asset_task.rb +155 -0
- data/lib/pindo/module/task/model/unity_task.rb +113 -0
- data/lib/pindo/module/task/task_manager.rb +9 -1
- data/lib/pindo/module/unity/unity_command_helper.rb +188 -0
- data/lib/pindo/module/unity/unity_env_helper.rb +208 -0
- data/lib/pindo/module/unity/unity_helper.rb +189 -746
- data/lib/pindo/module/unity/unity_proc_helper.rb +390 -0
- data/lib/pindo/module/xcode/xcode_build_helper.rb +3 -3
- data/lib/pindo/version.rb +1 -1
- metadata +13 -5
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
module Pindo
|
|
2
|
+
module Unity
|
|
3
|
+
# Unity 进程管理助手
|
|
4
|
+
# 负责 Unity 进程的检测、管理和清理
|
|
5
|
+
# 所有方法均为类方法,无需实例化
|
|
6
|
+
class UnityProcHelper
|
|
7
|
+
|
|
8
|
+
# 构建前检查 Unity 进程(交互式)
|
|
9
|
+
# @param unity_exe_full_path [String] Unity 可执行文件路径
|
|
10
|
+
# @param project_path [String] Unity 项目路径
|
|
11
|
+
def self.check_unity_processes(unity_exe_full_path: nil, project_path: nil)
|
|
12
|
+
# 如果没有提供路径参数,直接跳过Unity进程检查
|
|
13
|
+
if unity_exe_full_path.nil? && project_path.nil?
|
|
14
|
+
return
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# 检查是否有Unity进程在运行
|
|
18
|
+
unity_processes = `ps aux | grep -i unity | grep -v grep`.strip
|
|
19
|
+
|
|
20
|
+
if !unity_processes.empty?
|
|
21
|
+
# 解析Unity进程信息,传入Unity路径和项目路径进行精确匹配
|
|
22
|
+
unity_pids = parse_unity_processes(unity_processes, unity_exe_full_path: unity_exe_full_path, project_path: project_path)
|
|
23
|
+
|
|
24
|
+
# 过滤掉僵尸进程和无效进程
|
|
25
|
+
unity_pids = filter_valid_unity_processes(unity_pids)
|
|
26
|
+
|
|
27
|
+
if unity_pids.any?
|
|
28
|
+
puts "⚠️ 检测到与当前项目相关的 Unity 进程正在运行:"
|
|
29
|
+
# 只显示真正的Unity进程,不显示 pindo 相关进程
|
|
30
|
+
unity_pids.each_with_index do |process_info, index|
|
|
31
|
+
puts " #{index + 1}. PID: #{process_info[:pid]}, 命令: #{process_info[:command]}"
|
|
32
|
+
end
|
|
33
|
+
puts ""
|
|
34
|
+
|
|
35
|
+
# 询问用户是否要自动关闭Unity进程
|
|
36
|
+
loop do
|
|
37
|
+
puts "批处理模式需要关闭这些 Unity 进程以避免冲突"
|
|
38
|
+
puts " [y] 是, 自动关闭所有 Unity 进程"
|
|
39
|
+
puts " [s] 跳过, 我已经手动关闭 Unity 进程,继续构建(可能导致冲突)"
|
|
40
|
+
puts " [e] 退出编译"
|
|
41
|
+
print "请输入选择 (y/s/e): "
|
|
42
|
+
|
|
43
|
+
input = STDIN.gets
|
|
44
|
+
choice = input ? input.chomp.strip.downcase : ""
|
|
45
|
+
|
|
46
|
+
case choice
|
|
47
|
+
when 'y', 'yes', '1'
|
|
48
|
+
puts "\n正在关闭 Unity 相关进程..."
|
|
49
|
+
success_count = 0
|
|
50
|
+
unity_pids.each do |process_info|
|
|
51
|
+
if kill_unity_process(process_info[:pid])
|
|
52
|
+
puts "✅ 成功关闭进程 #{process_info[:pid]}"
|
|
53
|
+
success_count += 1
|
|
54
|
+
else
|
|
55
|
+
puts "❌ 关闭进程 #{process_info[:pid]} 失败"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
if success_count > 0
|
|
60
|
+
puts "\n✅ 已关闭 #{success_count} 个 Unity 相关进程"
|
|
61
|
+
puts "等待3秒后继续编译..."
|
|
62
|
+
sleep(3)
|
|
63
|
+
else
|
|
64
|
+
puts "\n❌ 无法关闭 Unity 相关进程,请手动关闭后重试"
|
|
65
|
+
raise "Unity进程冲突:无法自动关闭 Unity 相关进程,请手动关闭后重试"
|
|
66
|
+
end
|
|
67
|
+
break # 退出循环
|
|
68
|
+
|
|
69
|
+
when 's', 'skip', '2'
|
|
70
|
+
puts "\n✅ 跳过检查,继续编译..."
|
|
71
|
+
puts "假设Unity Editor已经手动关闭,如果仍在运行可能导致编译失败"
|
|
72
|
+
sleep(1)
|
|
73
|
+
break # 退出循环
|
|
74
|
+
|
|
75
|
+
when 'e', 'exit', '3'
|
|
76
|
+
puts "\n⚠️ 用户选择退出编译"
|
|
77
|
+
puts "退出Unity编译流程"
|
|
78
|
+
exit 0
|
|
79
|
+
|
|
80
|
+
else
|
|
81
|
+
puts "\n⚠️ 无效选择: '#{choice}'"
|
|
82
|
+
puts "请输入 y (是), s (跳过), 或 e (退出)\n\n"
|
|
83
|
+
# 继续循环,让用户重新输入
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
else
|
|
87
|
+
# 没有检测到与当前项目相关的Unity进程,静默继续
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# 构建完成后清理 Unity 进程残留(自动)
|
|
93
|
+
# @param unity_exe_full_path [String] Unity 可执行文件路径
|
|
94
|
+
# @param project_path [String] Unity 项目路径
|
|
95
|
+
def self.cleanup_unity_processes_after_build(unity_exe_full_path: nil, project_path: nil)
|
|
96
|
+
begin
|
|
97
|
+
# 等待一小段时间让 Unity 进程自然退出
|
|
98
|
+
sleep(2)
|
|
99
|
+
|
|
100
|
+
# 如果没有提供路径参数,不清理进程
|
|
101
|
+
if unity_exe_full_path.nil? && project_path.nil?
|
|
102
|
+
return
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# 检查是否还有 Unity 进程在运行
|
|
106
|
+
unity_processes = `ps aux | grep -i unity | grep -v grep`.strip
|
|
107
|
+
|
|
108
|
+
if !unity_processes.empty?
|
|
109
|
+
# 解析进程信息,传入Unity路径和项目路径进行精确匹配
|
|
110
|
+
unity_pids = parse_unity_processes(unity_processes, unity_exe_full_path: unity_exe_full_path, project_path: project_path)
|
|
111
|
+
|
|
112
|
+
if unity_pids.any?
|
|
113
|
+
puts "\e[33m检测到构建后仍有项目相关的 Unity 进程残留,正在清理...\e[0m"
|
|
114
|
+
# 自动清理残留的 Unity 进程
|
|
115
|
+
cleaned_count = 0
|
|
116
|
+
unity_pids.each do |process_info|
|
|
117
|
+
if kill_unity_process(process_info[:pid])
|
|
118
|
+
cleaned_count += 1
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
if cleaned_count > 0
|
|
123
|
+
puts "\e[32m✅ 已清理 #{cleaned_count} 个 Unity 相关进程残留\e[0m"
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
rescue => e
|
|
128
|
+
# 清理失败不影响主流程
|
|
129
|
+
# 静默处理,不输出错误信息
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# 解析 Unity 进程信息
|
|
134
|
+
# @param processes_output [String] ps 命令输出
|
|
135
|
+
# @param unity_exe_full_path [String] Unity 可执行文件路径
|
|
136
|
+
# @param project_path [String] Unity 项目路径
|
|
137
|
+
# @return [Array<Hash>] 进程信息数组
|
|
138
|
+
def self.parse_unity_processes(processes_output, unity_exe_full_path: nil, project_path: nil)
|
|
139
|
+
processes = []
|
|
140
|
+
|
|
141
|
+
processes_output.lines.each do |line|
|
|
142
|
+
# 解析 ps aux 输出格式
|
|
143
|
+
parts = line.strip.split(/\s+/)
|
|
144
|
+
if parts.length >= 11
|
|
145
|
+
pid = parts[1]
|
|
146
|
+
command = parts[10..-1].join(' ')
|
|
147
|
+
|
|
148
|
+
# 过滤掉grep进程本身和pindo进程
|
|
149
|
+
unless command.include?('grep') || command.include?('pindo')
|
|
150
|
+
# 精确匹配Unity进程
|
|
151
|
+
is_relevant_unity_process = false
|
|
152
|
+
match_reasons = []
|
|
153
|
+
|
|
154
|
+
# 1. 必须是Unity Editor主进程(排除VS Code等其他进程)
|
|
155
|
+
is_unity_editor = command.match?(/Unity\.app.*\/Unity/i) || command.match?(/Unity\.exe/i)
|
|
156
|
+
|
|
157
|
+
if is_unity_editor
|
|
158
|
+
# 2. 检查是否是打开了指定项目的Unity进程
|
|
159
|
+
# Unity 使用 -projectpath 参数指定项目路径
|
|
160
|
+
if project_path
|
|
161
|
+
# 标准化路径以确保匹配
|
|
162
|
+
normalized_project_path = File.expand_path(project_path)
|
|
163
|
+
# 精确匹配项目路径(必须完全匹配,不能只是包含)
|
|
164
|
+
if command.match?(/-projectpath\s+#{Regexp.escape(normalized_project_path)}(\s|$)/i)
|
|
165
|
+
# 只有当项目路径完全匹配时才认为是相关进程
|
|
166
|
+
is_relevant_unity_process = true
|
|
167
|
+
match_reasons << "Unity Editor打开了当前项目"
|
|
168
|
+
|
|
169
|
+
# 如果还指定了Unity路径,也要验证
|
|
170
|
+
if unity_exe_full_path
|
|
171
|
+
if command.include?(unity_exe_full_path)
|
|
172
|
+
match_reasons << "使用指定的Unity版本"
|
|
173
|
+
else
|
|
174
|
+
# Unity路径不匹配,不是我们要的进程
|
|
175
|
+
is_relevant_unity_process = false
|
|
176
|
+
match_reasons.clear
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
elsif unity_exe_full_path && command.include?(unity_exe_full_path)
|
|
181
|
+
# 只提供了Unity路径,没有项目路径时才匹配
|
|
182
|
+
# 这种情况下匹配所有使用该Unity版本的进程
|
|
183
|
+
is_relevant_unity_process = true
|
|
184
|
+
match_reasons << "使用指定的Unity版本"
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# 3. 如果没有提供路径参数,不匹配任何进程(由上层函数处理)
|
|
189
|
+
|
|
190
|
+
if is_relevant_unity_process
|
|
191
|
+
processes << { pid: pid, command: command }
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
end
|
|
195
|
+
end
|
|
196
|
+
processes
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
# 过滤掉僵尸进程和无效进程
|
|
200
|
+
# @param processes [Array<Hash>] 进程信息数组
|
|
201
|
+
# @return [Array<Hash>] 有效进程数组
|
|
202
|
+
def self.filter_valid_unity_processes(processes)
|
|
203
|
+
valid_processes = []
|
|
204
|
+
|
|
205
|
+
processes.each do |process_info|
|
|
206
|
+
# PID 可能是字符串,确保正确处理
|
|
207
|
+
pid = process_info[:pid]
|
|
208
|
+
pid_int = pid.to_i
|
|
209
|
+
|
|
210
|
+
# 检查进程是否真的存在且活跃
|
|
211
|
+
if process_exists_and_active?(pid_int)
|
|
212
|
+
valid_processes << process_info
|
|
213
|
+
end
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
valid_processes
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
# 检查进程是否真的存在且活跃
|
|
220
|
+
# @param pid [Integer] 进程 ID
|
|
221
|
+
# @return [Boolean] true 如果进程存在且活跃
|
|
222
|
+
def self.process_exists_and_active?(pid)
|
|
223
|
+
begin
|
|
224
|
+
# 使用更简单可靠的方式检查进程
|
|
225
|
+
# 尝试发送信号0来检查进程是否存在
|
|
226
|
+
Process.kill(0, pid)
|
|
227
|
+
|
|
228
|
+
# 如果需要检查进程状态,使用不同的命令格式
|
|
229
|
+
# -o pid=,stat= 去掉标题行
|
|
230
|
+
process_info = `ps -p #{pid} -o pid=,stat= 2>/dev/null`.strip
|
|
231
|
+
|
|
232
|
+
if process_info.empty?
|
|
233
|
+
return false
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
# 解析进程状态
|
|
237
|
+
parts = process_info.split(/\s+/)
|
|
238
|
+
if parts.length >= 2
|
|
239
|
+
stat = parts[1]
|
|
240
|
+
# Z = 僵尸进程, T = 停止进程
|
|
241
|
+
# 只过滤僵尸进程,不过滤停止进程(T可能是正常的暂停状态)
|
|
242
|
+
if stat.include?('Z')
|
|
243
|
+
puts " 进程 #{pid} 是僵尸进程,过滤掉"
|
|
244
|
+
return false
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
true
|
|
249
|
+
rescue Errno::ESRCH
|
|
250
|
+
# 进程不存在
|
|
251
|
+
false
|
|
252
|
+
rescue Errno::EPERM
|
|
253
|
+
# 权限不足,但进程存在
|
|
254
|
+
true
|
|
255
|
+
rescue => e
|
|
256
|
+
puts "检查进程 #{pid} 时出错: #{e.message}"
|
|
257
|
+
# 如果出错,假设进程存在(保守处理)
|
|
258
|
+
true
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
# 关闭 Unity 进程
|
|
263
|
+
# @param pid [String, Integer] 进程 ID
|
|
264
|
+
# @return [Boolean] true 如果成功关闭
|
|
265
|
+
def self.kill_unity_process(pid)
|
|
266
|
+
begin
|
|
267
|
+
pid_int = pid.to_i
|
|
268
|
+
|
|
269
|
+
# 安全检查:确保不是当前进程
|
|
270
|
+
if pid_int == Process.pid
|
|
271
|
+
puts "⚠️ 跳过当前进程 #{pid}"
|
|
272
|
+
return true
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# 检查进程是否存在
|
|
276
|
+
unless process_exists?(pid_int)
|
|
277
|
+
puts "进程 #{pid} 已不存在"
|
|
278
|
+
return true
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
# 获取进程信息进行额外验证
|
|
282
|
+
process_info = get_process_info(pid_int)
|
|
283
|
+
if process_info && !process_info.include?('Unity')
|
|
284
|
+
puts "⚠️ 跳过非Unity进程 #{pid}: #{process_info}"
|
|
285
|
+
return true
|
|
286
|
+
end
|
|
287
|
+
|
|
288
|
+
puts "正在关闭Unity进程 #{pid}..."
|
|
289
|
+
|
|
290
|
+
# 先尝试优雅关闭
|
|
291
|
+
begin
|
|
292
|
+
Process.kill('TERM', pid_int)
|
|
293
|
+
puts "已发送TERM信号给进程 #{pid}"
|
|
294
|
+
rescue Errno::EPERM
|
|
295
|
+
puts "❌ 没有权限关闭进程 #{pid},尝试使用sudo"
|
|
296
|
+
return kill_unity_process_with_sudo(pid)
|
|
297
|
+
rescue Errno::ESRCH
|
|
298
|
+
puts "进程 #{pid} 已不存在"
|
|
299
|
+
return true
|
|
300
|
+
end
|
|
301
|
+
|
|
302
|
+
# 等待进程优雅退出
|
|
303
|
+
sleep(3)
|
|
304
|
+
|
|
305
|
+
# 检查进程是否还存在
|
|
306
|
+
if process_exists?(pid_int)
|
|
307
|
+
puts "进程 #{pid} 未响应TERM信号,尝试强制关闭..."
|
|
308
|
+
begin
|
|
309
|
+
Process.kill('KILL', pid_int)
|
|
310
|
+
puts "已发送KILL信号给进程 #{pid}"
|
|
311
|
+
sleep(2)
|
|
312
|
+
rescue Errno::EPERM
|
|
313
|
+
puts "❌ 没有权限强制关闭进程 #{pid}"
|
|
314
|
+
return false
|
|
315
|
+
rescue Errno::ESRCH
|
|
316
|
+
puts "进程 #{pid} 已不存在"
|
|
317
|
+
return true
|
|
318
|
+
end
|
|
319
|
+
end
|
|
320
|
+
|
|
321
|
+
# 最终检查
|
|
322
|
+
if process_exists?(pid_int)
|
|
323
|
+
puts "❌ 无法关闭进程 #{pid}"
|
|
324
|
+
false
|
|
325
|
+
else
|
|
326
|
+
puts "✅ 成功关闭进程 #{pid}"
|
|
327
|
+
true
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
rescue => e
|
|
331
|
+
puts "❌ 关闭进程 #{pid} 时出错: #{e.message}"
|
|
332
|
+
puts "错误类型: #{e.class}"
|
|
333
|
+
false
|
|
334
|
+
end
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
# 使用 sudo 关闭进程
|
|
338
|
+
# @param pid [String, Integer] 进程 ID
|
|
339
|
+
# @return [Boolean] true 如果成功关闭
|
|
340
|
+
def self.kill_unity_process_with_sudo(pid)
|
|
341
|
+
begin
|
|
342
|
+
puts "尝试使用sudo关闭进程 #{pid}..."
|
|
343
|
+
result = system("sudo kill -TERM #{pid}")
|
|
344
|
+
if result
|
|
345
|
+
sleep(3)
|
|
346
|
+
if process_exists?(pid.to_i)
|
|
347
|
+
puts "TERM信号无效,尝试KILL信号..."
|
|
348
|
+
system("sudo kill -KILL #{pid}")
|
|
349
|
+
sleep(2)
|
|
350
|
+
end
|
|
351
|
+
!process_exists?(pid.to_i)
|
|
352
|
+
else
|
|
353
|
+
puts "❌ sudo命令执行失败"
|
|
354
|
+
false
|
|
355
|
+
end
|
|
356
|
+
rescue => e
|
|
357
|
+
puts "❌ sudo关闭进程时出错: #{e.message}"
|
|
358
|
+
false
|
|
359
|
+
end
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
# 获取进程信息
|
|
363
|
+
# @param pid [Integer] 进程 ID
|
|
364
|
+
# @return [String, nil] 进程命令名称
|
|
365
|
+
def self.get_process_info(pid)
|
|
366
|
+
begin
|
|
367
|
+
`ps -p #{pid} -o comm=`.strip
|
|
368
|
+
rescue => e
|
|
369
|
+
nil
|
|
370
|
+
end
|
|
371
|
+
end
|
|
372
|
+
|
|
373
|
+
# 检查进程是否存在
|
|
374
|
+
# @param pid [Integer] 进程 ID
|
|
375
|
+
# @return [Boolean] true 如果进程存在
|
|
376
|
+
def self.process_exists?(pid)
|
|
377
|
+
begin
|
|
378
|
+
Process.kill(0, pid)
|
|
379
|
+
true
|
|
380
|
+
rescue Errno::ESRCH
|
|
381
|
+
false
|
|
382
|
+
rescue Errno::EPERM
|
|
383
|
+
# 权限不足,但进程存在
|
|
384
|
+
true
|
|
385
|
+
end
|
|
386
|
+
end
|
|
387
|
+
|
|
388
|
+
end
|
|
389
|
+
end
|
|
390
|
+
end
|
|
@@ -356,7 +356,7 @@ module Pindo
|
|
|
356
356
|
|
|
357
357
|
end
|
|
358
358
|
|
|
359
|
-
# 修复
|
|
359
|
+
# 修复Xcode 26 链接器兼容性问题
|
|
360
360
|
# 自动移除 -ld_classic 和 -ld64 标志
|
|
361
361
|
def fix_xcode16_linker_flags(project_dir: nil)
|
|
362
362
|
begin
|
|
@@ -428,11 +428,11 @@ module Pindo
|
|
|
428
428
|
end
|
|
429
429
|
|
|
430
430
|
if fixed_count > 0
|
|
431
|
-
puts "✅ 修复
|
|
431
|
+
puts "✅ 修复Xcode 26 链接器兼容性配置".green
|
|
432
432
|
end
|
|
433
433
|
|
|
434
434
|
rescue => error
|
|
435
|
-
puts "⚠️
|
|
435
|
+
puts "⚠️ 修复Xcode 26 链接器标志时出现错误: #{error.message}".yellow
|
|
436
436
|
# 不中断构建流程
|
|
437
437
|
end
|
|
438
438
|
end
|
data/lib/pindo/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pindo
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 5.13.
|
|
4
|
+
version: 5.13.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- wade
|
|
@@ -355,6 +355,7 @@ files:
|
|
|
355
355
|
- lib/pindo/command/ios/autoresign.rb
|
|
356
356
|
- lib/pindo/command/ios/build.rb
|
|
357
357
|
- lib/pindo/command/ios/cert.rb
|
|
358
|
+
- lib/pindo/command/ios/fixproj.rb
|
|
358
359
|
- lib/pindo/command/ios/podlint.rb
|
|
359
360
|
- lib/pindo/command/ios/podpush.rb
|
|
360
361
|
- lib/pindo/command/ios/podupdate.rb
|
|
@@ -441,15 +442,22 @@ files:
|
|
|
441
442
|
- lib/pindo/module/task/model/build/web_build_dev_task.rb
|
|
442
443
|
- lib/pindo/module/task/model/build_task.rb
|
|
443
444
|
- lib/pindo/module/task/model/git_tag_task.rb
|
|
444
|
-
- lib/pindo/module/task/model/
|
|
445
|
-
- lib/pindo/module/task/model/
|
|
446
|
-
- lib/pindo/module/task/model/
|
|
447
|
-
- lib/pindo/module/task/model/
|
|
445
|
+
- lib/pindo/module/task/model/jps/jps_upload_task.rb
|
|
446
|
+
- lib/pindo/module/task/model/resign/ipa_local_resign_task.rb
|
|
447
|
+
- lib/pindo/module/task/model/resign/jps_resign_task.rb
|
|
448
|
+
- lib/pindo/module/task/model/unity/unity_config_task.rb
|
|
449
|
+
- lib/pindo/module/task/model/unity/unity_export_task.rb
|
|
450
|
+
- lib/pindo/module/task/model/unity/unity_update_task.rb
|
|
451
|
+
- lib/pindo/module/task/model/unity/unity_yoo_asset_task.rb
|
|
452
|
+
- lib/pindo/module/task/model/unity_task.rb
|
|
448
453
|
- lib/pindo/module/task/pindo_task.rb
|
|
449
454
|
- lib/pindo/module/task/task_config.rb
|
|
450
455
|
- lib/pindo/module/task/task_manager.rb
|
|
451
456
|
- lib/pindo/module/unity/nuget_helper.rb
|
|
457
|
+
- lib/pindo/module/unity/unity_command_helper.rb
|
|
458
|
+
- lib/pindo/module/unity/unity_env_helper.rb
|
|
452
459
|
- lib/pindo/module/unity/unity_helper.rb
|
|
460
|
+
- lib/pindo/module/unity/unity_proc_helper.rb
|
|
453
461
|
- lib/pindo/module/webserver/brotli_file_handler.rb
|
|
454
462
|
- lib/pindo/module/webserver/preview/preview.css
|
|
455
463
|
- lib/pindo/module/webserver/preview/preview.html
|