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
|
@@ -5,39 +5,40 @@ require 'fileutils'
|
|
|
5
5
|
require 'json'
|
|
6
6
|
require 'faraday'
|
|
7
7
|
require 'xcodeproj'
|
|
8
|
+
require 'pindo/module/xcode/applovin_xcode_helper'
|
|
8
9
|
|
|
9
10
|
module Pindo
|
|
10
11
|
class Command
|
|
11
12
|
class Ios < Command
|
|
12
13
|
class Applovin < Ios
|
|
13
|
-
|
|
14
|
+
|
|
14
15
|
self.summary = '接入applovin max广告平台时更新Xcode中info.plist'
|
|
15
|
-
|
|
16
|
+
|
|
16
17
|
self.description = <<-DESC
|
|
17
18
|
接入applovin max广告平台时更新Xcode中info.plist。
|
|
18
|
-
|
|
19
|
+
|
|
19
20
|
支持功能:
|
|
20
|
-
|
|
21
|
+
|
|
21
22
|
* 自动获取applovin广告平台的SKAdNetwork IDs
|
|
22
|
-
|
|
23
|
+
|
|
23
24
|
* 更新Xcode工程中的info.plist文件
|
|
24
|
-
|
|
25
|
+
|
|
25
26
|
* 支持保存SKAdNetwork IDs到本地配置
|
|
26
|
-
|
|
27
|
+
|
|
27
28
|
使用示例:
|
|
28
|
-
|
|
29
|
+
|
|
29
30
|
$ pindo ios applovin # 更新当前目录下工程的info.plist
|
|
30
|
-
|
|
31
|
+
|
|
31
32
|
$ pindo ios applovin --appstore # 使用AppStore模式更新
|
|
32
|
-
|
|
33
|
+
|
|
33
34
|
$ pindo ios applovin --install # 运行applovin安装脚本
|
|
34
|
-
|
|
35
|
+
|
|
35
36
|
$ pindo ios applovin --upload # 保存SKAdNetwork IDs到本地
|
|
36
37
|
DESC
|
|
37
|
-
|
|
38
|
+
|
|
38
39
|
self.arguments = [
|
|
39
40
|
]
|
|
40
|
-
|
|
41
|
+
|
|
41
42
|
def self.options
|
|
42
43
|
[
|
|
43
44
|
['--appstore', 'AppStore模式,一般不使用'],
|
|
@@ -45,7 +46,7 @@ module Pindo
|
|
|
45
46
|
['--upload', '保存SKAdNetwork IDs到本地配置'],
|
|
46
47
|
].concat(super)
|
|
47
48
|
end
|
|
48
|
-
|
|
49
|
+
|
|
49
50
|
def initialize(argv)
|
|
50
51
|
|
|
51
52
|
@args_appstore_flag = argv.flag?('appstore', false)
|
|
@@ -55,178 +56,19 @@ module Pindo
|
|
|
55
56
|
super(argv)
|
|
56
57
|
@additional_args = argv.remainder!
|
|
57
58
|
end
|
|
58
|
-
|
|
59
|
+
|
|
59
60
|
def validate!
|
|
60
61
|
super
|
|
61
62
|
end
|
|
62
|
-
|
|
63
|
-
def run
|
|
64
|
-
|
|
65
|
-
skadnetwork_id_array = []
|
|
66
|
-
|
|
67
|
-
Funlog.instance.fancyinfo_start("正在请求applovin数据...")
|
|
68
|
-
|
|
69
|
-
applovin_res_json = req_applovin_json
|
|
70
|
-
# puts JSON.pretty_generate(applovin_res_json)
|
|
71
|
-
|
|
72
|
-
if !applovin_res_json.nil? && !applovin_res_json["skadnetwork_ids"].nil?
|
|
73
|
-
applovin_res_json["skadnetwork_ids"].each do |network_id|
|
|
74
|
-
skadnetwork_id_array << network_id["skadnetwork_id"]
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
applovin_media_res_json = req_applovin_mediia_json
|
|
79
|
-
# puts JSON.pretty_generate(applovin_media_res_json)
|
|
80
|
-
if !applovin_media_res_json.nil? && !applovin_media_res_json["mediationSKAdnetworkIdsSpecs"].nil?
|
|
81
|
-
applovin_media_res_json["mediationSKAdnetworkIdsSpecs"].each do |media_item|
|
|
82
|
-
skadnetwork_id_array = skadnetwork_id_array + media_item["skAdnetworkIds"]
|
|
83
|
-
end
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
skadnetwork_id_array = skadnetwork_id_array.uniq || []
|
|
87
|
-
|
|
88
|
-
Funlog.instance.fancyinfo_success("请求applovin数据,获取到#{skadnetwork_id_array.size}条数据...")
|
|
89
|
-
|
|
90
|
-
if !skadnetwork_id_array.nil? && skadnetwork_id_array.size > 50
|
|
91
|
-
# puts "From Applovin SKAdNetworkItems Size: #{skadnetwork_id_array.size}"
|
|
92
|
-
if @args_upload_flag
|
|
93
|
-
applovin_config_file = File.join(pindo_single_config.pindo_common_configdir,"applovin_client_config.json")
|
|
94
|
-
origin_json = {}
|
|
95
|
-
if File.exist?(applovin_config_file)
|
|
96
|
-
origin_json = JSON.parse(File.read(applovin_config_file))
|
|
97
|
-
end
|
|
98
|
-
origin_json["SKAdNetworkItems"] = skadnetwork_id_array
|
|
99
|
-
File.write(applovin_config_file, JSON.pretty_generate(origin_json))
|
|
100
|
-
git_addpush_repo(path:pindo_single_config.pindo_common_configdir, message:"Applovin SKAdNetworkItems", commit_file_params:["applovin_client_config.json"])
|
|
101
|
-
end
|
|
102
|
-
else
|
|
103
|
-
Funlog.instance.fancyinfo_start("网络拉取applovin数据太少,从缓存中获取数据...")
|
|
104
|
-
config_file = File.join(File::expand_path(Pindoconfig.instance.pindo_common_configdir), "applovin_client_config.json")
|
|
105
|
-
config_json = JSON.parse(File.read(config_file))
|
|
106
|
-
skadnetwork_id_array = skadnetwork_id_array + config_json["SKAdNetworkItems"]
|
|
107
|
-
# puts "From Config SKAdNetworkItems Size: #{skadnetwork_id_array.size}"
|
|
108
|
-
Funlog.instance.fancyinfo_success("网络拉取applovin数据太少,从缓存中获取到#{skadnetwork_id_array.size}条数据...")
|
|
109
|
-
end
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
Funlog.instance.fancyinfo_start("正在写入Xcode中...")
|
|
113
|
-
|
|
114
|
-
skadnetwork_id_array = skadnetwork_id_array.uniq || []
|
|
115
|
-
|
|
116
|
-
project_root_dir = Dir.pwd
|
|
117
|
-
xcodeproj_file_name = Dir.glob(File.join(project_root_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
|
|
118
|
-
|
|
119
|
-
plist_file_name = File.join(project_root_dir, "AppEntry/Info.plist")
|
|
120
|
-
if !xcodeproj_file_name.nil?
|
|
121
|
-
proj_name = File.basename(xcodeproj_file_name, ".xcodeproj")
|
|
122
|
-
plist_file_name = get_applovin_infoplist(project_dir:project_root_dir, proj_name:proj_name)
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
info_plist_dict = {}
|
|
127
|
-
if File.exist?(plist_file_name)
|
|
128
|
-
info_plist_dict = Xcodeproj::Plist.read_from_path(plist_file_name)
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
info_plist_dict["NSAdvertisingAttributionReportEndpoint"] = info_plist_dict["NSAdvertisingAttributionReportEndpoint"] || "https://postbacks-app.com"
|
|
133
|
-
|
|
134
|
-
if !info_plist_dict.has_key?("NSAppTransportSecurity")
|
|
135
|
-
info_plist_dict["NSAppTransportSecurity"] = {}
|
|
136
|
-
info_plist_dict["NSAppTransportSecurity"]["NSAllowsArbitraryLoads"] = true
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
if !skadnetwork_id_array.nil? && skadnetwork_id_array.size > 0
|
|
141
|
-
info_plist_dict["SKAdNetworkItems"] = []
|
|
142
|
-
skadnetwork_id_array.each do |network_id|
|
|
143
|
-
item = {}
|
|
144
|
-
item["SKAdNetworkIdentifier"] = network_id
|
|
145
|
-
info_plist_dict["SKAdNetworkItems"] << item
|
|
146
|
-
end
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
Xcodeproj::Plist.write_to_path(info_plist_dict, plist_file_name)
|
|
150
|
-
|
|
151
|
-
Funlog.instance.fancyinfo_success("Xcode中applovin数据修改完成!")
|
|
152
|
-
|
|
153
|
-
if @args_install_flag && !xcodeproj_file_name.nil? && File.exist?(xcodeproj_file_name)
|
|
154
|
-
|
|
155
|
-
pindo_common_dir = pindo_single_config.pindo_common_configdir
|
|
156
|
-
|
|
157
|
-
app_lovin_script = File.join(pindo_common_dir, "AppLovinQualityServiceSetup-ios-dev.rb")
|
|
158
|
-
if @args_appstore_flag
|
|
159
|
-
app_lovin_script = File.join(pindo_common_dir, "AppLovinQualityServiceSetup-ios.rb")
|
|
160
|
-
end
|
|
161
|
-
|
|
162
|
-
project_script_file = File.join(project_root_dir, "AppLovinQualityServiceSetup-ios.rb")
|
|
163
|
-
FileUtils.cp_r(app_lovin_script, project_script_file)
|
|
164
|
-
command = "ruby " + project_script_file
|
|
165
|
-
# puts command
|
|
166
|
-
system command
|
|
167
|
-
end
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
def get_applovin_infoplist(project_dir:nil, proj_name:nil)
|
|
174
|
-
|
|
175
|
-
info_plist_path = File.join(project_dir, "AppEntry/Info.plist")
|
|
176
|
-
proj_fullname = File.join(project_dir, proj_name) + ".xcodeproj"
|
|
177
|
-
if File.exist?(proj_fullname)
|
|
178
|
-
project_obj = Xcodeproj::Project.open(proj_fullname)
|
|
179
|
-
project_obj.targets.each do |target|
|
|
180
63
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
end
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
def req_applovin_json
|
|
193
|
-
|
|
194
|
-
begin
|
|
195
|
-
# https://dash.applovin.com/docs/v1/skadnetwork_ids.json
|
|
196
|
-
applovin_url = "https://dash.applovin.com/docs/v1/skadnetwork_ids.json"
|
|
197
|
-
con = Faraday.new
|
|
198
|
-
res = con.get do |req|
|
|
199
|
-
req.url applovin_url
|
|
200
|
-
req.headers['Content-Type'] = 'application/json'
|
|
201
|
-
end
|
|
202
|
-
|
|
203
|
-
applovin_res_json = JSON.parse(res.body)
|
|
204
|
-
|
|
205
|
-
return applovin_res_json
|
|
206
|
-
rescue Exception => e
|
|
207
|
-
return nil
|
|
208
|
-
end
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
end
|
|
213
|
-
|
|
214
|
-
def req_applovin_mediia_json
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
begin
|
|
218
|
-
applovin_url = "https://dash.applovin.com/docs/v1/mediation_sk_adnetwork_ids"
|
|
219
|
-
con = Faraday.new
|
|
220
|
-
res = con.get do |req|
|
|
221
|
-
req.url applovin_url
|
|
222
|
-
req.headers['Content-Type'] = 'application/json'
|
|
223
|
-
end
|
|
224
|
-
|
|
225
|
-
applovin_res_json = JSON.parse(res.body)
|
|
226
|
-
return applovin_res_json
|
|
227
|
-
rescue Exception => e
|
|
228
|
-
return nil
|
|
229
|
-
end
|
|
64
|
+
def run
|
|
65
|
+
# 使用 ApplovinXcodeHelper 执行更新操作
|
|
66
|
+
Pindo::ApplovinXcodeHelper.update_applovin_config(
|
|
67
|
+
project_dir: Dir.pwd,
|
|
68
|
+
appstore_mode: @args_appstore_flag,
|
|
69
|
+
install_script: @args_install_flag,
|
|
70
|
+
upload_config: @args_upload_flag
|
|
71
|
+
)
|
|
230
72
|
end
|
|
231
73
|
|
|
232
74
|
end
|
|
@@ -12,15 +12,15 @@ require 'pindo/module/task/task_manager'
|
|
|
12
12
|
require 'pindo/module/task/model/git_tag_task'
|
|
13
13
|
require 'pindo/module/task/model/unity_export_task'
|
|
14
14
|
require 'pindo/module/task/model/build_task'
|
|
15
|
-
require 'pindo/module/task/model/
|
|
15
|
+
require 'pindo/module/task/model/jps_upload_task'
|
|
16
|
+
require 'pindo/options/options'
|
|
17
|
+
require 'pindo/options/helpers/bundleid_selector'
|
|
16
18
|
|
|
17
19
|
module Pindo
|
|
18
20
|
class Command
|
|
19
21
|
class Ios < Command
|
|
20
22
|
class Autobuild < Ios
|
|
21
23
|
|
|
22
|
-
include Appselect
|
|
23
|
-
include Pindo::Githelper
|
|
24
24
|
# 命令的简要说明 - 打包iOS工程并发布到JPS
|
|
25
25
|
self.summary = '编译IPA(支持Xcode/Unity工程),自动修改工程,支持上传JPS'
|
|
26
26
|
|
|
@@ -65,30 +65,48 @@ module Pindo
|
|
|
65
65
|
# 暂无参数
|
|
66
66
|
]
|
|
67
67
|
|
|
68
|
+
# 定义此命令使用的参数项(类方法,避免重复定义)
|
|
69
|
+
def self.option_items
|
|
70
|
+
@option_items ||= begin
|
|
71
|
+
items = Pindo::Options::OptionGroup.merge(
|
|
72
|
+
Pindo::Options::BuildOptions.select(:bundleid, :build_type),
|
|
73
|
+
Pindo::Options::JPSOptions.select(:proj, :upload, :send)
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
# 为 bundleid 参数添加 value_block(交互式选择)
|
|
77
|
+
bundleid_item = items.find { |item| item.key == :bundleid }
|
|
78
|
+
if bundleid_item
|
|
79
|
+
bundleid_item.value_block = proc do |command_instance|
|
|
80
|
+
# 根据构建类型选择不同的 Bundle ID
|
|
81
|
+
build_type = command_instance.instance_variable_get(:@build_type) || 'dev'
|
|
82
|
+
Pindo::Options::BundleIdSelector.select_bundleid(build_type)
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
items
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
68
90
|
# 命令的选项列表
|
|
69
91
|
def self.options
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
['--proj=NAME', '指定上传到测试平台的项目名称'],
|
|
73
|
-
['--upload', '编译后上传到测试平台(上传成功后自动发送给自己)'],
|
|
74
|
-
['--send', '发送通知到测试群组(同时也会发送给自己)'],
|
|
75
|
-
['--adhoc', '使用AdHoc证书打包(默认使用Dev证书)'],
|
|
76
|
-
['--deploy', '使用发布证书打包']
|
|
77
|
-
].concat(super)
|
|
92
|
+
# 转换为 CLAide 格式
|
|
93
|
+
option_items.map { |item| item.to_claide_option }.concat(super)
|
|
78
94
|
end
|
|
79
95
|
|
|
80
96
|
def initialize(argv)
|
|
97
|
+
# 先提取 build_type(因为 bundleid 的 value_block 需要用到它)
|
|
98
|
+
@build_type = argv.option('build_type', 'dev')
|
|
81
99
|
|
|
82
|
-
|
|
83
|
-
@
|
|
84
|
-
@args_upload_flag = argv.flag?('upload', false)
|
|
85
|
-
@args_send_flag = argv.flag?('send', false)
|
|
86
|
-
@args_proj_name = argv.option('proj')
|
|
87
|
-
@args_bundle_id = argv.option('bundleid')
|
|
100
|
+
# 一行代码完成参数初始化(自动推导命令名、自动启用缓存)
|
|
101
|
+
@options = initialize_options(argv)
|
|
88
102
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
103
|
+
# 保存参数到实例变量
|
|
104
|
+
@build_type = @options[:build_type] || @build_type # 使用 options 中的值,如果没有则用之前提取的
|
|
105
|
+
@args_send_flag = @options[:send]
|
|
106
|
+
# send 依赖 upload:如果指定了 send,自动启用 upload
|
|
107
|
+
@args_upload_flag = @options[:send] || @options[:upload]
|
|
108
|
+
@args_proj_name = @options[:proj]
|
|
109
|
+
@args_bundle_id = @options[:bundleid]
|
|
92
110
|
|
|
93
111
|
super
|
|
94
112
|
@additional_args = argv.remainder!
|
|
@@ -102,25 +120,31 @@ module Pindo
|
|
|
102
120
|
def run
|
|
103
121
|
pindo_project_dir = Dir.pwd
|
|
104
122
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
context.confirm_and_apply_cache
|
|
123
|
+
begin
|
|
124
|
+
# 加载 JPS 配置(如果存在)
|
|
125
|
+
context = Pindo::PindoContext.instance
|
|
126
|
+
context.load_and_apply_jps_config(pindo_project_dir)
|
|
110
127
|
|
|
111
|
-
|
|
112
|
-
|
|
128
|
+
# 注意:参数缓存已在 initialize 中通过 GlobalOptionsState 处理
|
|
129
|
+
# 不再使用 PindoContext 的缓存机制
|
|
113
130
|
|
|
114
|
-
|
|
115
|
-
|
|
131
|
+
# 准备配置
|
|
132
|
+
config = prepare_ios_config(pindo_project_dir)
|
|
116
133
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
task_manager.clear_all
|
|
120
|
-
tasks.each { |task| task_manager.add_task(task) }
|
|
121
|
-
task_manager.start
|
|
134
|
+
# 创建并执行任务
|
|
135
|
+
tasks = make_build_task(config)
|
|
122
136
|
|
|
123
|
-
|
|
137
|
+
# 添加到任务管理器并执行
|
|
138
|
+
task_manager = Pindo::TaskSystem::TaskManager.instance
|
|
139
|
+
task_manager.clear_all
|
|
140
|
+
tasks.each { |task| task_manager.add_task(task) }
|
|
141
|
+
task_manager.start
|
|
142
|
+
|
|
143
|
+
system "open #{pindo_project_dir}"
|
|
144
|
+
ensure
|
|
145
|
+
# 清除命令状态(如果启用了缓存,这里会自动保存)
|
|
146
|
+
Pindo::Options::GlobalOptionsState.instance.clear
|
|
147
|
+
end
|
|
124
148
|
end
|
|
125
149
|
|
|
126
150
|
private
|
|
@@ -158,6 +182,7 @@ module Pindo
|
|
|
158
182
|
'ios',
|
|
159
183
|
project_path: config[:project_path],
|
|
160
184
|
export_path: ios_export_path,
|
|
185
|
+
deploy_mode: @build_type, # 根据 build_type 传递部署模式
|
|
161
186
|
context: unity_context
|
|
162
187
|
)
|
|
163
188
|
unity_task.dependencies << git_tag_task.id
|
|
@@ -165,7 +190,7 @@ module Pindo
|
|
|
165
190
|
end
|
|
166
191
|
|
|
167
192
|
# 3. 构建任务
|
|
168
|
-
build_mode = @
|
|
193
|
+
build_mode = @build_type.to_sym
|
|
169
194
|
|
|
170
195
|
# 确定 iOS 项目路径
|
|
171
196
|
if is_unity
|
|
@@ -195,7 +220,7 @@ module Pindo
|
|
|
195
220
|
|
|
196
221
|
# 4. 上传任务(如果需要)
|
|
197
222
|
if @args_upload_flag
|
|
198
|
-
upload_task = Pindo::TaskSystem::
|
|
223
|
+
upload_task = Pindo::TaskSystem::JPSUploadTask.new(
|
|
199
224
|
'ipa',
|
|
200
225
|
File.join(ios_project_path, 'build'),
|
|
201
226
|
nil,
|
|
@@ -218,12 +243,8 @@ module Pindo
|
|
|
218
243
|
|
|
219
244
|
# 准备 iOS 配置
|
|
220
245
|
def prepare_ios_config(pindo_project_dir)
|
|
221
|
-
#
|
|
222
|
-
bundle_id =
|
|
223
|
-
@args_bundle_id
|
|
224
|
-
else
|
|
225
|
-
@args_deploy_flag ? get_selected_deploy_bundleid() : get_selected_dev_bundleid()
|
|
226
|
-
end
|
|
246
|
+
# Bundle ID 已经通过 value_block 自动获取
|
|
247
|
+
bundle_id = @args_bundle_id
|
|
227
248
|
|
|
228
249
|
# 获取 JPS 配置
|
|
229
250
|
app_info_obj, workflow_info = PgyerHelper.share_instace.prepare_upload(
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
require 'highline/import'
|
|
2
2
|
require 'xcodeproj'
|
|
3
|
-
require 'find'
|
|
3
|
+
require 'find'
|
|
4
4
|
require 'fileutils'
|
|
5
5
|
require 'pindo/base/executable'
|
|
6
|
+
require 'pindo/config/ios_config_parser'
|
|
7
|
+
require 'pindo/module/xcode/ipa_resign_helper'
|
|
6
8
|
|
|
7
9
|
module Pindo
|
|
8
10
|
class Command
|
|
@@ -109,10 +111,12 @@ module Pindo
|
|
|
109
111
|
end
|
|
110
112
|
puts "mainapp_bundleid: #{mainapp_bundleid}"
|
|
111
113
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
# 拉取应用配置
|
|
115
|
+
require 'pindo/config/build_info_manager'
|
|
116
|
+
Pindo::BuildInfoManager.share_instance.pull_appconfig_with_reponame(
|
|
117
|
+
repo_name: mainapp_bundleid,
|
|
118
|
+
target_dir: Dir.pwd
|
|
119
|
+
)
|
|
116
120
|
|
|
117
121
|
app_info_obj = nil
|
|
118
122
|
workflow_info = nil
|
|
@@ -126,23 +130,34 @@ module Pindo
|
|
|
126
130
|
)
|
|
127
131
|
end
|
|
128
132
|
|
|
129
|
-
args_temp = []
|
|
130
|
-
if @args_adhoc_flag
|
|
131
|
-
args_temp << "--adhoc"
|
|
132
|
-
else
|
|
133
|
-
args_temp << "--dev"
|
|
134
|
-
end
|
|
135
|
-
|
|
136
133
|
if !ipa_file_name.nil?
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
Pindo::
|
|
134
|
+
# 加载配置获取 Bundle ID
|
|
135
|
+
config_file = File.join(Dir.pwd, "config.json")
|
|
136
|
+
config_parser = Pindo::IosConfigParser.instance
|
|
137
|
+
config_parser.load_config(config_file: config_file)
|
|
138
|
+
bundle_id = config_parser.bundle_id
|
|
139
|
+
|
|
140
|
+
if bundle_id.nil? || bundle_id.empty?
|
|
141
|
+
raise Informative, "无法从配置文件中获取 Bundle ID"
|
|
142
|
+
end
|
|
140
143
|
|
|
144
|
+
# 确定构建类型并安装证书
|
|
145
|
+
build_type = @args_adhoc_flag ? 'adhoc' : 'dev'
|
|
146
|
+
cert_args = build_type == 'adhoc' ? ['--build_type=adhoc'] : []
|
|
147
|
+
Pindo::Command::Appstore::Cert::run(cert_args)
|
|
148
|
+
|
|
149
|
+
# 使用 IpaResignHelper 进行重签名
|
|
150
|
+
ipa_file_upload = Pindo::IpaResignHelper.resign_ipa(
|
|
151
|
+
ipa_file_path: ipa_file_name,
|
|
152
|
+
bundle_id: bundle_id
|
|
153
|
+
)
|
|
154
|
+
|
|
155
|
+
if ipa_file_upload.nil?
|
|
156
|
+
raise Informative, "重签名失败"
|
|
157
|
+
end
|
|
141
158
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
ipa_dir = File.dirname(ipa_file_name)
|
|
145
|
-
ipa_file_upload = File.join(ipa_dir, ipa_base_name + "_resigned.ipa")
|
|
159
|
+
puts "\n重签名成功!"
|
|
160
|
+
puts "重签名后的 IPA: #{ipa_file_upload}"
|
|
146
161
|
|
|
147
162
|
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
148
163
|
result_data = PgyerHelper.share_instace.start_upload(
|
|
@@ -159,13 +159,16 @@ module Pindo
|
|
|
159
159
|
end
|
|
160
160
|
|
|
161
161
|
|
|
162
|
-
|
|
163
|
-
Pindo::Command::Deploy::Build::run(args_temp)
|
|
164
|
-
|
|
165
|
-
|
|
162
|
+
# 使用 XcodeBuildHelper 进行构建
|
|
166
163
|
Dir.chdir(pindo_project_dir)
|
|
167
|
-
|
|
168
|
-
|
|
164
|
+
ipa_file_upload = Pindo::XcodeBuildHelper.build_project(
|
|
165
|
+
project_dir: pindo_project_dir,
|
|
166
|
+
icloud_id: nil
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
if ipa_file_upload.nil?
|
|
170
|
+
raise Informative, "构建失败:未生成 IPA 文件"
|
|
171
|
+
end
|
|
169
172
|
|
|
170
173
|
if !ipa_file_upload.nil? && !app_info_obj.nil?
|
|
171
174
|
|
|
@@ -6,8 +6,6 @@ module Pindo
|
|
|
6
6
|
class Cert < Ios
|
|
7
7
|
|
|
8
8
|
include Appselect
|
|
9
|
-
|
|
10
|
-
include XcodeCertHelper
|
|
11
9
|
|
|
12
10
|
# 命令的简要说明 - 更新证书并设置工程
|
|
13
11
|
self.summary = '更新证书并使用新证书设置Xcode工程'
|
|
@@ -68,28 +66,31 @@ module Pindo
|
|
|
68
66
|
mainapp_bundleid = get_selected_dev_bundleid()
|
|
69
67
|
end
|
|
70
68
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
Pindo::
|
|
74
|
-
|
|
69
|
+
# 拉取应用配置
|
|
70
|
+
require 'pindo/config/build_info_manager'
|
|
71
|
+
Pindo::BuildInfoManager.share_instance.pull_appconfig_with_reponame(
|
|
72
|
+
repo_name: mainapp_bundleid,
|
|
73
|
+
target_dir: Dir.pwd
|
|
74
|
+
)
|
|
75
75
|
|
|
76
76
|
project_dir = Dir.pwd
|
|
77
77
|
Dir.chdir(project_dir)
|
|
78
|
-
config_json_file = File.join(project_dir,"config.json")
|
|
79
|
-
# 处理entitlements配置
|
|
80
|
-
Pindo::XcodeBuildConfig.update_entitlements_config(project_dir: project_dir, config_file: config_json_file)
|
|
81
78
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
args_temp << "--dev"
|
|
87
|
-
end
|
|
79
|
+
# 加载配置到 IosConfigParser
|
|
80
|
+
require 'pindo/config/ios_config_parser'
|
|
81
|
+
config_json_file = File.join(project_dir, "config.json")
|
|
82
|
+
Pindo::IosConfigParser.instance.load_config(config_file: config_json_file)
|
|
88
83
|
|
|
84
|
+
# 处理entitlements配置
|
|
85
|
+
Pindo::XcodeBuildConfig.update_entitlements_config(project_dir: project_dir)
|
|
89
86
|
|
|
87
|
+
# 确定构建类型
|
|
88
|
+
build_type = @args_adhoc_flag ? 'adhoc' : 'dev'
|
|
90
89
|
|
|
90
|
+
# 检测平台类型
|
|
91
91
|
project_fullname = Dir.glob(File.join(project_dir, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
|
|
92
92
|
if !project_fullname.nil?
|
|
93
|
+
require 'xcodeproj'
|
|
93
94
|
project_obj = Xcodeproj::Project.open(project_fullname)
|
|
94
95
|
project_build_platform = project_obj.root_object.build_configuration_list.get_setting("SDKROOT")["Release"]
|
|
95
96
|
if !project_build_platform.nil? && project_build_platform.eql?("macosx")
|
|
@@ -97,12 +98,18 @@ module Pindo
|
|
|
97
98
|
end
|
|
98
99
|
end
|
|
99
100
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
101
|
+
platform_type = @args_macos_flag ? 'macos' : 'ios'
|
|
102
|
+
|
|
103
|
+
# 直接调用 XcodeCertHelper 安装和配置证书
|
|
104
|
+
# 配置已经加载到 IosConfigParser,不需要再传 config_file
|
|
105
|
+
require 'pindo/module/cert/xcode_cert_helper'
|
|
106
|
+
Pindo::XcodeCertHelper.install_and_config_certs(
|
|
107
|
+
build_type: build_type,
|
|
108
|
+
platform_type: platform_type,
|
|
109
|
+
project_dir: project_dir
|
|
110
|
+
)
|
|
105
111
|
|
|
112
|
+
puts "✓ 证书安装和配置完成!"
|
|
106
113
|
end
|
|
107
114
|
|
|
108
115
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'highline/import'
|
|
2
2
|
require 'fileutils'
|
|
3
3
|
require 'json'
|
|
4
|
+
require 'pindo/module/xcode/cocoapods_helper'
|
|
4
5
|
|
|
5
6
|
module Pindo
|
|
6
7
|
class Command
|
|
@@ -52,43 +53,11 @@ module Pindo
|
|
|
52
53
|
end
|
|
53
54
|
|
|
54
55
|
def run
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
if !pod_array.nil?
|
|
61
|
-
pod_index_url = pod_array['podindex']
|
|
62
|
-
else
|
|
63
|
-
raise Informative, '私有Pod索引地址未知!!'
|
|
64
|
-
end
|
|
65
|
-
sources = Pod::Config.instance.sources_manager.all
|
|
66
|
-
repos_path = File.expand_path("~/.cocoapods/repos")
|
|
67
|
-
|
|
68
|
-
private_source = sources.select { |s| s.git? && s.url.to_s.eql?(pod_index_url)}.first
|
|
69
|
-
if !private_source.nil?
|
|
70
|
-
|
|
71
|
-
puts "私有Pod地址:#{pod_index_url}"
|
|
72
|
-
puts "私有Pod目录:~/.cocoapods"
|
|
73
|
-
getcode_to_dir(reponame:File.basename(private_source.repo), remote_url: pod_index_url, path:repos_path)
|
|
74
|
-
else
|
|
75
|
-
puts "私有Pod地址:#{pod_index_url}"
|
|
76
|
-
puts "私有Pod目录:~/.cocoapods"
|
|
77
|
-
repository_name = pod_index_url.split("/").last.chomp(".git")
|
|
78
|
-
getcode_to_dir(reponame:repository_name, remote_url: pod_index_url, path:repos_path)
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
if @args_install_flag
|
|
83
|
-
begin
|
|
84
|
-
if File.exist?("#{working_dir}/Podfile")
|
|
85
|
-
Pod::Command::Install::run(['--clean-install'])
|
|
86
|
-
end
|
|
87
|
-
rescue => e
|
|
88
|
-
puts e.message
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
56
|
+
# 使用 CocoaPodsHelper 执行更新操作
|
|
57
|
+
Pindo::CocoaPodsHelper.update_pod_repo(
|
|
58
|
+
install: @args_install_flag,
|
|
59
|
+
project_dir: @project_dir
|
|
60
|
+
)
|
|
92
61
|
end
|
|
93
62
|
|
|
94
63
|
|