pindo 5.8.1 → 5.8.3
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 +6 -1
- data/lib/pindo/command/ios/autobuild.rb +6 -1
- data/lib/pindo/command/utils/icon.rb +0 -1
- data/lib/pindo/module/xcode/xcodebuildconfig.rb +1 -1
- data/lib/pindo/module/xcode/xcodereshandler.rb +48 -11
- data/lib/pindo/module/xcode/xcodereshelper.rb +2 -1
- data/lib/pindo/version.rb +1 -1
- metadata +1 -2
- data/lib/pindo/base/xcodeconst.rb +0 -251
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 140028c6728ecb94474c89ca0f661ce55c7c51251a01409a6b346b908c7ce291
|
|
4
|
+
data.tar.gz: 50fcde757dee3bca2231e2f9d4b945a7a3b769cafd6738a0b94bd50985f9781f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: cdef0694dd7254e7b5ee11d8568637bd2497627186e46395d1aab08934c082e6a247ba1416d04e58e123242f3b7920de06962d04fbdc282bf886df37292fb7f0
|
|
7
|
+
data.tar.gz: e39cf03c3a05e6bed5738759d3c882b1c18f037a7b67627e120f3fa84b4e2e0d534a73230178aaeeebc98d22657ecebeb5390d44f9b6dd2db8652f01ff953381
|
|
@@ -129,10 +129,15 @@ module Pindo
|
|
|
129
129
|
|
|
130
130
|
# ===== 从 JPS 下载并替换项目 Icon =====
|
|
131
131
|
if app_info_obj && app_info_obj["projectIcon"] && !app_info_obj["projectIcon"].empty?
|
|
132
|
-
Pindo::AndroidBuildConfigHelper.download_and_replace_icon_from_url(
|
|
132
|
+
icon_replace_success = Pindo::AndroidBuildConfigHelper.download_and_replace_icon_from_url(
|
|
133
133
|
project_dir: pindo_project_dir,
|
|
134
134
|
icon_url: app_info_obj["projectIcon"]
|
|
135
135
|
)
|
|
136
|
+
|
|
137
|
+
# 如果 projectIcon 不为空且下载失败,抛出异常终止执行
|
|
138
|
+
unless icon_replace_success
|
|
139
|
+
raise Informative, "Icon 下载或替换失败,请检查 Icon URL 是否有效: #{app_info_obj["projectIcon"]}"
|
|
140
|
+
end
|
|
136
141
|
else
|
|
137
142
|
Funlog.warning("未配置 Icon URL,跳过 Icon 替换")
|
|
138
143
|
end
|
|
@@ -175,10 +175,15 @@ module Pindo
|
|
|
175
175
|
|
|
176
176
|
# ===== 从 JPS 下载并替换项目 Icon =====
|
|
177
177
|
if app_info_obj && app_info_obj["projectIcon"] && !app_info_obj["projectIcon"].empty?
|
|
178
|
-
Pindo::XcodeBuildConfig.download_and_replace_icon_from_url(
|
|
178
|
+
icon_replace_success = Pindo::XcodeBuildConfig.download_and_replace_icon_from_url(
|
|
179
179
|
project_dir: pindo_project_dir,
|
|
180
180
|
icon_url: app_info_obj["projectIcon"]
|
|
181
181
|
)
|
|
182
|
+
|
|
183
|
+
# 如果 projectIcon 不为空且下载失败,抛出异常终止执行
|
|
184
|
+
unless icon_replace_success
|
|
185
|
+
raise Informative, "Icon 下载或替换失败,请检查 Icon URL 是否有效: #{app_info_obj["projectIcon"]}"
|
|
186
|
+
end
|
|
182
187
|
else
|
|
183
188
|
Funlog.warning("未配置 Icon URL,跳过 Icon 替换")
|
|
184
189
|
end
|
|
@@ -380,7 +380,7 @@ module Pindo
|
|
|
380
380
|
replace_success = false
|
|
381
381
|
ensure
|
|
382
382
|
# 清理临时文件(无论成功失败都清理)
|
|
383
|
-
FileUtils.rm_rf(temp_icon_dir) if temp_icon_dir && File.exist?(temp_icon_dir)
|
|
383
|
+
# FileUtils.rm_rf(temp_icon_dir) if temp_icon_dir && File.exist?(temp_icon_dir)
|
|
384
384
|
end
|
|
385
385
|
|
|
386
386
|
return replace_success
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
require 'fileutils'
|
|
2
2
|
require 'xcodeproj'
|
|
3
3
|
require 'json'
|
|
4
|
-
require 'pindo/module/xcode/xcoderesconstant'
|
|
5
4
|
|
|
6
5
|
module Pindo
|
|
7
6
|
|
|
@@ -62,11 +61,30 @@ module Pindo
|
|
|
62
61
|
|
|
63
62
|
def validate_icon_res()
|
|
64
63
|
icon_path = get_xcodeproj_icon_path()
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
contents_json_path = File.join(icon_path, "Contents.json")
|
|
65
|
+
|
|
66
|
+
# 检查 Contents.json 是否存在
|
|
67
|
+
if !File.exist?(contents_json_path)
|
|
68
|
+
raise Informative, "Contents.json 文件不存在: #{contents_json_path}"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# 读取实际的 Contents.json 文件
|
|
72
|
+
begin
|
|
73
|
+
actual_json = JSON.parse(File.read(contents_json_path))
|
|
74
|
+
rescue JSON::ParserError => e
|
|
75
|
+
raise Informative, "Contents.json 文件格式错误: #{e.message}"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# 基于实际的 Contents.json 验证对应的图标文件
|
|
79
|
+
if actual_json["images"] && actual_json["images"].is_a?(Array)
|
|
80
|
+
actual_json["images"].each do |image_data|
|
|
81
|
+
# 只验证有 filename 字段的条目
|
|
82
|
+
if image_data["filename"] && !image_data["filename"].empty?
|
|
83
|
+
image_file_path = File.join(icon_path, image_data["filename"])
|
|
84
|
+
if !File.exist?(image_file_path)
|
|
85
|
+
raise Informative, "Xcode icon 缺失文件: #{image_file_path}"
|
|
86
|
+
end
|
|
87
|
+
end
|
|
70
88
|
end
|
|
71
89
|
end
|
|
72
90
|
end
|
|
@@ -120,11 +138,30 @@ module Pindo
|
|
|
120
138
|
|
|
121
139
|
def validate_imessage_icon_res()
|
|
122
140
|
icon_path = get_xcodeproj_imessage_icon_path
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
141
|
+
contents_json_path = File.join(icon_path, "Contents.json")
|
|
142
|
+
|
|
143
|
+
# 检查 Contents.json 是否存在
|
|
144
|
+
if !File.exist?(contents_json_path)
|
|
145
|
+
raise Informative, "iMessage Contents.json 文件不存在: #{contents_json_path}"
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# 读取实际的 Contents.json 文件
|
|
149
|
+
begin
|
|
150
|
+
actual_json = JSON.parse(File.read(contents_json_path))
|
|
151
|
+
rescue JSON::ParserError => e
|
|
152
|
+
raise Informative, "iMessage Contents.json 文件格式错误: #{e.message}"
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# 基于实际的 Contents.json 验证对应的图标文件
|
|
156
|
+
if actual_json["images"] && actual_json["images"].is_a?(Array)
|
|
157
|
+
actual_json["images"].each do |image_data|
|
|
158
|
+
# 只验证有 filename 字段的条目
|
|
159
|
+
if image_data["filename"] && !image_data["filename"].empty?
|
|
160
|
+
image_file_path = File.join(icon_path, image_data["filename"])
|
|
161
|
+
if !File.exist?(image_file_path)
|
|
162
|
+
raise Informative, "iMessage icon 缺失文件: #{image_file_path}"
|
|
163
|
+
end
|
|
164
|
+
end
|
|
128
165
|
end
|
|
129
166
|
end
|
|
130
167
|
end
|
|
@@ -2,6 +2,7 @@ require 'fileutils'
|
|
|
2
2
|
require 'xcodeproj'
|
|
3
3
|
require 'json'
|
|
4
4
|
require 'pindo/module/xcode/xcodereshandler'
|
|
5
|
+
require 'pindo/module/xcode/xcoderesconstant'
|
|
5
6
|
|
|
6
7
|
module Pindo
|
|
7
8
|
|
|
@@ -76,7 +77,7 @@ module Pindo
|
|
|
76
77
|
|
|
77
78
|
def self.create_icons(icon_name:nil, new_icon_dir:nil)
|
|
78
79
|
begin
|
|
79
|
-
FileUtils.mkdir_p(new_icon_dir)
|
|
80
|
+
FileUtils.mkdir_p(new_icon_dir)
|
|
80
81
|
rescue => e
|
|
81
82
|
puts e
|
|
82
83
|
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.8.
|
|
4
|
+
version: 5.8.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- wade
|
|
@@ -303,7 +303,6 @@ files:
|
|
|
303
303
|
- lib/pindo/base/plaininformative.rb
|
|
304
304
|
- lib/pindo/base/plistbuddyexecutable.rb
|
|
305
305
|
- lib/pindo/base/standarderror.rb
|
|
306
|
-
- lib/pindo/base/xcodeconst.rb
|
|
307
306
|
- lib/pindo/client/applovinclient.rb
|
|
308
307
|
- lib/pindo/client/aws3sclient.rb
|
|
309
308
|
- lib/pindo/client/bossclient.rb
|
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
require 'openssl'
|
|
2
|
-
|
|
3
|
-
module Pindo
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
module XcodoeConst
|
|
7
|
-
|
|
8
|
-
def self.xcode_ios_icon_json
|
|
9
|
-
model_data = {
|
|
10
|
-
"images" => [
|
|
11
|
-
{
|
|
12
|
-
"size" => "20x20",
|
|
13
|
-
"idiom" => "iphone",
|
|
14
|
-
"filename" => "icon20@2x.png",
|
|
15
|
-
"scale" => "2x"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"size" => "20x20",
|
|
19
|
-
"idiom" => "iphone",
|
|
20
|
-
"filename" => "icon20@3x.png",
|
|
21
|
-
"scale" => "3x"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"size" => "29x29",
|
|
25
|
-
"idiom" => "iphone",
|
|
26
|
-
"filename" => "icon29@2x.png",
|
|
27
|
-
"scale" => "2x"
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"size" => "29x29",
|
|
31
|
-
"idiom" => "iphone",
|
|
32
|
-
"filename" => "icon29@3x.png",
|
|
33
|
-
"scale" => "3x"
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"size" => "40x40",
|
|
37
|
-
"idiom" => "iphone",
|
|
38
|
-
"filename" => "icon40@2x.png",
|
|
39
|
-
"scale" => "2x"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"size" => "40x40",
|
|
43
|
-
"idiom" => "iphone",
|
|
44
|
-
"filename" => "icon40@3x.png",
|
|
45
|
-
"scale" => "3x"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"size" => "60x60",
|
|
49
|
-
"idiom" => "iphone",
|
|
50
|
-
"filename" => "icon60@2x.png",
|
|
51
|
-
"scale" => "2x"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"size" => "60x60",
|
|
55
|
-
"idiom" => "iphone",
|
|
56
|
-
"filename" => "icon60@3x.png",
|
|
57
|
-
"scale" => "3x"
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
"size" => "20x20",
|
|
61
|
-
"idiom" => "ipad",
|
|
62
|
-
"filename" => "icon20@1x.png",
|
|
63
|
-
"scale" => "1x"
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
"size" => "20x20",
|
|
67
|
-
"idiom" => "ipad",
|
|
68
|
-
"filename" => "icon20@2x.png",
|
|
69
|
-
"scale" => "2x"
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
"size" => "29x29",
|
|
73
|
-
"idiom" => "ipad",
|
|
74
|
-
"filename" => "icon29@1x.png",
|
|
75
|
-
"scale" => "1x"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"size" => "29x29",
|
|
79
|
-
"idiom" => "ipad",
|
|
80
|
-
"filename" => "icon29@2x.png",
|
|
81
|
-
"scale" => "2x"
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
"size" => "40x40",
|
|
85
|
-
"idiom" => "ipad",
|
|
86
|
-
"filename" => "icon40@1x.png",
|
|
87
|
-
"scale" => "1x"
|
|
88
|
-
},
|
|
89
|
-
{
|
|
90
|
-
"size" => "40x40",
|
|
91
|
-
"idiom" => "ipad",
|
|
92
|
-
"filename" => "icon40@2x.png",
|
|
93
|
-
"scale" => "2x"
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
"size" => "76x76",
|
|
97
|
-
"idiom" => "ipad",
|
|
98
|
-
"filename" => "icon76@1x.png",
|
|
99
|
-
"scale" => "1x"
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
"size" => "76x76",
|
|
103
|
-
"idiom" => "ipad",
|
|
104
|
-
"filename" => "icon76@2x.png",
|
|
105
|
-
"scale" => "2x"
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
"size" => "83.5x83.5",
|
|
109
|
-
"idiom" => "ipad",
|
|
110
|
-
"filename" => "icon83_5@2x.png",
|
|
111
|
-
"scale" => "2x"
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
"size" => "1024x1024",
|
|
115
|
-
"idiom" => "ios-marketing",
|
|
116
|
-
"filename" => "icon1024@1x.png",
|
|
117
|
-
"scale" => "1x"
|
|
118
|
-
}
|
|
119
|
-
],
|
|
120
|
-
"info" => {
|
|
121
|
-
"version" => 1,
|
|
122
|
-
"author" => "xcode"
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return model_data
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
def self.xcode_ios_imessage_icon_json
|
|
129
|
-
model_data = {
|
|
130
|
-
"images" => [
|
|
131
|
-
{
|
|
132
|
-
"size" => "29x29",
|
|
133
|
-
"idiom" => "iphone",
|
|
134
|
-
"filename" => "icon29@2x.png",
|
|
135
|
-
"scale" => "2x"
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
"size" => "29x29",
|
|
139
|
-
"idiom" => "iphone",
|
|
140
|
-
"filename" => "icon29@3x.png",
|
|
141
|
-
"scale" => "3x"
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
"size" => "60x45",
|
|
145
|
-
"idiom" => "iphone",
|
|
146
|
-
"filename" => "icon60_45@2x.png",
|
|
147
|
-
"scale" => "2x"
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
"size" => "60x45",
|
|
151
|
-
"idiom" => "iphone",
|
|
152
|
-
"filename" => "icon60_45@3x.png",
|
|
153
|
-
"scale" => "3x"
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
"size" => "29x29",
|
|
157
|
-
"idiom" => "ipad",
|
|
158
|
-
"filename" => "icon29@2x.png",
|
|
159
|
-
"scale" => "2x"
|
|
160
|
-
},
|
|
161
|
-
{
|
|
162
|
-
"size" => "67x50",
|
|
163
|
-
"idiom" => "ipad",
|
|
164
|
-
"filename" => "icon67_50@2x.png",
|
|
165
|
-
"scale" => "2x"
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
"size" => "74x55",
|
|
169
|
-
"idiom" => "ipad",
|
|
170
|
-
"filename" => "icon74_55@2x.png",
|
|
171
|
-
"scale" => "2x"
|
|
172
|
-
},
|
|
173
|
-
{
|
|
174
|
-
"size" => "1024x1024",
|
|
175
|
-
"idiom" => "ios-marketing",
|
|
176
|
-
"filename" => "icon1024@1x.png",
|
|
177
|
-
"scale" => "1x"
|
|
178
|
-
},
|
|
179
|
-
{
|
|
180
|
-
"size" => "27x20",
|
|
181
|
-
"idiom" => "universal",
|
|
182
|
-
"filename" => "icon27_20@2x.png",
|
|
183
|
-
"scale" => "2x",
|
|
184
|
-
"platform" => "ios"
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
"size" => "27x20",
|
|
188
|
-
"idiom" => "universal",
|
|
189
|
-
"filename" => "icon27_20@3x.png",
|
|
190
|
-
"scale" => "3x",
|
|
191
|
-
"platform" => "ios"
|
|
192
|
-
},
|
|
193
|
-
{
|
|
194
|
-
"size" => "32x24",
|
|
195
|
-
"idiom" => "universal",
|
|
196
|
-
"filename" => "icon32_24@2x.png",
|
|
197
|
-
"scale" => "2x",
|
|
198
|
-
"platform" => "ios"
|
|
199
|
-
},
|
|
200
|
-
{
|
|
201
|
-
"size" => "32x24",
|
|
202
|
-
"idiom" => "universal",
|
|
203
|
-
"filename" => "icon32_24@3x.png",
|
|
204
|
-
"scale" => "3x",
|
|
205
|
-
"platform" => "ios"
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
"size" => "1024x768",
|
|
209
|
-
"idiom" => "ios-marketing",
|
|
210
|
-
"filename" => "icon1024_768@1x.png",
|
|
211
|
-
"scale" => "1x",
|
|
212
|
-
"platform" => "ios"
|
|
213
|
-
}
|
|
214
|
-
],
|
|
215
|
-
"info" => {
|
|
216
|
-
"version" => 1,
|
|
217
|
-
"author" => "xcode"
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
return model_data
|
|
221
|
-
end
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
XCODE_IOS_LAUNCHIMG_JSON = {
|
|
226
|
-
"images" => [
|
|
227
|
-
{
|
|
228
|
-
"idiom" => "universal",
|
|
229
|
-
"scale" => "1x"
|
|
230
|
-
},
|
|
231
|
-
{
|
|
232
|
-
"idiom" => "universal",
|
|
233
|
-
"filename" => "w768_h1024@2x.png",
|
|
234
|
-
"scale" => "2x"
|
|
235
|
-
},
|
|
236
|
-
{
|
|
237
|
-
"idiom" => "universal",
|
|
238
|
-
"scale" => "3x"
|
|
239
|
-
}
|
|
240
|
-
],
|
|
241
|
-
"info" => {
|
|
242
|
-
"version" => 1,
|
|
243
|
-
"author" => "xcode"
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
end
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
end
|