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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: efb0e602f3e0c11eca368669749cfc80c51854a3d7563dfe7d2a66e639507c12
4
- data.tar.gz: 77df00465e5213f16b11241564184a969a43d49385476930a395524a5cf55764
3
+ metadata.gz: 4985e418b092d6dbb035fa1ce8cea6b16daa932f99ca3788c36a9f03a3add641
4
+ data.tar.gz: e676532527b67557b27e1998245e1f58ba13e95caeebf5d1a5d9368707814f3d
5
5
  SHA512:
6
- metadata.gz: c3c3826097cdf84681875828afe7c41af58c5422b9371ea7b23ebb994de3131b04d851099abcd91b548356f227422b67800a5fdb599ba9d863a733d5a3662618
7
- data.tar.gz: 4b9275fe85f02ea8438367de51f950dbef8c9ab794d9a541844e4ec7875093e7c89ff0e173fe01dbc087a28ac416c5a1795941dacc22044ef4308544e9587268
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
- if @args_upload_flag
256
- upload_task = Pindo::TaskSystem::JPSUploadTask.new(
257
- 'ipa',
258
- File.join(ios_project_path, 'build'),
259
- nil,
260
- app_info_obj: config[:app_info_obj],
261
- workflow_info: config[:workflow_info],
262
- project_name: @args_proj_name,
263
- context: {
264
- send_to_chat: @args_send_flag
265
- },
266
- dependencies: [build_task.id]
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
- if target.product_type.to_s.eql?("com.apple.product-type.application") then
182
- temp_info = target.build_configurations.first.build_settings['INFOPLIST_FILE']
183
- info_plist_path = File.join(project_dir, temp_info)
184
- end
185
- end
186
- end
187
-
188
- return info_plist_path
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
- working_dir = @project_dir
57
-
58
- pod_array = pindo_single_config.pod_repo_dict
59
- pod_index_url = nil
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] 配置文件路径(可选,默认从 project_dir 加载)
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
- config_path = config_file || File.join(project_dir, 'config.json')
48
- config_parser.load_config(config_file: config_path)
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
- if File.exist?(File.join(working_directory, "config.json"))
317
- config_json = JSON.parse(File.read(File.join(working_directory, "config.json")))
318
- new_proj_string = config_json["project_info"]["project_name"]
319
- if !new_proj_string.nil? && !new_proj_string.empty?
320
- proj_name_array_append << config_json["project_info"]["project_name"]
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)}