pindo 5.13.2 → 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/command/appstore/adhocbuild.rb +14 -16
- data/lib/pindo/command/ios/applovin.rb +24 -182
- data/lib/pindo/command/ios/podupdate.rb +6 -37
- 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: 4985e418b092d6dbb035fa1ce8cea6b16daa932f99ca3788c36a9f03a3add641
|
|
4
|
+
data.tar.gz: e676532527b67557b27e1998245e1f58ba13e95caeebf5d1a5d9368707814f3d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6418c40a1cd24fda9a9867f6f93d9a86ee270b6589f87a468975be3baf322f85572a3d7f0e682e69e280c15368b7500b11dc650efea126d8531c7b317c30a57d
|
|
7
|
+
data.tar.gz: 3d926ca53744d46acf95cfcc1ab813ef831d2e9f3cfc5a44de9c936b4c9981830ce59985c459a96b797a89384bd257ff39f281af6b0fe74d98d908f866ffcc0d
|
|
@@ -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
|
|
@@ -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
|
|
|
@@ -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)}
|