pindo 5.13.2 → 5.13.4
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/appstore/adhocbuild.rb +14 -16
- data/lib/pindo/command/ios/applovin.rb +24 -182
- data/lib/pindo/command/ios/autobuild.rb +42 -0
- data/lib/pindo/command/ios/podupdate.rb +6 -37
- data/lib/pindo/command/unity/autobuild.rb +45 -0
- data/lib/pindo/module/cert/xcode_cert_helper.rb +7 -4
- data/lib/pindo/module/pgyer/pgyerhelper.rb +13 -5
- data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +219 -74
- data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +78 -104
- data/lib/pindo/module/task/model/build/ios_build_dev_task.rb +17 -46
- data/lib/pindo/module/task/model/build/ios_build_task.rb +12 -2
- 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/xcode_app_config.rb +1 -1
- data/lib/pindo/module/xcode/xcode_swark_helper.rb +5 -5
- data/lib/pindo/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7b8f4e3397e7d22aee8dd0011d92a8eec9c7cfb8b51b3676a78e518b27c71b25
|
|
4
|
+
data.tar.gz: e8eca26bbd129b1f561d09462f5dde5bedf5059172c711ec01da98427a19f446
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2b6e7699071cd70dff2f482105dd93dd3168a962a59b7b477ad4a359f191c0021612ae993d00a024dcf7f38dcd6875a39ef4670131a3c8948038d81d38dbc56c
|
|
7
|
+
data.tar.gz: 20fa09db784a2894e3bc9119f9917a4431031e68fc365b3e77dff1e650b599bfcac8fc5b4914f2e3e87add02ffeec4319c815855fe9e0f77aa1da10288513e87
|
|
@@ -251,22 +251,20 @@ module Pindo
|
|
|
251
251
|
build_task.dependencies << tasks.last.id if tasks.any?
|
|
252
252
|
tasks << build_task
|
|
253
253
|
|
|
254
|
-
# 3.
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
tasks << upload_task
|
|
269
|
-
end
|
|
254
|
+
# 3. 上传任务(总是添加)
|
|
255
|
+
upload_task = Pindo::TaskSystem::JPSUploadTask.new(
|
|
256
|
+
'ipa',
|
|
257
|
+
File.join(ios_project_path, 'build'),
|
|
258
|
+
nil,
|
|
259
|
+
app_info_obj: config[:app_info_obj],
|
|
260
|
+
workflow_info: config[:workflow_info],
|
|
261
|
+
project_name: @args_proj_name,
|
|
262
|
+
context: {
|
|
263
|
+
send_to_chat: @args_send_flag
|
|
264
|
+
},
|
|
265
|
+
dependencies: [build_task.id]
|
|
266
|
+
)
|
|
267
|
+
tasks << upload_task
|
|
270
268
|
|
|
271
269
|
tasks
|
|
272
270
|
else
|
|
@@ -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
|
|
@@ -15,6 +15,8 @@ require 'pindo/module/task/model/build_task'
|
|
|
15
15
|
require 'pindo/module/task/model/jps_upload_task'
|
|
16
16
|
require 'pindo/options/options'
|
|
17
17
|
require 'pindo/options/helpers/bundleid_selector'
|
|
18
|
+
require 'pindo/config/build_info_manager'
|
|
19
|
+
require 'pindo/config/ios_config_parser'
|
|
18
20
|
|
|
19
21
|
module Pindo
|
|
20
22
|
class Command
|
|
@@ -246,6 +248,9 @@ module Pindo
|
|
|
246
248
|
# Bundle ID 已经通过 value_block 自动获取
|
|
247
249
|
bundle_id = @args_bundle_id
|
|
248
250
|
|
|
251
|
+
# 拉取并加载配置文件到 IosConfigParser
|
|
252
|
+
load_config_file(pindo_project_dir, bundle_id)
|
|
253
|
+
|
|
249
254
|
# 获取 JPS 配置
|
|
250
255
|
app_info_obj, workflow_info = PgyerHelper.share_instace.prepare_upload(
|
|
251
256
|
working_directory: pindo_project_dir,
|
|
@@ -261,6 +266,43 @@ module Pindo
|
|
|
261
266
|
}
|
|
262
267
|
end
|
|
263
268
|
|
|
269
|
+
# 拉取并加载配置文件
|
|
270
|
+
def load_config_file(project_dir, bundle_id)
|
|
271
|
+
if bundle_id && !bundle_id.empty?
|
|
272
|
+
# 如果指定了 Bundle ID,拉取配置
|
|
273
|
+
puts "\n拉取 Bundle ID 配置: #{bundle_id}"
|
|
274
|
+
|
|
275
|
+
build_info_manager = Pindo::BuildInfoManager.share_instance
|
|
276
|
+
success = build_info_manager.pull_appconfig_with_reponame(
|
|
277
|
+
repo_name: bundle_id,
|
|
278
|
+
target_dir: project_dir
|
|
279
|
+
)
|
|
280
|
+
|
|
281
|
+
unless success
|
|
282
|
+
raise Informative, "拉取配置失败: #{bundle_id}"
|
|
283
|
+
end
|
|
284
|
+
|
|
285
|
+
# 加载拉取的配置到 IosConfigParser
|
|
286
|
+
config_file = File.join(project_dir, "config.json")
|
|
287
|
+
if File.exist?(config_file)
|
|
288
|
+
puts " ✓ 加载配置文件: #{config_file}"
|
|
289
|
+
Pindo::IosConfigParser.instance.load_config(config_file: config_file)
|
|
290
|
+
else
|
|
291
|
+
raise Informative, "配置文件不存在: #{config_file}"
|
|
292
|
+
end
|
|
293
|
+
else
|
|
294
|
+
# 如果没有指定 Bundle ID,使用当前目录的 config.json
|
|
295
|
+
config_file = File.join(project_dir, "config.json")
|
|
296
|
+
|
|
297
|
+
if File.exist?(config_file)
|
|
298
|
+
puts "\n使用当前目录配置文件: #{config_file}"
|
|
299
|
+
Pindo::IosConfigParser.instance.load_config(config_file: config_file)
|
|
300
|
+
else
|
|
301
|
+
raise Informative, "当前目录未找到 config.json 文件,请使用 --bundleid 参数指定 Bundle ID"
|
|
302
|
+
end
|
|
303
|
+
end
|
|
304
|
+
end
|
|
305
|
+
|
|
264
306
|
end
|
|
265
307
|
end
|
|
266
308
|
end
|
|
@@ -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
|
|
|
@@ -12,6 +12,8 @@ require 'pindo/module/task/model/build_task'
|
|
|
12
12
|
require 'pindo/module/task/model/unity_export_task'
|
|
13
13
|
require 'pindo/module/task/model/jps_upload_task'
|
|
14
14
|
require 'pindo/module/task/model/git_tag_task'
|
|
15
|
+
require 'pindo/config/build_info_manager'
|
|
16
|
+
require 'pindo/config/ios_config_parser'
|
|
15
17
|
|
|
16
18
|
module Pindo
|
|
17
19
|
class Command
|
|
@@ -393,6 +395,9 @@ module Pindo
|
|
|
393
395
|
end
|
|
394
396
|
puts " Bundle ID: #{platform_config["bundle_id"]}"
|
|
395
397
|
|
|
398
|
+
# 拉取并加载 iOS 配置文件
|
|
399
|
+
prepare_ios_config(platform_config["bundle_id"])
|
|
400
|
+
|
|
396
401
|
when 'android'
|
|
397
402
|
# 获取 Android Package Name
|
|
398
403
|
if @args_bundle_name
|
|
@@ -420,6 +425,46 @@ module Pindo
|
|
|
420
425
|
|
|
421
426
|
private
|
|
422
427
|
|
|
428
|
+
# 准备 iOS 配置文件
|
|
429
|
+
# 参考 appstore autobuild 的 prepare_config 方法
|
|
430
|
+
def prepare_ios_config(bundle_id)
|
|
431
|
+
pindo_project_dir = Dir.pwd
|
|
432
|
+
|
|
433
|
+
if bundle_id && !bundle_id.empty?
|
|
434
|
+
# 拉取配置到 Unity 根目录
|
|
435
|
+
puts "\n拉取 iOS Bundle ID 配置: #{bundle_id}"
|
|
436
|
+
|
|
437
|
+
build_info_manager = Pindo::BuildInfoManager.share_instance
|
|
438
|
+
success = build_info_manager.pull_appconfig_with_reponame(
|
|
439
|
+
repo_name: bundle_id,
|
|
440
|
+
target_dir: pindo_project_dir
|
|
441
|
+
)
|
|
442
|
+
|
|
443
|
+
unless success
|
|
444
|
+
raise Informative, "拉取 iOS 配置失败: #{bundle_id}"
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
# 加载拉取的配置到 IosConfigParser
|
|
448
|
+
config_file = File.join(pindo_project_dir, "config.json")
|
|
449
|
+
if File.exist?(config_file)
|
|
450
|
+
puts " ✓ 加载配置文件: #{config_file}"
|
|
451
|
+
Pindo::IosConfigParser.instance.load_config(config_file: config_file)
|
|
452
|
+
else
|
|
453
|
+
raise Informative, "配置文件不存在: #{config_file}"
|
|
454
|
+
end
|
|
455
|
+
else
|
|
456
|
+
# 如果没有指定 Bundle ID,使用当前目录的 config.json
|
|
457
|
+
config_file = File.join(pindo_project_dir, "config.json")
|
|
458
|
+
|
|
459
|
+
if File.exist?(config_file)
|
|
460
|
+
puts "\n使用当前目录配置文件: #{config_file}"
|
|
461
|
+
Pindo::IosConfigParser.instance.load_config(config_file: config_file)
|
|
462
|
+
else
|
|
463
|
+
raise Informative, "当前目录未找到 config.json 文件,请使用 --bundleid 参数指定 Bundle ID"
|
|
464
|
+
end
|
|
465
|
+
end
|
|
466
|
+
end
|
|
467
|
+
|
|
423
468
|
# 获取 WebGL 包序号
|
|
424
469
|
def fetch_webgl_index_no(app_info_obj:, workflow_info:)
|
|
425
470
|
index_count = -1
|
|
@@ -28,7 +28,7 @@ module Pindo
|
|
|
28
28
|
# @param build_type [String, Symbol] 构建类型 ('dev', 'adhoc', 'release' 或 'development', 'adhoc', 'appstore')
|
|
29
29
|
# @param platform_type [String] 平台类型 ('ios', 'macos')
|
|
30
30
|
# @param project_dir [String] 项目目录
|
|
31
|
-
# @param config_file [String, nil]
|
|
31
|
+
# @param config_file [String, nil] 配置文件路径(可选,仅当单例未加载时使用)
|
|
32
32
|
# @param skip_xcode_config [Boolean] 是否跳过 Xcode 配置
|
|
33
33
|
# @return [Hash] 返回证书信息 { provisioning_info_array:, team_id: }
|
|
34
34
|
def install_and_config_certs(
|
|
@@ -41,11 +41,14 @@ module Pindo
|
|
|
41
41
|
# 标准化构建类型
|
|
42
42
|
cert_type = normalize_build_type(build_type)
|
|
43
43
|
|
|
44
|
-
#
|
|
44
|
+
# 使用 IosConfigParser 单例(应该已经在命令层加载)
|
|
45
45
|
require 'pindo/config/ios_config_parser'
|
|
46
46
|
config_parser = Pindo::IosConfigParser.instance
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
|
|
48
|
+
# 检查配置是否已加载
|
|
49
|
+
if config_parser.config_json.nil?
|
|
50
|
+
raise Informative, "install_and_config_certs 函数中, 配置未加载config.json"
|
|
51
|
+
end
|
|
49
52
|
|
|
50
53
|
apple_id = config_parser.apple_id
|
|
51
54
|
bundle_id_map = config_parser.get_bundle_id_map
|
|
@@ -313,12 +313,20 @@ module Pindo
|
|
|
313
313
|
|
|
314
314
|
proj_name_array_append = []
|
|
315
315
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
316
|
+
# 尝试从 IosConfigParser 单例获取项目名称
|
|
317
|
+
begin
|
|
318
|
+
require 'pindo/config/ios_config_parser'
|
|
319
|
+
config_parser = Pindo::IosConfigParser.instance
|
|
320
|
+
|
|
321
|
+
# 如果单例中有配置,使用配置中的项目名称
|
|
322
|
+
if !config_parser.config_json.nil?
|
|
323
|
+
new_proj_string = config_parser.config_json.dig("project_info", "project_name")
|
|
324
|
+
if !new_proj_string.nil? && !new_proj_string.empty?
|
|
325
|
+
proj_name_array_append << new_proj_string
|
|
326
|
+
end
|
|
321
327
|
end
|
|
328
|
+
rescue => e
|
|
329
|
+
# 忽略错误,继续使用其他方式获取项目名称
|
|
322
330
|
end
|
|
323
331
|
|
|
324
332
|
xcodeproj_file_name = Dir.glob(File.join(Dir.pwd, "/*.xcodeproj")).max_by {|f| File.mtime(f)}
|