Class: GM::VersionAnalyzer
- Inherits:
-
Object
- Object
- GM::VersionAnalyzer
- Defined in:
- lib/cocoapods-byte-csjm/gm.rb
Overview
版本处理
Class Method Summary collapse
- .delete_invalid_adapters(target, specs) ⇒ Object
- .get_package_name ⇒ Object
- .is_auto_update?(value) ⇒ Boolean
- .is_stable_update?(value) ⇒ Boolean
- .is_update?(value) ⇒ Boolean
- .request_adapter(m_version, adn_list) ⇒ Object
- .resolve_last(target, specs) ⇒ Object
- .resolve_release_target(target, specs) ⇒ Object
Class Method Details
.delete_invalid_adapters(target, specs) ⇒ Object
483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 |
# File 'lib/cocoapods-byte-csjm/gm.rb', line 483 def self.delete_invalid_adapters(target, specs) un_den_adn_list= GM::Adn_Adapter.get_all_adn - specs.map(&:spec).map(&:name).map do |item| GM::Adn_Adapter.is_adn?(item) ? Pod::Specification.root_name(item) : nil end.compact.uniq un_den_adapter_list = [] un_den_adapter_list = un_den_adn_list.map {|item| GM::Adn_Adapter.get_adapter item } specs.delete_if { |spec| hh = !GM::Recorder.instance.global_note.auto_load_whitelist.include?(Pod::Specification.root_name(spec.spec.name)) result = un_den_adapter_list.include?(Pod::Specification.root_name(spec.spec.name)) && !GM::Recorder.instance.global_note.auto_load_whitelist.include?(Pod::Specification.root_name(spec.spec.name)) if result = { :verbose_prefix => '-> '.red} Pod::UserInterface.titled_section("remove #{spec.spec.name}", ) end result } end |
.get_package_name ⇒ Object
502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 |
# File 'lib/cocoapods-byte-csjm/gm.rb', line 502 def self.get_package_name project_path = Pod::Config.instance.project_root # pattern = File.join(project_path, '*.xcodeproj') # 匹配所有子目录下的 .xcodeproj 文件 # xcodeproj_path = Dir.glob(pattern).first xcodeprojs = project_path.children.select { |e| e.fnmatch('*.xcodeproj') } if xcodeprojs.size == 1 package_name_list = Array.new xcodeproj_path = xcodeprojs.first project = Xcodeproj::Project.open(xcodeproj_path) project.targets.map(&:build_configuration_list).map(&:build_configurations).each do |item| package_name_list << item[1].simple_attributes_hash['buildSettings']['PRODUCT_BUNDLE_IDENTIFIER'] end package_name_list.uniq else raise Informative, 'Could not automatically select an Xcode project. ' \ "Specify one in your Podfile like so:\n\n" \ " project 'path/to/Project.xcodeproj'\n" end end |
.is_auto_update?(value) ⇒ Boolean
559 560 561 |
# File 'lib/cocoapods-byte-csjm/gm.rb', line 559 def self.is_auto_update?(value) value == GM::BuildConfig.update_value_last_version end |
.is_stable_update?(value) ⇒ Boolean
563 564 565 |
# File 'lib/cocoapods-byte-csjm/gm.rb', line 563 def self.is_stable_update?(value) value == GM::BuildConfig.update_value_last_stable_version end |
.is_update?(value) ⇒ Boolean
555 556 557 |
# File 'lib/cocoapods-byte-csjm/gm.rb', line 555 def self.is_update?(value) is_auto_update?(value) || is_stable_update?(value) end |
.request_adapter(m_version, adn_list) ⇒ Object
522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 |
# File 'lib/cocoapods-byte-csjm/gm.rb', line 522 def self.request_adapter(m_version, adn_list) package_name = get_package_name body = Hash["package_name"=>package_name, "mediation_version"=>m_version, "os_type"=>"ios", "list"=>adn_list] Pod::UserInterface.section '[DEBUG]CSJM plugin Network request data' do puts "请求信息:#{body}" end data = GM::Network.request_adapter(body) if data["code"] == "PG0000" ## 请求adn数目和返回adapter 个数不一致时进行报错处理 result = data["data"] if result.size != adn_list.size unfind_adn_list = adn_list.map do |hash| if hash["adn_name"] != result.find { |h| h["adn_version"] == hash["adn_version"] }&.dig("adn_name") { "adn_name" => hash["adn_name"], "adn_version" => hash["adn_version"] } end end.compact raise "CSJM error:未查找到与#{JSON.generate(unfind_adn_list)}匹配的Adadpter,请更新SDK至合适版本,如有疑问请联系技术支持。" end return data["data"] else ##业务逻辑异常的提示 case data["code"] when "PG0201" raise "CSJM error: #{data["message"]}(应用ID:#{package_name}),请使用在平台注册的应用ID,如有疑问请联系技术支持。" when "21018" ,"PG21018" raise "CSJM error: #{data["message"]}(应用ID:#{package_name}),如有疑问请联系技术支持。" else raise "CSJM error: #{data["message"]}(应用ID:#{package_name}),如有疑问请联系技术支持。" end end end |
.resolve_last(target, specs) ⇒ Object
416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 |
# File 'lib/cocoapods-byte-csjm/gm.rb', line 416 def self.resolve_last(target, specs) gm_spec = nil adn_specs = specs.select do |spec| name = spec.spec.name if name == GM::BuildConfig.mediation_name gm_spec = spec target.gm_build_config.gm_info = GM::GmInfo.new(spec.spec.name, spec.spec.version.version) end if GM::Adn_Adapter.is_adapter?(name) adn_note = target.gm_build_config.find_note GM::Adn_Adapter.get_adn name adn_note.adapter_name = name adn_note.adapter_original_version = spec.spec.version.version elsif GM::Adn_Adapter.is_adn?(name) adn_note = target.gm_build_config.find_note name adn_note.adn_version = spec.spec.version.version end target.gm_build_config.is_adn_update?(name) ## 这里去掉不更新但版本校验功能 end raise "CSJM error: #{GM::BuildConfig.mediation_name} not found,please check" if gm_spec == nil adn_info_list = adn_specs.map{|adn_spec| adn_note = target.gm_build_config.find_note adn_spec.spec.name adn_note.adn_version = adn_spec.spec.version.version {"adn_name" => GM::Adn_Adapter.get_adn_abbreviation(adn_spec.spec.name),"adn_version" => adn_spec.spec.version.version} # {"adn_name" => "ks","adn_version" => adn_spec.spec.version.version} # {"adn_name" => adn_spec.spec.name,"adn_version" => adn_spec.spec.version.version, "auto_update" => adn_note.auto_update, "load_detect" => adn_note.load_detect, "adapter_name" => adn_note.adapter_name, "adapter_version" => adn_note.adapter_original_version} } if gm_spec ## 网络请求 response_data = request_adapter gm_spec.spec.version.version, adn_info_list result = GM::SpecificationInfo.get_specfication response_data result.each{|item| original_sp = specs.find{|spec| spec.spec.name == item.name } adn_name = GM::Adn_Adapter.get_adn item.name adn_note = target.gm_build_config.find_note adn_name adn_note.adapter_expected_version = item.version.version if original_sp && original_sp.spec.version.version == item.version.version = { :verbose_prefix => '-> '.green } Pod::UserInterface.titled_section("#{adn_name} has set version update or check, the current adapter(#{item.name}) version(#{item.version.version}) is as expected", ) else if original_sp && original_sp.spec.version.version != item.version.version ## 更新到最新版本 或 最新稳定版本 if target.gm_build_config.is_adn_update?(adn_name) # puts '开始更新版本' = { :verbose_prefix => '-> '.green } Pod::UserInterface.titled_section("#{adn_name} will change adapter version , the current adapter(#{item.name}) version will change from #{original_sp.spec.version.version} to #{item.version.version}", ) specs << Pod::Resolver::ResolverSpecification.new(item, original_sp.used_by_non_library_targets_only, item.spec_source) specs.delete original_sp elsif target.gm_build_config.is_adn_detect?(adn_name) ##媒体关闭了自动更新,只选择检查版本是否适配 ## 版本校验功能暂时去掉 , 一期不上,后续具体看情况 # puts '开始校验版本' # if item.version.version != original_sp.spec.version.version # raise "CSJM error:#{adn_name} has set the version check of the adapter(#{item.name}), current version does not match. please change your version. The current version is #{original_sp.spec.version.version} but the expected version is #{item.version.version}" # end else # puts '什么也不做' end end end } specs.sort_by!{|spec| spec.spec.name} end |
.resolve_release_target(target, specs) ⇒ Object
358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 |
# File 'lib/cocoapods-byte-csjm/gm.rb', line 358 def self.resolve_release_target(target, specs) is_exist, hash = GM::LockfileCSJM.read_from_path(File.("#{Pod::Config.instance.installation_root}/Podfile.csjm.lock")) if is_exist ## 校验lock文件有无改动 checksum = hash.delete("RECODER_CHECKSUM") verified_checksum = Digest::SHA1.hexdigest(hash.inspect).encode('UTF-8') if checksum.respond_to?(:encode) if verified_checksum != checksum raise "CSJM error: Podfile.csjm.lock 文件校验失败, 请检查该文件是否被改动, 尝试删掉该文件并执行 'pod install', 若你确认没有被修改,请联系技术支持" end ## 校验对应的target是否存在 if !hash["TARGET_INFO"].has_key?(target.gm_build_config.referenced_target) raise "CSJM error:#{target.gm_build_config.label} 设置了'is_release_target=true' 但是在 Podfile.csjm.lock文件中没有找到target的信息" end ## 校验gm版本是否符合 gm_spec = specs.find do |spec| GM::BuildConfig.mediation_name==spec.spec.name end if gm_spec.nil? raise "CSJM error:#{GM::BuildConfig.mediation_name} not found in #{target.label}" end referenced_target = GM::Target.from_hash hash["TARGET_INFO"][target.gm_build_config.referenced_target] if gm_spec.spec.version.version != referenced_target.gm_info.version raise "CSJM error:#{GM::BuildConfig.mediation_name} version has change(#{referenced_target.gm_info.version}->#{gm_spec.spec.version.version}),please check" end ## 替换各adapter的版本 referenced_target.nots_info.each do |adn_name, note| original_adapter_sp = specs.find{|spec| spec.spec.name == note.adapter_name } if original_adapter_sp.nil? raise "CSJM error:#{note.adapter_name} not found" end ##校验adn是否更换了版本 original_adn_sp = specs.find do |spec| spec.spec.name == note.adn_name end if original_adn_sp.spec.version.version != note.adn_version raise "CSJM error:#{note.adn_name} version has change(#{note.adn_version}->#{original_adapter_sp.spec.version.version}),please check" end if note.adapter_expected_version.length > 0 && original_adapter_sp.spec.version.version != note.adapter_expected_version = { :verbose_prefix => '-> '.green } Pod::UserInterface.titled_section("#{note.adn_name} will change adapter version , the current adapter(#{note.adapter_name}) version will change from #{original_adapter_sp.spec.version.version} to #{note.adapter_expected_version}", ) replace_sp = GM::SpecificationInfo.get_a_specfication note.adapter_name, note.adapter_expected_version if replace_sp specs << Pod::Resolver::ResolverSpecification.new(replace_sp, original_adapter_sp.used_by_non_library_targets_only, replace_sp.spec_source) specs.delete original_adapter_sp end end end specs.sort_by!{|spec| spec.spec.name} else raise "CSJM error: #{File.expand_path("#{Pod::Config.instance.installation_root}/Podfile.csjm.lock")} not found, please check" end end |