pindo 5.8.3 → 5.10.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/lib/pindo/command/android/autobuild.rb +6 -1
- data/lib/pindo/command/android/build.rb +6 -1
- data/lib/pindo/command/android/debug.rb +6 -1
- data/lib/pindo/command/deploy/build.rb +14 -3
- data/lib/pindo/command/ios/adhoc.rb +7 -2
- data/lib/pindo/command/ios/autobuild.rb +10 -3
- data/lib/pindo/command/ios/autoresign.rb +15 -4
- data/lib/pindo/command/ios/build.rb +11 -4
- data/lib/pindo/command/ipa/autoresign.rb +14 -3
- data/lib/pindo/command/ipa/output.rb +14 -3
- data/lib/pindo/command/jps/upload.rb +27 -2
- data/lib/pindo/command/unity/upload.rb +1 -1
- data/lib/pindo/command/web/autobuild.rb +6 -1
- data/lib/pindo/module/cert/xcodecerthelper.rb +14 -2
- data/lib/pindo/module/pgyer/pgyerhelper.rb +15 -24
- data/lib/pindo/module/xcode/xcodebuildconfig.rb +29 -2
- data/lib/pindo/version.rb +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0db013721ed33d91504f227eaa4ae585c648808c9091fa1f7e7cb8fecb5042b9
|
|
4
|
+
data.tar.gz: 775da05eca99d6b0bc3a11a8ae1e5be5756879c8c88d5404f637f7cad8c9afdf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: eadd395d931c0bb6993efd6085de67c7ea6e3a71a2904c2cbf32ff11b028d5064cb857f15c6ef7a385a8478b0eea4475cd1594c079da53765157fed98ff1f972
|
|
7
|
+
data.tar.gz: b3423e1e6498b5a526bffcbb6faf009d855bece2f0b91e01ce7bb51bdfb98c48fd29d1af34dc9b41d421147662787ee65d5d1d0c17d3d3dae457abc0f1c535e0
|
|
@@ -172,7 +172,12 @@ module Pindo
|
|
|
172
172
|
|
|
173
173
|
if !ipa_file_upload.nil? && !app_info_obj.nil? && @args_upload_flag
|
|
174
174
|
description = nil
|
|
175
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
175
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
176
|
+
app_info_obj: app_info_obj,
|
|
177
|
+
ipa_file_upload: ipa_file_upload,
|
|
178
|
+
description: description,
|
|
179
|
+
workflow_info: workflow_info
|
|
180
|
+
)
|
|
176
181
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
177
182
|
PgyerHelper.share_instace.print_app_version_info(
|
|
178
183
|
app_info_obj: app_info_obj,
|
|
@@ -124,7 +124,12 @@ module Pindo
|
|
|
124
124
|
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
125
125
|
|
|
126
126
|
description = nil
|
|
127
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
127
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
128
|
+
app_info_obj: app_info_obj,
|
|
129
|
+
ipa_file_upload: ipa_file_upload,
|
|
130
|
+
description: description,
|
|
131
|
+
workflow_info: workflow_info
|
|
132
|
+
)
|
|
128
133
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
129
134
|
PgyerHelper.share_instace.print_app_version_info(
|
|
130
135
|
app_info_obj: app_info_obj,
|
|
@@ -112,7 +112,12 @@ module Pindo
|
|
|
112
112
|
|
|
113
113
|
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
114
114
|
description = nil
|
|
115
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
115
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
116
|
+
app_info_obj: app_info_obj,
|
|
117
|
+
ipa_file_upload: ipa_file_upload,
|
|
118
|
+
description: description,
|
|
119
|
+
workflow_info: workflow_info
|
|
120
|
+
)
|
|
116
121
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
117
122
|
PgyerHelper.share_instace.print_app_version_info(
|
|
118
123
|
app_info_obj: app_info_obj,
|
|
@@ -58,9 +58,15 @@ module Pindo
|
|
|
58
58
|
def run
|
|
59
59
|
|
|
60
60
|
app_info_obj = nil
|
|
61
|
+
workflow_info = nil
|
|
61
62
|
if @args_upload_flag
|
|
62
63
|
proj_name = @args_proj_name
|
|
63
|
-
|
|
64
|
+
# 传入 package_type 获取 workflow_info
|
|
65
|
+
app_info_obj, workflow_info = PgyerHelper.share_instace.prepare_upload(
|
|
66
|
+
working_directory: Dir.pwd,
|
|
67
|
+
proj_name: proj_name,
|
|
68
|
+
package_type: 'ipa'
|
|
69
|
+
)
|
|
64
70
|
end
|
|
65
71
|
|
|
66
72
|
new_project_dir = Dir.pwd
|
|
@@ -80,9 +86,14 @@ module Pindo
|
|
|
80
86
|
ipa_file_upload = Dir.glob(build_path).max_by {|f| File.mtime(f)}
|
|
81
87
|
|
|
82
88
|
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
83
|
-
|
|
89
|
+
|
|
84
90
|
description = nil
|
|
85
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
91
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
92
|
+
app_info_obj: app_info_obj,
|
|
93
|
+
ipa_file_upload: ipa_file_upload,
|
|
94
|
+
description: description,
|
|
95
|
+
workflow_info: workflow_info
|
|
96
|
+
)
|
|
86
97
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
87
98
|
PgyerHelper.share_instace.print_app_version_info(
|
|
88
99
|
app_info_obj: app_info_obj,
|
|
@@ -185,7 +185,7 @@ module Pindo
|
|
|
185
185
|
build_path = File.join(pindo_new_project_dir, "build", "*.{ipa,app}")
|
|
186
186
|
ipa_file_upload = Dir.glob(build_path).max_by {|f| File.mtime(f)}
|
|
187
187
|
|
|
188
|
-
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
188
|
+
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
189
189
|
description = nil
|
|
190
190
|
if File.exist?(File.join(pindo_new_project_dir, ".release_info"))
|
|
191
191
|
description = File.read(File.join(pindo_new_project_dir, ".release_info"))
|
|
@@ -194,7 +194,12 @@ module Pindo
|
|
|
194
194
|
description = git!(%W(-C #{pindo_new_project_dir} show -s --format=%h::%s)).strip
|
|
195
195
|
end
|
|
196
196
|
end
|
|
197
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
197
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
198
|
+
app_info_obj: app_info_obj,
|
|
199
|
+
ipa_file_upload: ipa_file_upload,
|
|
200
|
+
description: description,
|
|
201
|
+
workflow_info: workflow_info
|
|
202
|
+
)
|
|
198
203
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
199
204
|
PgyerHelper.share_instace.print_app_version_info(
|
|
200
205
|
app_info_obj: app_info_obj,
|
|
@@ -160,14 +160,16 @@ module Pindo
|
|
|
160
160
|
# ===== 使用 workflow 配置更新项目 =====
|
|
161
161
|
if workflow_info && workflow_info[:package_name]
|
|
162
162
|
package_name = workflow_info[:package_name]
|
|
163
|
+
project_id = app_info_obj ? app_info_obj["id"] : nil
|
|
163
164
|
|
|
164
165
|
puts "\n使用工作流配置更新 iOS 项目:"
|
|
165
166
|
puts " Package Name: #{package_name}"
|
|
166
167
|
|
|
167
|
-
# 一次性更新 Display Name、Bundle ID 和
|
|
168
|
+
# 一次性更新 Display Name、Bundle ID、URL Schemes 和 JPS 快捷操作
|
|
168
169
|
Pindo::XcodeBuildConfig.update_project_with_packagename(
|
|
169
170
|
project_dir: pindo_project_dir,
|
|
170
|
-
package_name: package_name
|
|
171
|
+
package_name: package_name,
|
|
172
|
+
project_id: project_id
|
|
171
173
|
)
|
|
172
174
|
else
|
|
173
175
|
raise Informative, "未获取到工作流信息"
|
|
@@ -274,7 +276,12 @@ module Pindo
|
|
|
274
276
|
|
|
275
277
|
if !ipa_file_upload.nil? && !app_info_obj.nil? && @args_upload_flag
|
|
276
278
|
description = nil
|
|
277
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
279
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
280
|
+
app_info_obj: app_info_obj,
|
|
281
|
+
ipa_file_upload: ipa_file_upload,
|
|
282
|
+
description: description,
|
|
283
|
+
workflow_info: workflow_info
|
|
284
|
+
)
|
|
278
285
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
279
286
|
PgyerHelper.share_instace.print_app_version_info(
|
|
280
287
|
app_info_obj: app_info_obj,
|
|
@@ -115,9 +115,15 @@ module Pindo
|
|
|
115
115
|
Pindo::Command::Deploy::Pullconfig::run(args_temp)
|
|
116
116
|
|
|
117
117
|
app_info_obj = nil
|
|
118
|
-
|
|
118
|
+
workflow_info = nil
|
|
119
|
+
if @args_upload_flag
|
|
119
120
|
proj_name = @args_proj_name
|
|
120
|
-
|
|
121
|
+
# 传入 package_type 获取 workflow_info
|
|
122
|
+
app_info_obj, workflow_info = PgyerHelper.share_instace.prepare_upload(
|
|
123
|
+
working_directory: Dir.pwd,
|
|
124
|
+
proj_name: proj_name,
|
|
125
|
+
package_type: 'ipa'
|
|
126
|
+
)
|
|
121
127
|
end
|
|
122
128
|
|
|
123
129
|
args_temp = []
|
|
@@ -138,8 +144,13 @@ module Pindo
|
|
|
138
144
|
ipa_dir = File.dirname(ipa_file_name)
|
|
139
145
|
ipa_file_upload = File.join(ipa_dir, ipa_base_name + "_resigned.ipa")
|
|
140
146
|
|
|
141
|
-
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
142
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
147
|
+
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
148
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
149
|
+
app_info_obj: app_info_obj,
|
|
150
|
+
ipa_file_upload: ipa_file_upload,
|
|
151
|
+
description: nil,
|
|
152
|
+
workflow_info: workflow_info
|
|
153
|
+
)
|
|
143
154
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
144
155
|
PgyerHelper.share_instace.print_app_version_info(
|
|
145
156
|
app_info_obj: app_info_obj,
|
|
@@ -124,14 +124,16 @@ module Pindo
|
|
|
124
124
|
# ===== 使用 workflow 配置更新项目 =====
|
|
125
125
|
if workflow_info && workflow_info[:package_name]
|
|
126
126
|
package_name = workflow_info[:package_name]
|
|
127
|
+
project_id = app_info_obj ? app_info_obj["id"] : nil
|
|
127
128
|
|
|
128
129
|
puts "\n使用工作流配置更新 iOS 项目:"
|
|
129
130
|
puts " Package Name: #{package_name}"
|
|
130
131
|
|
|
131
|
-
# 一次性更新 Display Name、Bundle ID 和
|
|
132
|
+
# 一次性更新 Display Name、Bundle ID、URL Schemes 和 JPS 快捷操作
|
|
132
133
|
Pindo::XcodeBuildConfig.update_project_with_packagename(
|
|
133
134
|
project_dir: pindo_project_dir,
|
|
134
|
-
package_name: package_name
|
|
135
|
+
package_name: package_name,
|
|
136
|
+
project_id: project_id
|
|
135
137
|
)
|
|
136
138
|
else
|
|
137
139
|
raise Informative, "未获取到工作流信息"
|
|
@@ -147,10 +149,15 @@ module Pindo
|
|
|
147
149
|
build_path = File.join(pindo_project_dir, "build", "*.{ipa,app}")
|
|
148
150
|
ipa_file_upload = Dir.glob(build_path).max_by {|f| File.mtime(f)}
|
|
149
151
|
|
|
150
|
-
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
152
|
+
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
151
153
|
|
|
152
154
|
description = nil
|
|
153
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
155
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
156
|
+
app_info_obj: app_info_obj,
|
|
157
|
+
ipa_file_upload: ipa_file_upload,
|
|
158
|
+
description: description,
|
|
159
|
+
workflow_info: workflow_info
|
|
160
|
+
)
|
|
154
161
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
155
162
|
PgyerHelper.share_instace.print_app_version_info(
|
|
156
163
|
app_info_obj: app_info_obj,
|
|
@@ -110,8 +110,14 @@ module Pindo
|
|
|
110
110
|
Pindo::Command::Deploy::Pullconfig::run(args_temp)
|
|
111
111
|
|
|
112
112
|
app_info_obj = nil
|
|
113
|
+
workflow_info = nil
|
|
113
114
|
if @args_upload_flag || @args_send_flag
|
|
114
|
-
|
|
115
|
+
# 传入 package_type 获取 workflow_info
|
|
116
|
+
app_info_obj, workflow_info = PgyerHelper.share_instace.prepare_upload(
|
|
117
|
+
working_directory: Dir.pwd,
|
|
118
|
+
proj_name: @args_proj_name,
|
|
119
|
+
package_type: 'ipa'
|
|
120
|
+
)
|
|
115
121
|
end
|
|
116
122
|
|
|
117
123
|
|
|
@@ -133,9 +139,14 @@ module Pindo
|
|
|
133
139
|
ipa_dir = File.dirname(ipa_file_name)
|
|
134
140
|
ipa_file_upload = File.join(ipa_dir, ipa_base_name + "_resigned.ipa")
|
|
135
141
|
|
|
136
|
-
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
142
|
+
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
137
143
|
description = "提交包重签名"
|
|
138
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
144
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
145
|
+
app_info_obj: app_info_obj,
|
|
146
|
+
ipa_file_upload: ipa_file_upload,
|
|
147
|
+
description: description,
|
|
148
|
+
workflow_info: workflow_info
|
|
149
|
+
)
|
|
139
150
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
140
151
|
PgyerHelper.share_instace.print_app_version_info(
|
|
141
152
|
app_info_obj: app_info_obj,
|
|
@@ -99,9 +99,15 @@ module Pindo
|
|
|
99
99
|
end
|
|
100
100
|
|
|
101
101
|
app_info_obj = nil
|
|
102
|
+
workflow_info = nil
|
|
102
103
|
if @args_upload_flag || @args_send_flag
|
|
103
104
|
proj_name = @args_proj_name
|
|
104
|
-
|
|
105
|
+
# 传入 package_type 获取 workflow_info
|
|
106
|
+
app_info_obj, workflow_info = PgyerHelper.share_instace.prepare_upload(
|
|
107
|
+
working_directory: Dir.pwd,
|
|
108
|
+
proj_name: proj_name,
|
|
109
|
+
package_type: 'ipa'
|
|
110
|
+
)
|
|
105
111
|
end
|
|
106
112
|
|
|
107
113
|
|
|
@@ -112,8 +118,13 @@ module Pindo
|
|
|
112
118
|
build_path = File.join(pindo_new_project_dir, "build", "*.ipa")
|
|
113
119
|
ipa_file_upload = Dir.glob(build_path).max_by {|f| File.mtime(f)}
|
|
114
120
|
|
|
115
|
-
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
116
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
121
|
+
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
122
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
123
|
+
app_info_obj: app_info_obj,
|
|
124
|
+
ipa_file_upload: ipa_file_upload,
|
|
125
|
+
description: nil,
|
|
126
|
+
workflow_info: workflow_info
|
|
127
|
+
)
|
|
117
128
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
118
129
|
PgyerHelper.share_instace.print_app_version_info(
|
|
119
130
|
app_info_obj: app_info_obj,
|
|
@@ -192,14 +192,39 @@ module Pindo
|
|
|
192
192
|
raise Informative, "#{@args_ipa_file} 文件不存在"
|
|
193
193
|
end
|
|
194
194
|
|
|
195
|
+
# 根据文件后缀确定 package_type
|
|
196
|
+
package_type = nil
|
|
197
|
+
ext = File.extname(@args_ipa_file).downcase
|
|
198
|
+
case ext
|
|
199
|
+
when '.ipa'
|
|
200
|
+
package_type = 'ipa'
|
|
201
|
+
when '.apk'
|
|
202
|
+
package_type = 'apk'
|
|
203
|
+
when '.html'
|
|
204
|
+
package_type = 'zip'
|
|
205
|
+
when '.app'
|
|
206
|
+
package_type = 'mac'
|
|
207
|
+
else
|
|
208
|
+
raise Informative, "不支持的文件类型: #{ext},支持的类型:.ipa, .apk, .html, .app"
|
|
209
|
+
end
|
|
210
|
+
|
|
195
211
|
PgyerHelper.share_instace.setForeLogin(beforeLogin:@args_login_flag)
|
|
196
|
-
app_info_obj = PgyerHelper.share_instace.prepare_upload(
|
|
212
|
+
app_info_obj, workflow_info = PgyerHelper.share_instace.prepare_upload(
|
|
213
|
+
working_directory: Dir.pwd,
|
|
214
|
+
proj_name: @args_proj_name,
|
|
215
|
+
package_type: package_type
|
|
216
|
+
)
|
|
197
217
|
|
|
198
218
|
if app_info_obj.nil?
|
|
199
219
|
raise Informative, "#{@args_proj_name} 错误, 请输入正确的App代号名称, jps网站没有该App"
|
|
200
220
|
end
|
|
201
221
|
|
|
202
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
222
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
223
|
+
app_info_obj: app_info_obj,
|
|
224
|
+
ipa_file_upload: @args_ipa_file,
|
|
225
|
+
description: @args_upload_desc,
|
|
226
|
+
workflow_info: workflow_info
|
|
227
|
+
)
|
|
203
228
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
204
229
|
PgyerHelper.share_instace.print_app_version_info(
|
|
205
230
|
app_info_obj: app_info_obj,
|
|
@@ -192,7 +192,12 @@ module Pindo
|
|
|
192
192
|
|
|
193
193
|
if !html_file_upload.nil? && !app_info_obj.nil? && @args_upload_flag
|
|
194
194
|
description = nil
|
|
195
|
-
result_data = PgyerHelper.share_instace.start_upload(
|
|
195
|
+
result_data = PgyerHelper.share_instace.start_upload(
|
|
196
|
+
app_info_obj: app_info_obj,
|
|
197
|
+
ipa_file_upload: html_file_upload,
|
|
198
|
+
description: description,
|
|
199
|
+
workflow_info: workflow_info
|
|
200
|
+
)
|
|
196
201
|
if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
|
|
197
202
|
PgyerHelper.share_instace.print_app_version_info(
|
|
198
203
|
app_info_obj: app_info_obj,
|
|
@@ -206,7 +206,7 @@ module Pindo
|
|
|
206
206
|
|
|
207
207
|
project_obj.targets.each do |target|
|
|
208
208
|
|
|
209
|
-
if target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:framework]) || target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:dynamic_library]) ||
|
|
209
|
+
if target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:framework]) || target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:dynamic_library]) ||
|
|
210
210
|
target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:static_library]) || target.product_type.include?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:bundle])
|
|
211
211
|
next
|
|
212
212
|
end
|
|
@@ -236,7 +236,19 @@ module Pindo
|
|
|
236
236
|
if !temp_info.nil? && !temp_info.empty?
|
|
237
237
|
info_plist_path = File.join(new_project_dir, temp_info)
|
|
238
238
|
if !File.exist?(info_plist_path)
|
|
239
|
-
raise Informative, "Missing Target #{target.name.to_s} Info.plist!!! #{info_plist_path} Modify Info.plist Error !!!"
|
|
239
|
+
raise Informative, "Missing Target #{target.name.to_s} Info.plist!!! #{info_plist_path} Modify Info.plist Error !!!"
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
# 修改 Info.plist 中的 CFBundleIdentifier 使用宏变量
|
|
243
|
+
# 由于 PRODUCT_BUNDLE_IDENTIFIER 已在 config_project_cert 中设置
|
|
244
|
+
# Info.plist 应该引用宏变量而非硬编码
|
|
245
|
+
info_plist_dict = Xcodeproj::Plist.read_from_path(info_plist_path)
|
|
246
|
+
current_bundle_id = info_plist_dict["CFBundleIdentifier"]
|
|
247
|
+
|
|
248
|
+
# 如果不是宏变量,则设置为使用 PRODUCT_BUNDLE_IDENTIFIER 宏
|
|
249
|
+
if current_bundle_id != "$(PRODUCT_BUNDLE_IDENTIFIER)"
|
|
250
|
+
info_plist_dict["CFBundleIdentifier"] = "$(PRODUCT_BUNDLE_IDENTIFIER)"
|
|
251
|
+
Xcodeproj::Plist.write_to_path(info_plist_dict, info_plist_path)
|
|
240
252
|
end
|
|
241
253
|
|
|
242
254
|
if target.product_type.to_s.eql?(Xcodeproj::Constants::PRODUCT_TYPE_UTI[:application]) then
|
|
@@ -430,22 +430,11 @@ module Pindo
|
|
|
430
430
|
app_info_obj
|
|
431
431
|
end
|
|
432
432
|
|
|
433
|
-
def start_upload(app_info_obj:nil, ipa_file_upload:nil, description:nil)
|
|
434
|
-
|
|
435
|
-
#
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
ext = File.extname(ipa_file_upload).downcase
|
|
439
|
-
case ext
|
|
440
|
-
when '.ipa'
|
|
441
|
-
package_type = 'ipa'
|
|
442
|
-
when '.apk'
|
|
443
|
-
package_type = 'apk'
|
|
444
|
-
when '.aab'
|
|
445
|
-
package_type = 'apk' # AAB也归类为apk类型
|
|
446
|
-
when '.zip', '.html', '.app'
|
|
447
|
-
package_type = 'zip'
|
|
448
|
-
end
|
|
433
|
+
def start_upload(app_info_obj:nil, ipa_file_upload:nil, description:nil, workflow_info:nil)
|
|
434
|
+
|
|
435
|
+
# 验证 workflow_info 必传
|
|
436
|
+
if workflow_info.nil? || workflow_info[:workflow_id].nil?
|
|
437
|
+
raise Informative, "workflow_info 和 workflow_id 是必传参数,请确保调用 prepare_upload 时传入了 package_type"
|
|
449
438
|
end
|
|
450
439
|
|
|
451
440
|
if !ipa_file_upload.nil? &&
|
|
@@ -568,16 +557,18 @@ module Pindo
|
|
|
568
557
|
|
|
569
558
|
puts attachFileUrls
|
|
570
559
|
|
|
571
|
-
|
|
560
|
+
# 准备上传参数(workflowId 必传)
|
|
561
|
+
upload_params = {
|
|
572
562
|
description: description,
|
|
573
563
|
packageUrl: upload_res,
|
|
574
|
-
attachFileUrls:attachFileUrls
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
564
|
+
attachFileUrls: attachFileUrls,
|
|
565
|
+
workflowId: workflow_info[:workflow_id] # workflowId 必传
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
result_data = @pgyer_client.upload_project_package(
|
|
569
|
+
projectId: app_info_obj["id"],
|
|
570
|
+
params: upload_params
|
|
571
|
+
)
|
|
581
572
|
|
|
582
573
|
return result_data
|
|
583
574
|
else
|
|
@@ -12,8 +12,9 @@ module Pindo
|
|
|
12
12
|
# 优化版本:只读写一次plist文件,提高性能
|
|
13
13
|
# @param project_dir [String] iOS项目目录路径
|
|
14
14
|
# @param package_name [String] 工作流的package_name(如:"Test Demo")
|
|
15
|
+
# @param project_id [String] JPS项目ID(可选,用于添加快捷操作)
|
|
15
16
|
# @return [Boolean] 是否成功更新
|
|
16
|
-
def self.update_project_with_packagename(project_dir: nil, package_name: nil)
|
|
17
|
+
def self.update_project_with_packagename(project_dir: nil, package_name: nil, project_id: nil)
|
|
17
18
|
raise ArgumentError, "项目目录不能为空" if project_dir.nil?
|
|
18
19
|
raise ArgumentError, "Package Name不能为空" if package_name.nil?
|
|
19
20
|
|
|
@@ -66,10 +67,36 @@ module Pindo
|
|
|
66
67
|
puts " ✓ 已添加URL Scheme: #{bundle_scheme} (基于 Bundle ID)"
|
|
67
68
|
end
|
|
68
69
|
|
|
70
|
+
# 4. 添加 JPS 快捷操作(UIApplicationShortcutItems)
|
|
71
|
+
if project_id && !project_id.to_s.empty?
|
|
72
|
+
# 创建或获取 UIApplicationShortcutItems 数组
|
|
73
|
+
info_plist_dict["UIApplicationShortcutItems"] ||= []
|
|
74
|
+
|
|
75
|
+
# 构建快捷操作类型
|
|
76
|
+
shortcut_type = "jps_project?#{project_id}"
|
|
77
|
+
|
|
78
|
+
# 检查是否已存在相同的快捷操作
|
|
79
|
+
existing_shortcut = info_plist_dict["UIApplicationShortcutItems"].find do |item|
|
|
80
|
+
item["UIApplicationShortcutItemType"] == shortcut_type
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
unless existing_shortcut
|
|
84
|
+
jps_shortcut = {
|
|
85
|
+
"UIApplicationShortcutItemType" => shortcut_type,
|
|
86
|
+
"UIApplicationShortcutItemTitle" => "访问 JPS 详情",
|
|
87
|
+
"UIApplicationShortcutItemIconType" => "UIApplicationShortcutIconTypeBookmark"
|
|
88
|
+
}
|
|
89
|
+
info_plist_dict["UIApplicationShortcutItems"] << jps_shortcut
|
|
90
|
+
puts " ✓ 已添加 JPS 快捷操作: #{shortcut_type}"
|
|
91
|
+
else
|
|
92
|
+
puts " ✓ JPS 快捷操作已存在: #{shortcut_type}"
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
69
96
|
# 一次性写入plist
|
|
70
97
|
Xcodeproj::Plist.write_to_path(info_plist_dict, info_plist_path)
|
|
71
98
|
|
|
72
|
-
#
|
|
99
|
+
# 5. 更新 Xcode 项目中的 PRODUCT_BUNDLE_IDENTIFIER
|
|
73
100
|
if app_target
|
|
74
101
|
app_target.build_configurations.each do |config|
|
|
75
102
|
config.build_settings['PRODUCT_BUNDLE_IDENTIFIER'] = final_bundle_id
|
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.
|
|
4
|
+
version: 5.10.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- wade
|
|
@@ -115,20 +115,20 @@ dependencies:
|
|
|
115
115
|
requirements:
|
|
116
116
|
- - "~>"
|
|
117
117
|
- !ruby/object:Gem::Version
|
|
118
|
-
version: '1.
|
|
118
|
+
version: '1.5'
|
|
119
119
|
- - ">="
|
|
120
120
|
- !ruby/object:Gem::Version
|
|
121
|
-
version: 1.
|
|
121
|
+
version: 1.5.0
|
|
122
122
|
type: :runtime
|
|
123
123
|
prerelease: false
|
|
124
124
|
version_requirements: !ruby/object:Gem::Requirement
|
|
125
125
|
requirements:
|
|
126
126
|
- - "~>"
|
|
127
127
|
- !ruby/object:Gem::Version
|
|
128
|
-
version: '1.
|
|
128
|
+
version: '1.5'
|
|
129
129
|
- - ">="
|
|
130
130
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: 1.
|
|
131
|
+
version: 1.5.0
|
|
132
132
|
- !ruby/object:Gem::Dependency
|
|
133
133
|
name: rqrcode
|
|
134
134
|
requirement: !ruby/object:Gem::Requirement
|