pindo 5.13.1 → 5.13.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/base/git_handler.rb +692 -0
- data/lib/pindo/command/android/autobuild.rb +2 -2
- data/lib/pindo/command/appstore/adhocbuild.rb +256 -311
- data/lib/pindo/command/appstore/autobuild.rb +203 -0
- data/lib/pindo/command/appstore/autoresign.rb +35 -17
- data/lib/pindo/command/appstore/bundleid.rb +120 -0
- data/lib/pindo/command/appstore/cert.rb +212 -0
- data/lib/pindo/command/appstore/configproj.rb +81 -0
- data/lib/pindo/command/{deploy → appstore}/getitcinfo.rb +76 -91
- data/lib/pindo/command/appstore/iap.rb +788 -24
- data/lib/pindo/command/appstore/initconfig.rb +105 -0
- data/lib/pindo/command/appstore/itcapp.rb +95 -13
- data/lib/pindo/command/{deploy → appstore}/itcinfo.rb +90 -118
- data/lib/pindo/command/appstore/pem.rb +136 -0
- data/lib/pindo/command/appstore/pullconfig.rb +99 -0
- data/lib/pindo/command/appstore/quswark.rb +87 -0
- data/lib/pindo/command/appstore/quswauth.rb +67 -0
- data/lib/pindo/command/appstore/tag.rb +77 -0
- data/lib/pindo/command/appstore.rb +13 -1
- data/lib/pindo/command/env/quarkenv.rb +11 -13
- data/lib/pindo/command/env/swarkenv.rb +11 -16
- data/lib/pindo/command/ios/applovin.rb +24 -182
- data/lib/pindo/command/ios/autobuild.rb +64 -43
- data/lib/pindo/command/ios/autoresign.rb +34 -19
- data/lib/pindo/command/ios/build.rb +9 -6
- data/lib/pindo/command/ios/cert.rb +27 -20
- data/lib/pindo/command/ios/podupdate.rb +6 -37
- data/lib/pindo/command/jps/upload.rb +3 -3
- data/lib/pindo/command/unity/autobuild.rb +2 -2
- data/lib/pindo/command/utils/clearcert.rb +2 -17
- data/lib/pindo/command/{deploy → utils}/fabric.rb +13 -13
- data/lib/pindo/command/utils/renewcert.rb +62 -38
- data/lib/pindo/command/utils/renewproj.rb +0 -3
- data/lib/pindo/command/{deploy → utils}/updateconfig.rb +6 -7
- data/lib/pindo/command/utils.rb +2 -0
- data/lib/pindo/command/web/autobuild.rb +2 -2
- data/lib/pindo/command.rb +30 -3
- data/lib/pindo/config/build_info_manager.rb +176 -0
- data/lib/pindo/config/ios_config_parser.rb +404 -0
- data/lib/pindo/module/android/android_config_helper.rb +9 -5
- data/lib/pindo/module/appstore/bundleid_helper.rb +349 -0
- data/lib/pindo/module/appstore/itcapp_helper.rb +228 -0
- data/lib/pindo/module/build/build_helper.rb +12 -0
- data/lib/pindo/module/build/swark_helper.rb +116 -77
- data/lib/pindo/module/cert/cert_helper.rb +74 -0
- data/lib/pindo/module/cert/pem_helper.rb +72 -0
- data/lib/pindo/module/cert/{xcodecerthelper.rb → xcode_cert_helper.rb} +211 -6
- data/lib/pindo/module/pgyer/pgyerhelper.rb +13 -5
- data/lib/pindo/module/task/model/appstore/appstore_task.rb +18 -0
- data/lib/pindo/module/task/model/appstore/appstore_upload_ipa_task.rb +151 -0
- data/lib/pindo/module/task/model/appstore/appstore_upload_metadata_task.rb +250 -0
- data/lib/pindo/module/task/model/appstore/appstore_upload_screenshot_task.rb +276 -0
- data/lib/pindo/module/task/model/build/android_build_adhoc_task.rb +210 -0
- data/lib/pindo/module/task/model/build/{android_dev_build_task.rb → android_build_dev_task.rb} +2 -2
- data/lib/pindo/module/task/model/build/android_build_gplay_task.rb +210 -0
- data/lib/pindo/module/task/model/build/android_build_task.rb +13 -0
- data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +342 -0
- data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +341 -0
- data/lib/pindo/module/task/model/build/{ios_dev_build_task.rb → ios_build_dev_task.rb} +40 -59
- data/lib/pindo/module/task/model/build/ios_build_task.rb +23 -0
- data/lib/pindo/module/task/model/build/{web_dev_build_task.rb → web_build_dev_task.rb} +1 -1
- data/lib/pindo/module/task/model/build_task.rb +15 -12
- data/lib/pindo/module/task/model/jps_resign_task.rb +185 -0
- data/lib/pindo/module/task/model/{upload_task.rb → jps_upload_task.rb} +3 -3
- data/lib/pindo/module/task/model/unity_export_task.rb +3 -1
- data/lib/pindo/module/unity/unity_helper.rb +2 -1
- data/lib/pindo/module/xcode/applovin_xcode_helper.rb +271 -0
- data/lib/pindo/module/xcode/cocoapods_helper.rb +153 -0
- data/lib/pindo/module/xcode/ipa_resign_helper.rb +210 -0
- data/lib/pindo/module/xcode/{xcodeappconfig.rb → xcode_app_config.rb} +79 -0
- data/lib/pindo/module/xcode/xcode_build_config.rb +152 -17
- data/lib/pindo/module/xcode/xcode_build_helper.rb +151 -1
- data/lib/pindo/module/xcode/xcode_swark_helper.rb +341 -0
- data/lib/pindo/options/core/global_options_state.rb +268 -0
- data/lib/pindo/options/core/option_configuration.rb +206 -0
- data/lib/pindo/options/core/option_initializer.rb +51 -0
- data/lib/pindo/options/core/option_item.rb +144 -0
- data/lib/pindo/options/core/option_value_parser.rb +54 -0
- data/lib/pindo/options/groups/build_options.rb +60 -0
- data/lib/pindo/options/groups/jps_options.rb +70 -0
- data/lib/pindo/options/groups/option_group.rb +73 -0
- data/lib/pindo/options/helpers/bundleid_selector.rb +103 -0
- data/lib/pindo/options/options.rb +14 -0
- data/lib/pindo/version.rb +1 -1
- metadata +51 -40
- data/lib/pindo/command/appstore/import.rb +0 -259
- data/lib/pindo/command/deploy/build.rb +0 -250
- data/lib/pindo/command/deploy/bundleid.rb +0 -259
- data/lib/pindo/command/deploy/cert.rb +0 -202
- data/lib/pindo/command/deploy/check.rb +0 -93
- data/lib/pindo/command/deploy/configproj.rb +0 -120
- data/lib/pindo/command/deploy/confusecode.rb +0 -262
- data/lib/pindo/command/deploy/confuseproj.rb +0 -122
- data/lib/pindo/command/deploy/iap.rb +0 -826
- data/lib/pindo/command/deploy/initconfig.rb +0 -138
- data/lib/pindo/command/deploy/itcapp.rb +0 -146
- data/lib/pindo/command/deploy/pem.rb +0 -55
- data/lib/pindo/command/deploy/pullconfig.rb +0 -56
- data/lib/pindo/command/deploy/pushconfig.rb +0 -93
- data/lib/pindo/command/deploy/quswark.rb +0 -156
- data/lib/pindo/command/deploy/quswauth.rb +0 -76
- data/lib/pindo/command/deploy/reportbug.rb +0 -145
- data/lib/pindo/command/deploy/resign.rb +0 -300
- data/lib/pindo/command/deploy/tag.rb +0 -108
- data/lib/pindo/command/deploy/uploadipa.rb +0 -73
- data/lib/pindo/command/deploy.rb +0 -42
- data/lib/pindo/command/dev/autobuild.rb +0 -117
- data/lib/pindo/command/dev/build.rb +0 -94
- data/lib/pindo/command/dev/debug.rb +0 -112
- data/lib/pindo/module/task/model/build/android_release_build_task.rb +0 -29
- data/lib/pindo/module/task/model/build/ios_adhoc_build_task.rb +0 -53
- data/lib/pindo/module/task/model/build/ios_release_build_task.rb +0 -53
- data/lib/pindo/options/appconfigoptions.rb +0 -24
- data/lib/pindo/options/deployoptions.rb +0 -372
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
require_relative '
|
|
1
|
+
require_relative 'ios_build_task'
|
|
2
2
|
require 'pindo/module/build/build_helper'
|
|
3
3
|
require 'pindo/module/build/version_helper'
|
|
4
4
|
require 'pindo/module/build/git_repo_helper'
|
|
5
5
|
require 'pindo/module/xcode/xcode_build_config'
|
|
6
6
|
require 'pindo/module/xcode/xcode_build_helper'
|
|
7
|
+
require 'pindo/module/xcode/cocoapods_helper'
|
|
7
8
|
require 'pindo/module/pgyer/pgyerhelper'
|
|
8
9
|
|
|
9
10
|
module Pindo
|
|
10
11
|
module TaskSystem
|
|
11
12
|
# iOS Dev 模式构建任务
|
|
12
13
|
# 使用 Development 证书编译 iOS 工程
|
|
13
|
-
class
|
|
14
|
+
class IosBuildDevTask < IosBuildTask
|
|
14
15
|
def initialize(options = {})
|
|
15
16
|
@bundle_id = options[:bundle_id]
|
|
16
17
|
@proj_name = options[:proj_name]
|
|
@@ -45,12 +46,13 @@ module Pindo
|
|
|
45
46
|
update_version_info
|
|
46
47
|
pull_config
|
|
47
48
|
update_entitlements
|
|
48
|
-
|
|
49
|
+
|
|
49
50
|
end
|
|
50
51
|
|
|
51
52
|
def execute_build
|
|
52
53
|
configure_certificate
|
|
53
54
|
update_url_schemes_final
|
|
55
|
+
handle_cocoapods
|
|
54
56
|
build_ios_project
|
|
55
57
|
end
|
|
56
58
|
|
|
@@ -92,14 +94,6 @@ module Pindo
|
|
|
92
94
|
end
|
|
93
95
|
end
|
|
94
96
|
|
|
95
|
-
# 清理 Firebase Shell Script
|
|
96
|
-
def cleanup_firebase_shell
|
|
97
|
-
project_fullname = Dir.glob(File.join(@project_path, "/*.xcodeproj")).max_by { |f| File.mtime(f) }
|
|
98
|
-
if !project_fullname.nil? && File.exist?(project_fullname)
|
|
99
|
-
Pindo::XcodeBuildHelper.delete_libtarget_firebase_shell(@project_path)
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
|
|
103
97
|
# 更新工程配置
|
|
104
98
|
def update_project_config
|
|
105
99
|
workflow_packname = @workflow_info[:package_name]
|
|
@@ -146,19 +140,21 @@ module Pindo
|
|
|
146
140
|
end
|
|
147
141
|
end
|
|
148
142
|
|
|
149
|
-
#
|
|
143
|
+
# 检查配置
|
|
150
144
|
def pull_config
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
145
|
+
# 检查 IosConfigParser 单例中是否已加载配置
|
|
146
|
+
config_parser = Pindo::IosConfigParser.instance
|
|
147
|
+
if config_parser.config_json.nil?
|
|
148
|
+
raise Informative, "IosBuildDevTask 配置未加载,请确保在命令层已正确加载 config.json"
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
puts " 使用已加载的配置..."
|
|
154
152
|
end
|
|
155
153
|
|
|
156
154
|
# 更新 Entitlements
|
|
157
155
|
def update_entitlements
|
|
158
|
-
config_json_file = File.join(@project_path, "config.json")
|
|
159
156
|
Pindo::XcodeBuildConfig.update_entitlements_config(
|
|
160
|
-
project_dir: @project_path
|
|
161
|
-
config_file: config_json_file
|
|
157
|
+
project_dir: @project_path
|
|
162
158
|
)
|
|
163
159
|
end
|
|
164
160
|
|
|
@@ -166,29 +162,14 @@ module Pindo
|
|
|
166
162
|
def handle_cocoapods
|
|
167
163
|
return unless File.exist?(File.join(@project_path, "Podfile"))
|
|
168
164
|
|
|
169
|
-
|
|
170
|
-
Pindo::
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
FileUtils.rm_rf(File.join(@project_path, "Podfile.lock")) if File.exist?(File.join(@project_path, "Podfile.lock"))
|
|
175
|
-
FileUtils.rm_rf(File.join(@project_path, "Pods")) if File.exist?(File.join(@project_path, "Pods"))
|
|
176
|
-
|
|
177
|
-
puts "正在执行 pod deintegrate..."
|
|
178
|
-
system 'pod deintegrate'
|
|
179
|
-
|
|
180
|
-
puts "正在执行 pod install..."
|
|
181
|
-
system 'pod install'
|
|
182
|
-
rescue => error
|
|
183
|
-
puts(error.to_s)
|
|
184
|
-
raise Informative, "pod install 失败!!先 pod install 完成后再编译!"
|
|
185
|
-
end
|
|
165
|
+
# 1. 更新私有索引库
|
|
166
|
+
Pindo::CocoaPodsHelper.update_pod_repo(
|
|
167
|
+
install: false,
|
|
168
|
+
project_dir: @project_path
|
|
169
|
+
)
|
|
186
170
|
|
|
187
|
-
#
|
|
188
|
-
|
|
189
|
-
unless File.exist?(pod_lock_file)
|
|
190
|
-
raise Informative, "pod install 失败!!先 pod install 完成后再编译!"
|
|
191
|
-
end
|
|
171
|
+
# 2. 清理并重新安装
|
|
172
|
+
Pindo::CocoaPodsHelper.deintegrate_and_install(@project_path)
|
|
192
173
|
end
|
|
193
174
|
|
|
194
175
|
# 配置证书
|
|
@@ -196,22 +177,14 @@ module Pindo
|
|
|
196
177
|
# 检查是否是 macOS 工程
|
|
197
178
|
detect_macos_platform
|
|
198
179
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
args_temp << config_path
|
|
208
|
-
end
|
|
209
|
-
end
|
|
210
|
-
|
|
211
|
-
# 切换到 iOS 工程目录,确保 Cert::run 能找到 xcodeproj
|
|
212
|
-
Dir.chdir(@project_path) do
|
|
213
|
-
Pindo::Command::Deploy::Cert::run(args_temp)
|
|
214
|
-
end
|
|
180
|
+
# 使用新的证书安装方法
|
|
181
|
+
# config.json 已经通过 pull_config 方法拉取到 @project_path 目录
|
|
182
|
+
require 'pindo/module/cert/xcode_cert_helper'
|
|
183
|
+
Pindo::XcodeCertHelper.install_and_config_certs(
|
|
184
|
+
build_type: 'dev',
|
|
185
|
+
platform_type: @macos_flag ? 'macos' : 'ios',
|
|
186
|
+
project_dir: @project_path
|
|
187
|
+
)
|
|
215
188
|
end
|
|
216
189
|
|
|
217
190
|
# 检测是否为 macOS 平台
|
|
@@ -241,10 +214,18 @@ module Pindo
|
|
|
241
214
|
def build_ios_project
|
|
242
215
|
Dir.chdir(@project_path)
|
|
243
216
|
|
|
244
|
-
|
|
245
|
-
|
|
217
|
+
# 使用 XcodeBuildHelper 进行构建
|
|
218
|
+
ipa_file = Pindo::XcodeBuildHelper.build_project(
|
|
219
|
+
project_dir: @project_path,
|
|
220
|
+
icloud_id: nil
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
if ipa_file.nil?
|
|
224
|
+
raise Informative, "构建失败:未生成 IPA 文件"
|
|
225
|
+
end
|
|
246
226
|
|
|
247
|
-
|
|
227
|
+
puts "构建成功:#{ipa_file}"
|
|
228
|
+
ipa_file
|
|
248
229
|
end
|
|
249
230
|
end
|
|
250
231
|
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require_relative '../build_task'
|
|
2
|
+
require 'pindo/module/xcode/xcode_build_helper'
|
|
3
|
+
|
|
4
|
+
module Pindo
|
|
5
|
+
module TaskSystem
|
|
6
|
+
# iOS 构建任务基类
|
|
7
|
+
# 所有 iOS 平台构建任务的抽象基类
|
|
8
|
+
# 子类包括:IosBuildDevTask、IosBuildAdhocTask、IosBuildAppStoreTask
|
|
9
|
+
class IosBuildTask < BuildTask
|
|
10
|
+
|
|
11
|
+
protected
|
|
12
|
+
|
|
13
|
+
# 清理 Firebase Shell Script
|
|
14
|
+
# 删除 Xcode 项目中的 Firebase Shell Script Build Phase
|
|
15
|
+
def cleanup_firebase_shell
|
|
16
|
+
project_fullname = Dir.glob(File.join(@project_path, "/*.xcodeproj")).max_by { |f| File.mtime(f) }
|
|
17
|
+
if !project_fullname.nil? && File.exist?(project_fullname)
|
|
18
|
+
Pindo::XcodeBuildHelper.delete_libtarget_firebase_shell(@project_path)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -81,17 +81,17 @@ module Pindo
|
|
|
81
81
|
|
|
82
82
|
# 创建 iOS 构建任务
|
|
83
83
|
def self.create_ios_task(mode, options)
|
|
84
|
-
require_relative 'build/
|
|
85
|
-
require_relative 'build/
|
|
86
|
-
require_relative 'build/
|
|
84
|
+
require_relative 'build/ios_build_dev_task'
|
|
85
|
+
require_relative 'build/ios_build_adhoc_task'
|
|
86
|
+
require_relative 'build/ios_build_appstore_task'
|
|
87
87
|
|
|
88
88
|
case mode
|
|
89
89
|
when :dev
|
|
90
|
-
|
|
90
|
+
IosBuildDevTask.new(options)
|
|
91
91
|
when :adhoc
|
|
92
|
-
|
|
92
|
+
IosBuildAdhocTask.new(options)
|
|
93
93
|
when :release
|
|
94
|
-
|
|
94
|
+
IosBuildAppStoreTask.new(options)
|
|
95
95
|
else
|
|
96
96
|
raise ArgumentError, "不支持的 iOS 构建模式: #{mode}"
|
|
97
97
|
end
|
|
@@ -99,14 +99,17 @@ module Pindo
|
|
|
99
99
|
|
|
100
100
|
# 创建 Android 构建任务
|
|
101
101
|
def self.create_android_task(mode, options)
|
|
102
|
-
require_relative 'build/
|
|
103
|
-
require_relative 'build/
|
|
102
|
+
require_relative 'build/android_build_dev_task'
|
|
103
|
+
require_relative 'build/android_build_adhoc_task'
|
|
104
|
+
require_relative 'build/android_build_gplay_task'
|
|
104
105
|
|
|
105
106
|
case mode
|
|
106
107
|
when :dev, :debug
|
|
107
|
-
|
|
108
|
+
AndroidBuildDevTask.new(options)
|
|
109
|
+
when :adhoc
|
|
110
|
+
AndroidBuildAdhocTask.new(options)
|
|
108
111
|
when :release
|
|
109
|
-
|
|
112
|
+
AndroidBuildGPlayTask.new(options)
|
|
110
113
|
else
|
|
111
114
|
raise ArgumentError, "不支持的 Android 构建模式: #{mode}"
|
|
112
115
|
end
|
|
@@ -114,12 +117,12 @@ module Pindo
|
|
|
114
117
|
|
|
115
118
|
# 创建 Web 构建任务
|
|
116
119
|
def self.create_web_task(mode, options)
|
|
117
|
-
require_relative 'build/
|
|
120
|
+
require_relative 'build/web_build_dev_task'
|
|
118
121
|
|
|
119
122
|
case mode
|
|
120
123
|
when :dev, :debug, :release
|
|
121
124
|
# Web 目前只有一个构建任务类
|
|
122
|
-
|
|
125
|
+
WebBuildDevTask.new(options)
|
|
123
126
|
else
|
|
124
127
|
raise ArgumentError, "不支持的 Web 构建模式: #{mode}"
|
|
125
128
|
end
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
require_relative '../pindo_task'
|
|
2
|
+
require_relative '../task_config'
|
|
3
|
+
require 'pindo/module/pgyer/pgyerhelper'
|
|
4
|
+
|
|
5
|
+
module Pindo
|
|
6
|
+
module TaskSystem
|
|
7
|
+
# JPS 重签名任务
|
|
8
|
+
# 从 JPS 平台下载应用并使用指定证书重签名
|
|
9
|
+
class JPSResignTask < PindoTask
|
|
10
|
+
attr_reader :app_info_obj, :version_info, :cert_id, :send_flag
|
|
11
|
+
|
|
12
|
+
def self.task_type
|
|
13
|
+
:jps_resign
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# 重试配置
|
|
17
|
+
def self.default_retry_mode
|
|
18
|
+
RetryMode::DELAYED # 延迟重试
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def self.default_retry_count
|
|
22
|
+
2 # 默认可以重试 2 次
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.default_retry_delay
|
|
26
|
+
10 # 默认延迟 10 秒
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# 初始化 JPS 重签名任务
|
|
30
|
+
# @param options [Hash] 选项
|
|
31
|
+
# @option options [Hash] :app_info_obj JPS 应用信息对象(可选,如为 nil 则延迟获取)
|
|
32
|
+
# @option options [String] :project_name 项目名称(可选)
|
|
33
|
+
# @option options [String] :cert_id 重签名使用的 Bundle ID(可选,nil 表示交互选择)
|
|
34
|
+
# @option options [Boolean] :send_flag 是否发送到测试群(默认 false,始终会发送给自己)
|
|
35
|
+
def initialize(options = {})
|
|
36
|
+
@app_info_obj = options[:app_info_obj]
|
|
37
|
+
@project_name = options[:project_name]
|
|
38
|
+
@cert_id = options[:cert_id]
|
|
39
|
+
@send_flag = options[:send_flag] || false
|
|
40
|
+
@version_info = nil
|
|
41
|
+
|
|
42
|
+
# 设置重签名任务的优先级为 LOW,确保在上传任务之后执行
|
|
43
|
+
options[:priority] ||= TaskPriority::LOW
|
|
44
|
+
|
|
45
|
+
super("JPS 重签名", options)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def validate
|
|
49
|
+
# app_info_obj 可以延迟获取,不在这里验证
|
|
50
|
+
true
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
protected
|
|
54
|
+
|
|
55
|
+
def do_work
|
|
56
|
+
pgyer_helper = PgyerHelper.share_instace
|
|
57
|
+
|
|
58
|
+
# 1. 如果没有 app_info_obj,延迟获取
|
|
59
|
+
if @app_info_obj.nil?
|
|
60
|
+
fetch_jps_config
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# 2. 获取要重签名的版本
|
|
64
|
+
@version_info = pgyer_helper.get_versioon_history_item(
|
|
65
|
+
app_info_obj: @app_info_obj,
|
|
66
|
+
list_select_flat: false
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
if @version_info.nil?
|
|
70
|
+
@retry_count = 0 # 没有版本记录时不重试
|
|
71
|
+
raise "没有找到上传记录"
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# 3. 获取证书列表
|
|
75
|
+
cert_list = pgyer_helper.get_cert_list
|
|
76
|
+
|
|
77
|
+
if cert_list.nil? || cert_list.empty?
|
|
78
|
+
@retry_count = 0 # 没有证书时不重试
|
|
79
|
+
raise "没有找到可用的证书"
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# 4. 选择证书
|
|
83
|
+
cert_item = select_certificate(cert_list)
|
|
84
|
+
|
|
85
|
+
if cert_item.nil?
|
|
86
|
+
@retry_count = 0 # 没有匹配的证书时不重试
|
|
87
|
+
raise "未找到匹配的证书"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
# 5. 执行重签名
|
|
91
|
+
result = pgyer_helper.resign(
|
|
92
|
+
package_id: @version_info["id"],
|
|
93
|
+
cert_id: cert_item["id"]
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
unless result
|
|
97
|
+
raise "重签名失败"
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
# 6. 获取重签名后的版本信息
|
|
101
|
+
@version_info = pgyer_helper.get_versioon_history_item(
|
|
102
|
+
app_info_obj: @app_info_obj,
|
|
103
|
+
list_select_flat: false
|
|
104
|
+
)
|
|
105
|
+
|
|
106
|
+
if @version_info.nil?
|
|
107
|
+
raise "重签名成功但无法获取新版本信息"
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# 7. 打印版本信息
|
|
111
|
+
pgyer_helper.print_app_version_info(
|
|
112
|
+
app_info_obj: @app_info_obj,
|
|
113
|
+
app_version_info_obj: @version_info
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
# 8. 发送消息给自己
|
|
117
|
+
pgyer_helper.send_apptest_msg(
|
|
118
|
+
app_info_obj: @app_info_obj,
|
|
119
|
+
app_version_info_obj: @version_info,
|
|
120
|
+
receiveType: "self"
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
# 9. 如果需要发送到测试群
|
|
124
|
+
if @send_flag
|
|
125
|
+
pgyer_helper.send_apptest_msg(
|
|
126
|
+
app_info_obj: @app_info_obj,
|
|
127
|
+
app_version_info_obj: @version_info,
|
|
128
|
+
chatEnv: "DevTest",
|
|
129
|
+
receiveType: "chat"
|
|
130
|
+
)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
{
|
|
134
|
+
success: true,
|
|
135
|
+
version_info: @version_info,
|
|
136
|
+
cert_id: cert_item["mainBundleId"]
|
|
137
|
+
}
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
private
|
|
141
|
+
|
|
142
|
+
# 延迟获取 JPS 配置
|
|
143
|
+
def fetch_jps_config
|
|
144
|
+
puts " 获取 JPS 配置..."
|
|
145
|
+
|
|
146
|
+
# 获取当前工作目录
|
|
147
|
+
working_directory = Dir.pwd
|
|
148
|
+
|
|
149
|
+
# 调用 PgyerHelper 获取配置
|
|
150
|
+
@app_info_obj = PgyerHelper.share_instace.prepare_upload(
|
|
151
|
+
working_directory: working_directory,
|
|
152
|
+
proj_name: @project_name
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
unless @app_info_obj
|
|
156
|
+
raise "无法获取 JPS 配置"
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
# 选择证书
|
|
161
|
+
def select_certificate(cert_list)
|
|
162
|
+
if @cert_id.nil? && cert_list.size > 0
|
|
163
|
+
# 交互式选择证书
|
|
164
|
+
bundle_id_list = cert_list.map { |cert| [cert["certType"], cert["mainBundleId"]].join("_") }
|
|
165
|
+
cli = HighLine.new
|
|
166
|
+
selected = cli.choose do |menu|
|
|
167
|
+
menu.prompt = "请选择重签名的证书:"
|
|
168
|
+
menu.choices(*bundle_id_list)
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# 根据选择找到对应的证书
|
|
172
|
+
cert_list.select { |certitem|
|
|
173
|
+
[certitem["certType"], certitem["mainBundleId"]].join("_") == selected
|
|
174
|
+
}.first
|
|
175
|
+
else
|
|
176
|
+
# 根据 cert_id 查找 adhoc 证书
|
|
177
|
+
cert_list.select { |certitem|
|
|
178
|
+
certitem["mainBundleId"] == @cert_id &&
|
|
179
|
+
certitem["certType"].downcase.include?("adhoc")
|
|
180
|
+
}.first
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
end
|
|
185
|
+
end
|
|
@@ -4,9 +4,9 @@ require 'pindo/module/pgyer/pgyerhelper'
|
|
|
4
4
|
|
|
5
5
|
module Pindo
|
|
6
6
|
module TaskSystem
|
|
7
|
-
# 上传任务
|
|
8
|
-
#
|
|
9
|
-
class
|
|
7
|
+
# JPS 上传任务
|
|
8
|
+
# 上传构建产物到 JPS 测试平台
|
|
9
|
+
class JPSUploadTask < PindoTask
|
|
10
10
|
attr_reader :file_type, :upload_path, :upload_file
|
|
11
11
|
|
|
12
12
|
def self.task_type
|
|
@@ -31,6 +31,7 @@ module Pindo
|
|
|
31
31
|
@is_library_mode = false # 不再支持库模式
|
|
32
32
|
@index_count = options[:context] ? options[:context][:index_count] : nil
|
|
33
33
|
@export_path = options[:export_path] # 可由参数传入,nil 表示自动检测
|
|
34
|
+
@deploy_mode = options[:deploy_mode] || 'dev' # 部署模式:dev/adhoc/release,默认 dev
|
|
34
35
|
|
|
35
36
|
name = case platform
|
|
36
37
|
when 'ios', 'ipa'
|
|
@@ -188,7 +189,8 @@ module Pindo
|
|
|
188
189
|
project_path: @unity_project_path,
|
|
189
190
|
platform: platform,
|
|
190
191
|
isLibrary: @is_library_mode,
|
|
191
|
-
indexNo: @index_count
|
|
192
|
+
indexNo: @index_count,
|
|
193
|
+
deployMode: @deploy_mode
|
|
192
194
|
)
|
|
193
195
|
|
|
194
196
|
# 清理 Unity 进程
|
|
@@ -422,7 +422,7 @@ module Pindo
|
|
|
422
422
|
nil
|
|
423
423
|
end
|
|
424
424
|
|
|
425
|
-
def build_project(unity_exe_full_path:nil, project_path:nil, platform: nil, isLibrary: false, indexNo: nil)
|
|
425
|
+
def build_project(unity_exe_full_path:nil, project_path:nil, platform: nil, isLibrary: false, indexNo: nil, deployMode: nil)
|
|
426
426
|
|
|
427
427
|
# 检查是否有Unity进程在运行,传入Unity路径和项目路径以精确匹配
|
|
428
428
|
check_unity_processes(unity_exe_full_path: unity_exe_full_path, project_path: project_path)
|
|
@@ -434,6 +434,7 @@ module Pindo
|
|
|
434
434
|
additional_args[:platform] = platform if platform
|
|
435
435
|
additional_args[:buildtype] = 'library' if isLibrary
|
|
436
436
|
additional_args[:indexno] = indexNo if indexNo
|
|
437
|
+
additional_args[:deploymode] = deployMode || 'dev' if deployMode || true # 默认为 dev
|
|
437
438
|
|
|
438
439
|
# 使用GoodUnityBuild.BuildManager.BatchBuild进行构建
|
|
439
440
|
result = execute_unity_command(unity_exe_full_path, project_path, additional_args)
|