cocoapods-byte-panglem-beta 0.0.1

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.
@@ -0,0 +1,203 @@
1
+ ##Copyright 2023 ByteDance Ltd. and/or its affiliates
2
+ ##SPDX-License-Identifier: MIT
3
+
4
+ require 'cocoapods'
5
+ require 'singleton'
6
+ require 'cocoapods-byte-panglem-beta/gem_version'
7
+ require 'digest'
8
+ require "thread"
9
+
10
+ require_relative 'net'
11
+ require_relative 'config'
12
+ require_relative 'tool'
13
+ require_relative 'analyzer'
14
+ require_relative 'recorder'
15
+ require_relative 'plugin'
16
+
17
+ module PMPlugin
18
+ def PMPlugin.action()
19
+ recoder= PM::Recorder.instance
20
+ if recoder.is_load_plugin
21
+ yield(recoder) if block_given?
22
+ end
23
+ end
24
+
25
+ def PMPlugin.update()
26
+ # puts "[cocoapods-byte-panglem][debug]checking for updates..."
27
+ command = 'gem install cocoapods-byte-panglem-beta'
28
+ stdout, stderr, status = Open3.capture3(command)
29
+
30
+ if status.success?
31
+ # puts "[cocoapods-byte-panglem][debug] update sucess"
32
+ else
33
+ # puts "[cocoapods-byte-panglem][debug] update fail message:#{stderr}"
34
+ end
35
+ end
36
+
37
+ end
38
+
39
+ class Xcodeproj::Project::Object::XCBuildConfiguration
40
+ ## 重写属性
41
+ attr_accessor :simple_attributes_hash
42
+ end
43
+
44
+ class Pod::Resolver
45
+
46
+ alias_method :original_search_for, :search_for
47
+ def search_for(dependency)
48
+ possibilities = original_search_for(dependency) ##返回不可变数组
49
+ PMPlugin.action do |recoder|
50
+ PM::SpecificationInfo.update Pod::Specification.root_name(dependency.name) , possibilities
51
+ end
52
+ possibilities
53
+ end
54
+
55
+ alias_method :original_specifications_for_dependency, :specifications_for_dependency
56
+ def specifications_for_dependency(dependency, additional_requirements = [])
57
+ PMPlugin.action do |recoder|
58
+ if PM::MapRelations.should_remove_requirements?(Pod::Specification.root_name(dependency.name))
59
+ additional_requirements = []
60
+ dependency = Pod::Dependency.new(dependency.name)
61
+ end
62
+ end
63
+ original_specifications_for_dependency(dependency, additional_requirements)
64
+ end
65
+ end
66
+
67
+ class Pod::Installer::Analyzer
68
+
69
+ alias_method :original_resolve_dependencies, :resolve_dependencies
70
+ def resolve_dependencies(locked_dependencies)
71
+ resolver_specs_by_target = original_resolve_dependencies(locked_dependencies)
72
+ PMPlugin.action do |recoder|
73
+ resolver_specs_by_target.each do |target, specs|
74
+
75
+ if specs.length > 0
76
+ ## SDK 场景下 不需要
77
+ # Pod::UserInterface.section 'cocoapods-byte-panglem remove invalid dependencie from loaded dependencies ' do
78
+ # PM::Analyzer.delete_invalid_adapters target, specs
79
+ # end if PM::Recorder.instance.get_global_note.auto_load
80
+
81
+
82
+ if PM::Recorder.instance.is_release
83
+ Pod::UserInterface.section "[cocoapods-byte-panglem-beta][info] start trying to update the sdk version (when is_release is yes) " do
84
+ PM::Analyzer.resolve_release_target target, specs
85
+ end
86
+ else
87
+ Pod::UserInterface.section '[cocoapods-byte-panglem-beta][info] start trying to update the sdk version ' do
88
+ is_update_finish = PM::Analyzer.resolve_last target, specs
89
+ if is_update_finish
90
+ Pod::UserInterface.section '[cocoapods-byte-panglem-beta][info] write Podfile.pangle.lock' do
91
+ write_lock_file recoder
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
98
+ end
99
+ resolver_specs_by_target
100
+ end
101
+
102
+ def write_lock_file(recoder)
103
+ PM::Lockfile.new(recoder.to_hash).write_to_disk(File.expand_path("#{Pod::Config.instance.installation_root}/Podfile.pangle"))
104
+ end
105
+ end
106
+
107
+ module Pod
108
+
109
+ class Podfile
110
+
111
+ module DSL
112
+ def use_pangm_sdk_update!(option = true)
113
+ current_target_definition.use_pangm_sdk_update!(option)
114
+ end
115
+
116
+ def pangm_release_target!(option = true)
117
+ current_target_definition.pangm_release_target!(option)
118
+ end
119
+
120
+ alias_method :original_plugin, :plugin
121
+ def plugin(name, options = {})
122
+ if name == 'cocoapods-byte-panglem-beta'
123
+ PM::Recorder.instance.set_plugin_load true
124
+ case options
125
+ when Hash
126
+ PM::Recorder.instance.set_is_debug options[:is_debug]
127
+ end
128
+
129
+ PMPlugin.update
130
+ end
131
+ original_plugin(name, options)
132
+ end
133
+
134
+ # alias_method :original_target, :target
135
+ # def target(name, options = nil)
136
+ # relust = original_target(name, options)
137
+
138
+ # result
139
+ # end
140
+
141
+ alias_method :original_pod, :pod
142
+ def pod(name = nil, *requirements)
143
+ ## SDK 场景不需要
144
+ # PMPlugin.action do |recoder|
145
+ # unless current_target_definition.have_add_dependencys
146
+ # current_target_definition.have_add_dependencys = true
147
+ # ask_name = PM::MapRelations.get_sdk
148
+ # current_target_definition.store_pod(PM::MapRelations.get_sdk, [])
149
+ # end if recoder.get_global_note.auto_load
150
+ # end
151
+ original_pod(name, *requirements)
152
+ end
153
+
154
+
155
+ end
156
+
157
+ class TargetDefinition
158
+
159
+ ## 媒体线上版本target的标识
160
+ attr_reader :pangm_release_target
161
+
162
+ ## 是否已自动加载了库
163
+ attr_accessor :have_add_dependencys
164
+
165
+ ## rarget维度的配置信息
166
+ attr_reader :pm_build_config
167
+
168
+ def use_pangm_sdk_update!(option)
169
+ @global_pm_build_config = PM::Recorder.instance.find_global_note option
170
+ end
171
+
172
+ ## SDK 暂不需要
173
+ def pangm_release_target!(option = true)
174
+
175
+ raise ArgumentError, "[cocoapods-byte-panglem] The `pangm_release_target!` configuration item needs to be set in a specific target, do not set it globally" if @label == "Pods"
176
+ name = String.new("T-") << label
177
+ case option
178
+ when true
179
+ @pm_build_config = PM::Recorder.instance.get_target name
180
+ @pm_build_config.is_release_target = option
181
+ @pm_build_config.referenced_target = name
182
+ when Hash
183
+ @pm_build_config = PM::Recorder.instance.get_target name
184
+ @pm_build_config.is_release_target = true
185
+ @pm_build_config.referenced_target = String.new("T-") << option[:referenced]
186
+ else
187
+ raise ArgumentError, "CSJM error: `#{option.inspect}`, should be a true or a target name"
188
+ end
189
+ end
190
+
191
+ original_parse_inhibit_warnings = instance_method(:parse_inhibit_warnings)
192
+ define_method(:parse_inhibit_warnings) do |name, requirements|
193
+ PMPlugin.action do |recoder|
194
+ ## 这里去掉adapter 大部分逻辑部分
195
+ @pm_build_config = recoder.get_target String.new("T-") << label
196
+ end
197
+ original_parse_inhibit_warnings.bind(self).call(name, requirements)
198
+ end
199
+
200
+ end
201
+ end
202
+
203
+ end
@@ -0,0 +1,2 @@
1
+ ##Copyright 2023 ByteDance Ltd. and/or its affiliates
2
+ ##SPDX-License-Identifier: MIT
@@ -0,0 +1,464 @@
1
+ ##Copyright 2023 ByteDance Ltd. and/or its affiliates
2
+ ##SPDX-License-Identifier: MIT
3
+
4
+ require 'cocoapods'
5
+ require_relative 'net'
6
+ require_relative 'config'
7
+ require_relative 'tool'
8
+
9
+
10
+
11
+ module Pod
12
+ class Specification
13
+
14
+ def get_default_subspec_name
15
+ @attributes_hash["default_subspecs"].first
16
+ end
17
+
18
+ def get_subspecs
19
+ # default_name = @attributes_hash["default_subspecs"].first
20
+ subspecs = []
21
+ name_list_a = []
22
+ rely_spec_version = ""
23
+ @subspecs.map do |spec|
24
+ puts "s:#{spec.class}"
25
+ get_dependencies spec.name
26
+ end
27
+ end
28
+
29
+ def get_dependencies(spec_name)
30
+ depens = spec.dependencies
31
+ # name_list = []
32
+ # depens.map do |den|
33
+ # if den.name.length > 0
34
+ # name_list | get_dependencies den.name
35
+ # name_list << den.name
36
+ # end
37
+ # end if depens.length > 0
38
+ # name_list
39
+ end
40
+
41
+ # def get_specfication(spec_name)
42
+ # end
43
+
44
+ def get_rely_version
45
+ hash = @attributes_hash
46
+
47
+ subs = @subspecs
48
+ subs
49
+ dep_accurate_sperc = @subspecs.select do |spec|
50
+ spec.name == "Ads-Global-Beta/Dep_Accurate"
51
+ end.first
52
+ dep_accurate_sperc.dependencies.first.get_requirment
53
+ end
54
+ end
55
+
56
+ class Dependency
57
+ def get_requirment
58
+ @requirement.requirements.first.last.version
59
+ end
60
+ end
61
+ end
62
+
63
+ module PM
64
+
65
+ # 记录Pangle SDK版本信息
66
+ #
67
+ class Info
68
+ attr_accessor :name
69
+ attr_accessor :version
70
+ def initialize(name, version)
71
+ @name = name
72
+ @version = version
73
+ end
74
+
75
+ def to_hash
76
+ hash = {}
77
+ hash["NAME"] = @name
78
+ hash["VERSION"] = @version
79
+ hash
80
+ end
81
+
82
+ def self.from_hash(hash)
83
+ Info.new(hash["NAME"],hash["VERSION"])
84
+ end
85
+ end
86
+
87
+ # SDK 信息
88
+ class SDKInfo < Info
89
+ end
90
+
91
+ # Mediation信息
92
+ class MInfo < Info
93
+ end
94
+
95
+ # 配置信息
96
+ #
97
+ class Note
98
+ attr_accessor :auto_load
99
+ attr_accessor :auto_update
100
+ attr_accessor :load_detect
101
+ def get_update(update_value)
102
+ value = ''
103
+ case update_value
104
+ when true
105
+ value = PM::BuildConfig.update_value_last_version
106
+ when false
107
+ value = PM::BuildConfig.update_value_non
108
+ when String
109
+ value = update_value
110
+ else
111
+ raise ArgumentError, "CSJM error: `#{update_value.inspect}`, should be a boolean or string."
112
+ end
113
+ value
114
+ end
115
+ end
116
+
117
+ class GlobalNote < Note
118
+ attr_accessor :auto_load_whitelist
119
+ attr_accessor :use_service_local
120
+ attr_reader :is_release
121
+ def initialize(auto_load = true , auto_update = PM::BuildConfig.update_value_last_version, load_detect = true, auto_load_whitelist = {},is_release = false)
122
+ @auto_load = auto_load
123
+ @auto_update = get_update auto_update
124
+ @load_detect = load_detect
125
+ @auto_load_whitelist = auto_load_whitelist
126
+ @is_release = is_release
127
+ end
128
+
129
+ def to_hash
130
+ hash = {}
131
+ hash["AUTO_LOAD"] = @auto_load
132
+ hash["AUTO_UPDATE"] = @auto_update
133
+ hash["LOAD_DETECT"] = @load_detect
134
+ hash["AUTO_LOAD_WHITELIST"] = @auto_load_whitelist
135
+ hash
136
+ end
137
+
138
+ def self.from_hash(hash)
139
+ global_note = GlobalNote.new()
140
+ global_note.auto_load = hash["AUTO_LOAD"] if hash.has_key?("AUTO_LOAD")
141
+ global_note.auto_update = hash["AUTO_UPDATE"] if hash.has_key?("AUTO_UPDATE")
142
+ global_note.load_detect = hash["LOAD_DETECT"] if hash.has_key?("LOAD_DETECT")
143
+ global_note.auto_load_whitelist = hash["AUTO_LOAD_WHITELIST"] if hash.has_key?("AUTO_LOAD_WHITELIST")
144
+ global_note
145
+ end
146
+ end
147
+
148
+ class AdnNote < Note
149
+
150
+ attr_accessor :adn_name
151
+ attr_accessor :adn_version
152
+ attr_accessor :adapter_name
153
+ attr_accessor :adapter_original_version ##加载的版本号
154
+ attr_accessor :adapter_expected_version ##期望加载的版本号
155
+
156
+ def initialize(adn_name, auto_load = false , auto_update = PM::BuildConfig.update_value_non, load_detect = false)
157
+ @adn_name = adn_name
158
+ @adapter_name = PM::MapRelations.get_adapter adn_name
159
+ @auto_load = auto_load
160
+ @auto_update = get_update auto_update
161
+ @load_detect = load_detect
162
+ end
163
+
164
+ def to_hash
165
+ hash = {}
166
+ hash["ADN_NAME"] = @adn_name
167
+ hash["ADN_VERSION"] = @adn_version
168
+ hash["ADAPTER_NAME"] = @adapter_name
169
+ hash["ADAPTER_ORIGINAL_VERSION"] = @adapter_original_version
170
+ hash["ADAPTER_EXPECTED_VERSION"] = @adapter_expected_version
171
+ hash["AUTO_LOAD"] = @auto_load
172
+ hash["AUTO_UPDATE"] = @auto_update
173
+ hash["LOAD_DETECT"] = @load_detect
174
+ hash
175
+ end
176
+
177
+ def self.from_hash(hash)
178
+ note = AdnNote.new(hash["ADN_NAME"],hash["AUTO_LOAD"],hash["AUTO_UPDATE"],hash["LOAD_DETECT"])
179
+ note.adn_name = hash["ADN_NAME"]
180
+ note.adn_version = hash["ADN_VERSION"]
181
+ note.adapter_name = hash["ADAPTER_NAME"]
182
+ note.adapter_original_version = hash["ADAPTER_ORIGINAL_VERSION"]
183
+ note.adapter_expected_version = hash["ADAPTER_EXPECTED_VERSION"]
184
+ note
185
+ end
186
+ end
187
+
188
+ class UpdateResut
189
+ attr_accessor :is_sdk_update
190
+ attr_accessor :is_rely_update
191
+ attr_accessor :sdk_list
192
+ attr_accessor :rely_list
193
+ attr_accessor :sdk_name
194
+ attr_accessor :rely_name
195
+ attr_accessor :sdk_original_version
196
+ attr_accessor :rely_original_version
197
+ attr_accessor :sdk_target_version
198
+ attr_accessor :rely_target_version
199
+
200
+ def initialize()
201
+ @is_sdk_update = false
202
+ @is_rely_update = false
203
+ @sdk_list = []
204
+ @rely_list = []
205
+ end
206
+
207
+ def self.from_hash(hash)
208
+ re = UpdateResut.new()
209
+ re.sdk_name = "Ads-Global"
210
+ re.rely_name = "BURelyFoundation_Global"
211
+ re.sdk_original_version = hash["SDK_ORIGINAL_VERSION"]
212
+ re.sdk_target_version = hash["SDK_TARGET_VERSION"]
213
+ re.rely_original_version = hash['RELY_ORIGINAL_VERSION']
214
+ re.rely_target_version = hash['RELY_TARGET_VERSION']
215
+ re.is_sdk_update = re.sdk_original_version != re.sdk_target_version
216
+ re.is_rely_update = re.rely_original_version != re.rely_target_version
217
+ info_r = PM::SpecificationInfo.get_info
218
+ re.sdk_list = info_r[re.sdk_name].select do |spec|
219
+ Pod::Specification.root_name(spec.name) == re.sdk_name && spec.version.version == re.sdk_target_version
220
+ end
221
+ re.rely_list = info_r[ re.rely_name].select do |spec|
222
+ Pod::Specification.root_name(spec.name) == re.rely_name && spec.version.version == re.rely_target_version
223
+ end
224
+ re
225
+ end
226
+
227
+ end
228
+ # 配置信息 (cocoapods target维度下)
229
+ #
230
+ class Target
231
+
232
+ attr_accessor :is_release_target
233
+ attr_accessor :referenced_target
234
+ attr_reader :label
235
+ attr_accessor :PM_info
236
+ attr_accessor :nots_info
237
+
238
+ def initialize(label)
239
+ @label = label.clone
240
+ @is_release_target = false
241
+ end
242
+
243
+ def find_note(adn_name)
244
+ @nots_info ||= {}
245
+ global_note = PM::Recorder.instance.global_note
246
+ note = (@nots_info.has_key?(adn_name) && @nots_info[adn_name]) || AdnNote.new(adn_name, global_note.auto_load, global_note.auto_update, global_note.load_detect)
247
+ @nots_info[adn_name] = note unless @nots_info.has_key?(adn_name)
248
+ note
249
+ end
250
+
251
+ def has_adn?(adn_name)
252
+ PM::MapRelations.is_adn?(adn_name) && @nots_info.has_key?(adn_name)
253
+ end
254
+
255
+ def is_adn_update_or_detect?(adn_name)
256
+ result = is_adn_update?(adn_name) || is_adn_detect?(adn_name)
257
+ result
258
+ end
259
+
260
+ def is_adn_update?(adn_name)
261
+ result = has_adn?(adn_name) && @nots_info[adn_name].auto_update != PM::BuildConfig.update_value_non
262
+ result
263
+ end
264
+
265
+ def is_adn_detect?(adn_name)
266
+ has_adn?(adn_name) && @nots_info[adn_name].load_detect
267
+ end
268
+
269
+ def to_hash
270
+ hash = {}
271
+ hash["LABEL"] = @label
272
+ hash["IS_RELEASE_TARGET"] = @is_release_target
273
+ hash["PM_INFO"] = @pm_info.to_hash
274
+ hash["NOTS_INFO"] = {}
275
+ @nots_info.each {|key, value|
276
+ hash["NOTS_INFO"][key] = value.to_hash
277
+ }
278
+ hash
279
+ end
280
+
281
+ def self.from_hash(hash)
282
+ target = Target.new(hash["LABEL"])
283
+ target.is_release_target = true
284
+ target.PM_info = PMInfo.from_hash hash["PM_INFO"] if hash.has_key?("PM_INFO")
285
+ target.nots_info ||= {}
286
+ hash["NOTS_INFO"].each do |name, note_info|
287
+ target.nots_info[name] = AdnNote.from_hash note_info
288
+ end
289
+ target
290
+ end
291
+
292
+ end
293
+
294
+ # 记录方
295
+ #
296
+ class Recorder
297
+
298
+ include Singleton
299
+ attr_accessor :global_note
300
+ attr_accessor :target_info
301
+ attr_accessor :sdk_original_version
302
+ attr_accessor :rely_original_version
303
+ attr_accessor :sdk_target_version
304
+ attr_accessor :rely_target_version
305
+ attr_accessor :adapter_list
306
+ attr_reader :is_load_plugin
307
+ attr_reader :plugin_version
308
+ attr_reader :lockfile_data
309
+ attr_reader :is_debug
310
+
311
+
312
+ def initialize()
313
+ @adapter_list = []
314
+ @is_debug = false
315
+ end
316
+
317
+ def set_plugin_load(is_load)
318
+ @is_load_plugin = is_load
319
+ @plugin_version = CocoapodsBytePanglem::Version.version
320
+ end
321
+
322
+ def set_is_debug(is_debug)
323
+ @is_debug = is_debug
324
+ end
325
+
326
+ def add_global_note(note)
327
+ @global_note = note
328
+ end
329
+
330
+ def find_global_note(option, is_force_update = false)
331
+
332
+ return @global_note if !is_force_update && @global_note != nil
333
+ @global_note = GlobalNote.new(false, PM::BuildConfig.update_value_non, false)
334
+ load_key = PM::BuildConfig.get_load_key
335
+ update_key = PM::BuildConfig.get_update_key
336
+ load_detect_key = PM::BuildConfig.get_load_detect_key
337
+ auto_load_whitelist_key = PM::BuildConfig.get_load_whitelist_key
338
+ is_release_key = PM::BuildConfig.get_is_release_key
339
+ use_service_local_key = PM::BuildConfig.get_use_service_local_key
340
+
341
+ case option
342
+ when true, false
343
+ @global_note = PM::GlobalNote.new(option,option,option,{})
344
+ when Hash
345
+ load_value = option.has_key?(load_key) ? option[load_key] : true
346
+ update_value = option.has_key?(update_key) ? option[update_key] : true
347
+ detect_value = option.has_key?(load_detect_key) ? option[load_detect_key] : true
348
+ auto_load_whitelist = option.has_key?(auto_load_whitelist_key)?option[auto_load_whitelist_key] : {}
349
+ is_release = option.has_key?(is_release_key)?option[is_release_key] : false
350
+ @global_note = PM::GlobalNote.new(load_value, update_value,detect_value,auto_load_whitelist, is_release)
351
+ @global_note.use_service_local = option.has_key?(use_service_local_key)?option[use_service_local_key] : false
352
+ else
353
+ raise ArgumentError, "[cocoapods-byte-panglem][error] `#{option.inspect}`, should be a boolean or hash."
354
+ end
355
+ @global_note
356
+ end
357
+
358
+ def get_global_note
359
+ @global_note
360
+ end
361
+
362
+ def get_target(label)
363
+ @target_info ||= {}
364
+ @target_info[label] ||= Target.new(label)
365
+ end
366
+
367
+ def is_release()
368
+ @global_note.is_release
369
+ end
370
+
371
+ def use_service_local()
372
+ @global_note.use_service_local
373
+ end
374
+
375
+ def to_hash
376
+ hash = {}
377
+ hash["IS_LOAD_PLUGIN"] = @is_load_plugin
378
+ hash["PLUGIN_VERSION"] = @plugin_version
379
+ hash["SDK_ORIGINAL_VERSION"] = @sdk_original_version
380
+ hash["RELY_ORIGINAL_VERSION"] = @rely_original_version
381
+ hash["SDK_TARGET_VERSION"] = @sdk_target_version
382
+ hash["RELY_TARGET_VERSION"] = @rely_target_version
383
+ hash["ADAPTER_LIST"] = @adapter_list
384
+ checksum = Digest::SHA1.hexdigest(hash.inspect)
385
+ checksum = checksum.encode('UTF-8') if checksum.respond_to?(:encode)
386
+ hash["RECODER_CHECKSUM"] = checksum
387
+ hash
388
+ end
389
+ end
390
+
391
+ # 对应cocoapods 的Specification
392
+ #
393
+ class SpecificationInfo
394
+ @@possibilities = {}
395
+ def self.update(name = '', possibilities)
396
+ if name.length > 0
397
+ @@possibilities[name] ||= []
398
+ @@possibilities[name] = @@possibilities[name] | possibilities
399
+ end
400
+ end
401
+
402
+ def self.get_info()
403
+ @@possibilities
404
+ end
405
+
406
+ def self.get_a_specfication(name, version)
407
+ result = @@possibilities[name].find { |specification|
408
+ specification.version.version == version
409
+ }
410
+ result
411
+ end
412
+
413
+ def self.get_specfication(response_data ={}, original_sdk_spec)
414
+
415
+ ## 这里需要获取到所有需要获取SDK期望版本下 所有subspec的specfication集合.
416
+ ## 1. 获取到期望sdk的版本号 和 基础库的版本号
417
+ ## 2. 计算出所有需要的subspec的名称
418
+ ## 3. 计算出升级时需要替换的所有的specfication
419
+ info_r = get_info
420
+ target_sdk_version = response_data["data"]["pangle_sdk_version"]
421
+ if target_sdk_version == nil || target_sdk_version.length == 0
422
+ ## 兜底, 赋值为当前版本
423
+ target_sdk_version = original_sdk_spec.spec.version.version
424
+ end
425
+ sdk_name = PM::BuildConfig.mediation_name
426
+ rely_name = PM::BuildConfig.rely_name
427
+ result = UpdateResut.new()
428
+ result.sdk_name = sdk_name
429
+ result.rely_name = rely_name
430
+ target_sdk_root_spec = nil
431
+ target_sdk_spec_list = info_r[sdk_name].select do |spec|
432
+ target_sdk_root_spec = spec if spec.name == sdk_name && spec.version.version == target_sdk_version
433
+ Pod::Specification.root_name(spec.name) == sdk_name && spec.version.version == target_sdk_version
434
+ end
435
+ if target_sdk_root_spec == nil
436
+ raise "[cocoapods-byte-panglem][error] pangle sdk version:#{target_sdk_version} not found, please try use `pod install --repo-update`"
437
+ end
438
+ if target_sdk_root_spec.version.version != original_sdk_spec.spec.version.version
439
+
440
+ result.is_sdk_update = true
441
+ result.sdk_list = target_sdk_spec_list
442
+ result.sdk_original_version = original_sdk_spec.spec.version.version
443
+ result.sdk_target_version = target_sdk_root_spec.version.version
444
+ PM::Recorder.instance.sdk_original_version = result.sdk_original_version
445
+ PM::Recorder.instance.sdk_target_version = result.sdk_target_version
446
+ target_rely_version = target_sdk_root_spec.get_rely_version
447
+ original_rely_version = original_sdk_spec.spec.get_rely_version
448
+ # target_rely_version = "0.2.0.0"
449
+ if target_rely_version != original_rely_version
450
+ target_rely_spec_list = info_r[rely_name].select do |spec|
451
+ Pod::Specification.root_name(spec.name) == rely_name && spec.version.version == target_rely_version
452
+ end
453
+ result.is_rely_update = true
454
+ result.rely_list = target_rely_spec_list
455
+ result.rely_original_version = original_rely_version
456
+ result.rely_target_version = target_rely_version
457
+ PM::Recorder.instance.rely_original_version = result.rely_original_version
458
+ PM::Recorder.instance.rely_target_version = result.rely_target_version
459
+ end
460
+ end
461
+ result
462
+ end
463
+ end
464
+ end