cocoapods-tj 1.0.0
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 +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +1 -0
- data/lib/cocoapods-tj/command/bin/archive.rb +203 -0
- data/lib/cocoapods-tj/command/bin/auto.rb +189 -0
- data/lib/cocoapods-tj/command/bin/code.rb +198 -0
- data/lib/cocoapods-tj/command/bin/imy.rb +45 -0
- data/lib/cocoapods-tj/command/bin/init.rb +65 -0
- data/lib/cocoapods-tj/command/bin/initHotKey.rb +66 -0
- data/lib/cocoapods-tj/command/bin/install.rb +41 -0
- data/lib/cocoapods-tj/command/bin/lib/lint.rb +66 -0
- data/lib/cocoapods-tj/command/bin/local.rb +142 -0
- data/lib/cocoapods-tj/command/bin/repo/update.rb +42 -0
- data/lib/cocoapods-tj/command/bin/spec/create.rb +68 -0
- data/lib/cocoapods-tj/command/bin/spec/push.rb +114 -0
- data/lib/cocoapods-tj/command/bin/update.rb +144 -0
- data/lib/cocoapods-tj/command/bin.rb +42 -0
- data/lib/cocoapods-tj/command.rb +2 -0
- data/lib/cocoapods-tj/config/config.rb +129 -0
- data/lib/cocoapods-tj/config/config_asker.rb +49 -0
- data/lib/cocoapods-tj/config/config_builder.rb +201 -0
- data/lib/cocoapods-tj/config/config_hot_key.rb +102 -0
- data/lib/cocoapods-tj/config/config_hot_key_asker.rb +48 -0
- data/lib/cocoapods-tj/gem_version.rb +10 -0
- data/lib/cocoapods-tj/helpers/Info.plist +0 -0
- data/lib/cocoapods-tj/helpers/build_helper.rb +154 -0
- data/lib/cocoapods-tj/helpers/build_utils.rb +62 -0
- data/lib/cocoapods-tj/helpers/framework.rb +79 -0
- data/lib/cocoapods-tj/helpers/framework_builder.rb +391 -0
- data/lib/cocoapods-tj/helpers/library.rb +54 -0
- data/lib/cocoapods-tj/helpers/library_builder.rb +89 -0
- data/lib/cocoapods-tj/helpers/local/loca_llibrary.rb +57 -0
- data/lib/cocoapods-tj/helpers/local/local_build_helper.rb +177 -0
- data/lib/cocoapods-tj/helpers/local/local_framework.rb +85 -0
- data/lib/cocoapods-tj/helpers/local/local_framework_builder.rb +226 -0
- data/lib/cocoapods-tj/helpers/local/local_library_builder.rb +91 -0
- data/lib/cocoapods-tj/helpers/sources_helper.rb +32 -0
- data/lib/cocoapods-tj/helpers/spec_creator.rb +150 -0
- data/lib/cocoapods-tj/helpers/spec_files_helper.rb +73 -0
- data/lib/cocoapods-tj/helpers/spec_source_creator.rb +189 -0
- data/lib/cocoapods-tj/helpers/upload_helper.rb +81 -0
- data/lib/cocoapods-tj/helpers.rb +5 -0
- data/lib/cocoapods-tj/native/acknowledgements.rb +26 -0
- data/lib/cocoapods-tj/native/analyzer.rb +29 -0
- data/lib/cocoapods-tj/native/file_accessor.rb +20 -0
- data/lib/cocoapods-tj/native/installation_options.rb +21 -0
- data/lib/cocoapods-tj/native/installer.rb +106 -0
- data/lib/cocoapods-tj/native/linter.rb +26 -0
- data/lib/cocoapods-tj/native/path_source.rb +29 -0
- data/lib/cocoapods-tj/native/pod_source_installer.rb +18 -0
- data/lib/cocoapods-tj/native/pod_target_installer.rb +81 -0
- data/lib/cocoapods-tj/native/podfile.rb +91 -0
- data/lib/cocoapods-tj/native/podfile_env.rb +37 -0
- data/lib/cocoapods-tj/native/podfile_generator.rb +135 -0
- data/lib/cocoapods-tj/native/podspec_finder.rb +23 -0
- data/lib/cocoapods-tj/native/resolver.rb +202 -0
- data/lib/cocoapods-tj/native/sandbox_analyzer.rb +11 -0
- data/lib/cocoapods-tj/native/source.rb +35 -0
- data/lib/cocoapods-tj/native/sources_manager.rb +18 -0
- data/lib/cocoapods-tj/native/specification.rb +10 -0
- data/lib/cocoapods-tj/native/target_validator.rb +41 -0
- data/lib/cocoapods-tj/native/validator.rb +40 -0
- data/lib/cocoapods-tj/native.rb +23 -0
- data/lib/cocoapods-tj/source_provider_hook.rb +50 -0
- data/lib/cocoapods-tj.rb +2 -0
- data/lib/cocoapods_plugin.rb +3 -0
- data/spec/command/bin_spec.rb +12 -0
- data/spec/spec_helper.rb +50 -0
- metadata +182 -0
| @@ -0,0 +1,150 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'cocoapods'
         | 
| 4 | 
            +
            require 'cocoapods-tj/config/config'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module CBin
         | 
| 7 | 
            +
              class Specification
         | 
| 8 | 
            +
                class Creator
         | 
| 9 | 
            +
                  attr_reader :code_spec
         | 
| 10 | 
            +
                  attr_reader :template_spec
         | 
| 11 | 
            +
                  attr_reader :spec
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  def initialize(code_spec, template_spec, platforms = 'ios')
         | 
| 14 | 
            +
                    @code_spec = code_spec
         | 
| 15 | 
            +
                    @template_spec = template_spec
         | 
| 16 | 
            +
                    @platforms = Array(platforms)
         | 
| 17 | 
            +
                    validate!
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  def validate!
         | 
| 21 | 
            +
                    raise Pod::Informative, '源码 podspec 不能为空 .' unless code_spec
         | 
| 22 | 
            +
                    if code_spec.subspecs.any? && template_spec.nil?
         | 
| 23 | 
            +
                      raise Pod::Informative, "不支持自动生成存在 subspec 的二进制 podspec , 需要提供模版文件 #{code_spec.name}.binary.podspec.template ."
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def create
         | 
| 28 | 
            +
                    spec = template_spec ? create_from_code_spec_and_template_spec : create_from_code_spec
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    Pod::UI.message '生成二进制 podspec 内容: '
         | 
| 31 | 
            +
                    spec.to_pretty_json.split("\n").each do |text|
         | 
| 32 | 
            +
                      Pod::UI.message text
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    spec
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                  def write_spec_file(file = filename)
         | 
| 39 | 
            +
                    create unless spec
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    File.open(file, 'w+') do |f|
         | 
| 42 | 
            +
                      f.write(spec.to_pretty_json)
         | 
| 43 | 
            +
                    end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    @filename = file
         | 
| 46 | 
            +
                  end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                  def clear_spec_file
         | 
| 49 | 
            +
                    File.delete(filename) if File.exist?(filename)
         | 
| 50 | 
            +
                  end
         | 
| 51 | 
            +
             | 
| 52 | 
            +
                  def filename
         | 
| 53 | 
            +
                    @filename ||= "#{spec.name}.binary.podspec.json"
         | 
| 54 | 
            +
                  end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                  private
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                  def create_from_code_spec
         | 
| 59 | 
            +
                    @spec = code_spec.dup
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                    @spec.vendored_frameworks = "#{code_spec.root.name}.framework"
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                    # Resources
         | 
| 64 | 
            +
                    extnames = []
         | 
| 65 | 
            +
                    extnames << '*.bundle' if code_spec_consumer.resource_bundles.any?
         | 
| 66 | 
            +
                    if code_spec_consumer.resources.any?
         | 
| 67 | 
            +
                      extnames += code_spec_consumer.resources.map { |r| File.basename(r) }
         | 
| 68 | 
            +
                    end
         | 
| 69 | 
            +
                    if extnames.any?
         | 
| 70 | 
            +
                      @spec.resources = framework_contents('Resources').flat_map { |r| extnames.map { |e| "#{r}/#{e}" } }
         | 
| 71 | 
            +
                    end
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                    # Source Location
         | 
| 74 | 
            +
                    @spec.source = binary_source
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                    # Source Code
         | 
| 77 | 
            +
                    @spec.source_files = framework_contents('Headers/*')
         | 
| 78 | 
            +
                    @spec.public_header_files = framework_contents('Headers/*')
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                    # Unused for binary
         | 
| 81 | 
            +
                    spec_hash = @spec.to_hash
         | 
| 82 | 
            +
                    # spec_hash.delete('license')
         | 
| 83 | 
            +
                    spec_hash.delete('resource_bundles')
         | 
| 84 | 
            +
                    spec_hash.delete('exclude_files')
         | 
| 85 | 
            +
                    spec_hash.delete('preserve_paths')
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                    spec_hash.delete('vendored_libraries')
         | 
| 88 | 
            +
                    spec_hash['vendored_libraries'] = binary_vendored_libraries
         | 
| 89 | 
            +
             | 
| 90 | 
            +
             | 
| 91 | 
            +
                    platforms = spec_hash['platforms']
         | 
| 92 | 
            +
                    selected_platforms = platforms.select { |k, _v| @platforms.include?(k) }
         | 
| 93 | 
            +
                    spec_hash['platforms'] = selected_platforms.empty? ? platforms : selected_platforms
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                    @spec = Pod::Specification.from_hash(spec_hash)
         | 
| 96 | 
            +
                    @spec
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                  def create_from_code_spec_and_template_spec
         | 
| 100 | 
            +
                    @spec = template_spec.dup
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                    @spec.version = code_spec.version
         | 
| 103 | 
            +
                    @spec.source = binary_source
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                    @spec.source_files = binary_source_files
         | 
| 106 | 
            +
                    @spec.public_header_files = binary_public_header_files
         | 
| 107 | 
            +
                    @spec.vendored_libraries = binary_vendored_libraries
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                    @spec.resources = binary_resources if @spec.attributes_hash.keys.include?("resources")
         | 
| 110 | 
            +
             | 
| 111 | 
            +
             | 
| 112 | 
            +
             | 
| 113 | 
            +
                    @spec
         | 
| 114 | 
            +
                  end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                  def binary_source
         | 
| 117 | 
            +
                    { http: format(CBin.config.binary_download_url, code_spec.root.name, code_spec.version), type: CBin.config.download_file_type }
         | 
| 118 | 
            +
                  end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
                  def code_spec_consumer(_platform = :ios)
         | 
| 121 | 
            +
                    code_spec.consumer(:ios)
         | 
| 122 | 
            +
                  end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                  def framework_contents(name)
         | 
| 125 | 
            +
                    ["#{code_spec.root.name}.framework", "#{code_spec.root.name}.framework/Versions/A"].map { |path| "#{path}/#{name}" }
         | 
| 126 | 
            +
                  end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                  def binary_source_files
         | 
| 129 | 
            +
                    { http: format(CBin.config.binary_download_url, code_spec.root.name, code_spec.version), type: CBin.config.download_file_type }
         | 
| 130 | 
            +
                  end
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                  def binary_source_files
         | 
| 133 | 
            +
                    "bin_#{code_spec.name}_#{code_spec.version}/Headers/*"
         | 
| 134 | 
            +
                  end
         | 
| 135 | 
            +
             | 
| 136 | 
            +
                  def binary_public_header_files
         | 
| 137 | 
            +
                    "bin_#{code_spec.name}_#{code_spec.version}/Headers/*.h"
         | 
| 138 | 
            +
                  end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                  def binary_vendored_libraries
         | 
| 141 | 
            +
                    "bin_#{code_spec.name}_#{code_spec.version}/*.a"
         | 
| 142 | 
            +
                  end
         | 
| 143 | 
            +
             | 
| 144 | 
            +
                  def binary_resources
         | 
| 145 | 
            +
                    "bin_#{code_spec.name}_#{code_spec.version}/Resources/*"
         | 
| 146 | 
            +
                  end
         | 
| 147 | 
            +
             | 
| 148 | 
            +
                end
         | 
| 149 | 
            +
              end
         | 
| 150 | 
            +
            end
         | 
| @@ -0,0 +1,73 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'cocoapods-tj/native/sources_manager.rb'
         | 
| 4 | 
            +
            require 'cocoapods-tj/helpers/spec_creator'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module CBin
         | 
| 7 | 
            +
              module SpecFilesHelper
         | 
| 8 | 
            +
                def spec_files
         | 
| 9 | 
            +
                  @spec_files ||= Pathname.glob('*.podspec{,.json}')
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def binary_spec_files
         | 
| 13 | 
            +
                  @binary_spec_files ||= Pathname.glob('*.binary.podspec{,.json}')
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def binary_template_spec_files
         | 
| 17 | 
            +
                  @binary_spec_template_files ||= Pathname.glob('*.binary-template.podspec{,.json}')
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                def binary_template_spec_file
         | 
| 21 | 
            +
                  @binary_spec_template_file ||= binary_template_spec_files.first
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                def code_spec_files
         | 
| 25 | 
            +
                  @code_spec_files ||= spec_files - binary_spec_files - binary_template_spec_files
         | 
| 26 | 
            +
                end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                def code_spec
         | 
| 29 | 
            +
                  if code_spec_files.first
         | 
| 30 | 
            +
                    Pod::Specification.from_file(code_spec_files.first)
         | 
| 31 | 
            +
                 end
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                def binary_spec
         | 
| 35 | 
            +
                  if binary_spec_files.first
         | 
| 36 | 
            +
                    Pod::Specification.from_file(binary_spec_files.first)
         | 
| 37 | 
            +
                 end
         | 
| 38 | 
            +
                end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                def binary_template_spec
         | 
| 41 | 
            +
                  if binary_template_spec_file
         | 
| 42 | 
            +
                    Pod::Specification.from_file(binary_template_spec_file)
         | 
| 43 | 
            +
                 end
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                def find_spec_file(podspec)
         | 
| 47 | 
            +
                  path = Pathname(podspec)
         | 
| 48 | 
            +
                  raise Pod::Informative, "无法找到 #{podspec}" unless path.exist?
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  path
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                def create_binary_spec_file(code_spec, template_spec)
         | 
| 54 | 
            +
             | 
| 55 | 
            +
             | 
| 56 | 
            +
                  unless code_spec
         | 
| 57 | 
            +
                    raise Pod::Informative, '没有二进制 podspec 的情况下,必须要提供源码 podspec.'
         | 
| 58 | 
            +
                 end
         | 
| 59 | 
            +
                  if code_spec.subspecs.any? && template_spec.nil?
         | 
| 60 | 
            +
                    raise Pod::Informative, '拥有 subspec 的组件,在生成二进制 podspec 时,必须要提供模版 podspec.'
         | 
| 61 | 
            +
                 end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  @spec_creator = CBin::Specification::Creator.new(code_spec, template_spec)
         | 
| 64 | 
            +
                  @spec_creator.create
         | 
| 65 | 
            +
                  @spec_creator.write_spec_file
         | 
| 66 | 
            +
                  @spec_creator.filename
         | 
| 67 | 
            +
                end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                def clear_binary_spec_file_if_needed
         | 
| 70 | 
            +
                  @spec_creator&.clear_spec_file
         | 
| 71 | 
            +
                end
         | 
| 72 | 
            +
              end
         | 
| 73 | 
            +
            end
         | 
| @@ -0,0 +1,189 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'cocoapods'
         | 
| 4 | 
            +
            require 'cocoapods-tj/config/config'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module CBin
         | 
| 7 | 
            +
              class SpecificationSource
         | 
| 8 | 
            +
                class Creator
         | 
| 9 | 
            +
                  attr_reader :code_spec
         | 
| 10 | 
            +
                  attr_reader :spec
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def initialize(code_spec, platforms = 'ios')
         | 
| 13 | 
            +
                    @code_spec = code_spec
         | 
| 14 | 
            +
                    @platforms = Array(platforms)
         | 
| 15 | 
            +
                    validate!
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def validate!
         | 
| 19 | 
            +
                    raise Pod::Informative, '源码 podspec 不能为空 .' unless code_spec
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  def create
         | 
| 23 | 
            +
                    # spec = nil
         | 
| 24 | 
            +
                    if CBin::Build::Utils.is_framework(@code_spec)
         | 
| 25 | 
            +
                      spec = create_framework_from_code_spec
         | 
| 26 | 
            +
                    else
         | 
| 27 | 
            +
                      spec = create_from_code_spec
         | 
| 28 | 
            +
                    end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                    spec
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  def write_spec_file(file = filename)
         | 
| 34 | 
            +
                    create unless spec
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                    FileUtils.mkdir_p(CBin::Config::Builder.instance.binary_json_dir) unless File.exist?(CBin::Config::Builder.instance.binary_json_dir)
         | 
| 37 | 
            +
                    FileUtils.rm_rf(file) if File.exist?(file)
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    File.open(file, 'w+') do |f|
         | 
| 40 | 
            +
                      # f.write("# MARK: converted automatically by plugin cocoapods-tj @slj \r\n")
         | 
| 41 | 
            +
                      f.write(spec.to_pretty_json)
         | 
| 42 | 
            +
                    end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                    @filename = file
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  def clear_spec_file
         | 
| 48 | 
            +
                    File.delete(filename) if File.exist?(filename)
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  def filename
         | 
| 52 | 
            +
                    @filename ||= "#{CBin::Config::Builder.instance.binary_json_dir_name}/#{spec.name}.binary.podspec.json"
         | 
| 53 | 
            +
                  end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                  private
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                  def create_from_code_spec
         | 
| 58 | 
            +
                    @spec = code_spec.dup
         | 
| 59 | 
            +
             | 
| 60 | 
            +
                    extnames = []
         | 
| 61 | 
            +
                    extnames << '*.bundle' if code_spec_consumer.resource_bundles.any?
         | 
| 62 | 
            +
                    if code_spec_consumer.resources.any?
         | 
| 63 | 
            +
                      extnames += code_spec_consumer.resources.map { |r| File.basename(r) }
         | 
| 64 | 
            +
                    end
         | 
| 65 | 
            +
                    if extnames.any?
         | 
| 66 | 
            +
                      @spec.resources = framework_contents('Resources').flat_map { |r| extnames.map { |e| "#{r}/#{e}" } }
         | 
| 67 | 
            +
                    end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    # Source Location
         | 
| 70 | 
            +
                    @spec.source = binary_source
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                    # Source Code
         | 
| 73 | 
            +
                    # @spec.source_files = framework_contents('Headers/*')
         | 
| 74 | 
            +
                    # @spec.public_header_files = framework_contents('Headers/*')
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                    # Unused for binary
         | 
| 77 | 
            +
                    spec_hash = @spec.to_hash
         | 
| 78 | 
            +
                    # spec_hash.delete('license')
         | 
| 79 | 
            +
                    spec_hash.delete('resource_bundles')
         | 
| 80 | 
            +
                    spec_hash.delete('exclude_files')
         | 
| 81 | 
            +
                    spec_hash.delete('preserve_paths')
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                    spec_hash.delete('subspecs')
         | 
| 84 | 
            +
                    spec_hash.delete('default_subspecs')
         | 
| 85 | 
            +
                    spec_hash.delete('default_subspec')
         | 
| 86 | 
            +
                    spec_hash.delete('vendored_frameworks')
         | 
| 87 | 
            +
                    spec_hash.delete('vendored_framework')
         | 
| 88 | 
            +
             | 
| 89 | 
            +
             | 
| 90 | 
            +
                    spec_hash.delete('vendored_libraries')
         | 
| 91 | 
            +
             | 
| 92 | 
            +
             | 
| 93 | 
            +
                    platforms = spec_hash['platforms']
         | 
| 94 | 
            +
                    selected_platforms = platforms.select { |k, _v| @platforms.include?(k) }
         | 
| 95 | 
            +
                    spec_hash['platforms'] = selected_platforms.empty? ? platforms : selected_platforms
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                    @spec = Pod::Specification.from_hash(spec_hash)
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                    @spec.prepare_command = "" if @spec.prepare_command
         | 
| 100 | 
            +
                    @spec.version = code_spec.version
         | 
| 101 | 
            +
                    @spec.source = binary_source
         | 
| 102 | 
            +
                    @spec.source_files = binary_source_files
         | 
| 103 | 
            +
                    @spec.public_header_files = binary_public_header_files
         | 
| 104 | 
            +
                    @spec.vendored_libraries = binary_vendored_libraries
         | 
| 105 | 
            +
                    @spec.resources = binary_resources if @spec.attributes_hash.keys.include?("resources")
         | 
| 106 | 
            +
                    @spec.description = <<-EOF
         | 
| 107 | 
            +
                     「       」
         | 
| 108 | 
            +
                      #{@spec.description}
         | 
| 109 | 
            +
                    EOF
         | 
| 110 | 
            +
                    @spec
         | 
| 111 | 
            +
                  end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                  def create_framework_from_code_spec
         | 
| 114 | 
            +
                    @spec = code_spec.dup
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                    @spec.vendored_frameworks = "#{code_spec.root.name}.framework"
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                    extnames = []
         | 
| 119 | 
            +
                    extnames << '*.bundle' if code_spec_consumer.resource_bundles.any?
         | 
| 120 | 
            +
                    if code_spec_consumer.resources.any?
         | 
| 121 | 
            +
                      extnames += code_spec_consumer.resources.map { |r| File.basename(r) }
         | 
| 122 | 
            +
                    end
         | 
| 123 | 
            +
                    if extnames.any?
         | 
| 124 | 
            +
                      @spec.resources = framework_contents('Resources').flat_map { |r| extnames.map { |e| "#{r}/#{e}" } }
         | 
| 125 | 
            +
                    end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                    @spec.source = binary_source
         | 
| 128 | 
            +
             | 
| 129 | 
            +
                    spec_hash = @spec.to_hash
         | 
| 130 | 
            +
                    # spec_hash.delete('license')
         | 
| 131 | 
            +
                    spec_hash.delete('resource_bundles')
         | 
| 132 | 
            +
                    spec_hash.delete('exclude_files')
         | 
| 133 | 
            +
                    spec_hash.delete('preserve_paths')
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                    vendored_libraries = spec_hash.delete('vendored_libraries')
         | 
| 136 | 
            +
                    vendored_libraries = Array(vendored_libraries).reject { |l| l.end_with?('.a') }
         | 
| 137 | 
            +
                    if vendored_libraries.any?
         | 
| 138 | 
            +
                      spec_hash['vendored_libraries'] = vendored_libraries
         | 
| 139 | 
            +
                    end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                    platforms = spec_hash['platforms']
         | 
| 142 | 
            +
                    selected_platforms = platforms.select { |k, _v| @platforms.include?(k) }
         | 
| 143 | 
            +
                    spec_hash['platforms'] = selected_platforms.empty? ? platforms : selected_platforms
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                    @spec = Pod::Specification.from_hash(spec_hash)
         | 
| 146 | 
            +
                    @spec.description = <<-EOF
         | 
| 147 | 
            +
                     「       」
         | 
| 148 | 
            +
                      #{@spec.description}
         | 
| 149 | 
            +
                    EOF
         | 
| 150 | 
            +
                    @spec
         | 
| 151 | 
            +
                  end
         | 
| 152 | 
            +
             | 
| 153 | 
            +
             | 
| 154 | 
            +
                  def binary_source
         | 
| 155 | 
            +
                    { http: format(CBin.config.binary_download_url, code_spec.root.name, code_spec.version), type: CBin.config.download_file_type }
         | 
| 156 | 
            +
                  end
         | 
| 157 | 
            +
             | 
| 158 | 
            +
                  def code_spec_consumer(_platform = :ios)
         | 
| 159 | 
            +
                    code_spec.consumer(:ios)
         | 
| 160 | 
            +
                  end
         | 
| 161 | 
            +
             | 
| 162 | 
            +
                  def framework_contents(name)
         | 
| 163 | 
            +
                    ["#{code_spec.root.name}.framework", "#{code_spec.root.name}.framework/Versions/A"].map { |path| "#{path}/#{name}" }
         | 
| 164 | 
            +
                  end
         | 
| 165 | 
            +
             | 
| 166 | 
            +
                  def binary_source_files
         | 
| 167 | 
            +
                    { http: format(CBin.config.binary_download_url, code_spec.root.name, code_spec.version), type: CBin.config.download_file_type }
         | 
| 168 | 
            +
                  end
         | 
| 169 | 
            +
             | 
| 170 | 
            +
                  def binary_source_files
         | 
| 171 | 
            +
                    "bin_#{code_spec.name}_#{code_spec.version}/Headers/*"
         | 
| 172 | 
            +
                  end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                  def binary_public_header_files
         | 
| 175 | 
            +
                    "bin_#{code_spec.name}_#{code_spec.version}/Headers/*.h"
         | 
| 176 | 
            +
                  end
         | 
| 177 | 
            +
             | 
| 178 | 
            +
                  def binary_vendored_libraries
         | 
| 179 | 
            +
                    "bin_#{code_spec.name}_#{code_spec.version}/*.a"
         | 
| 180 | 
            +
                  end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                  def binary_resources
         | 
| 183 | 
            +
                    "bin_#{code_spec.name}_#{code_spec.version}/Resources/*"
         | 
| 184 | 
            +
                  end
         | 
| 185 | 
            +
             | 
| 186 | 
            +
                end
         | 
| 187 | 
            +
              end
         | 
| 188 | 
            +
            end
         | 
| 189 | 
            +
             | 
| @@ -0,0 +1,81 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
             | 
| 3 | 
            +
            # copy from https://github.com/CocoaPods/cocoapods-packager
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            require 'cocoapods-tj/native/podfile'
         | 
| 6 | 
            +
            require 'cocoapods/command/gen'
         | 
| 7 | 
            +
            require 'cocoapods/generate'
         | 
| 8 | 
            +
            require 'cocoapods-tj/helpers/framework_builder'
         | 
| 9 | 
            +
            require 'cocoapods-tj/helpers/library_builder'
         | 
| 10 | 
            +
            require 'cocoapods-tj/helpers/sources_helper'
         | 
| 11 | 
            +
            require 'cocoapods-tj/command/bin/spec/push'
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            module CBin
         | 
| 14 | 
            +
              class Upload
         | 
| 15 | 
            +
                class Helper
         | 
| 16 | 
            +
                  include CBin::SourcesHelper
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  def initialize(spec,code_dependencies,sources)
         | 
| 19 | 
            +
                    @spec = spec
         | 
| 20 | 
            +
                    @code_dependencies = code_dependencies
         | 
| 21 | 
            +
                    @sources = sources
         | 
| 22 | 
            +
                  end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  def upload
         | 
| 25 | 
            +
                    Dir.chdir(CBin::Config::Builder.instance.root_dir) do
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                      res_zip = curl_zip
         | 
| 28 | 
            +
                      if res_zip
         | 
| 29 | 
            +
                        filename = spec_creator
         | 
| 30 | 
            +
                        push_binary_repo(filename)
         | 
| 31 | 
            +
                      end
         | 
| 32 | 
            +
                      res_zip
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  def spec_creator
         | 
| 37 | 
            +
                    spec_creator = CBin::SpecificationSource::Creator.new(@spec)
         | 
| 38 | 
            +
                    spec_creator.create
         | 
| 39 | 
            +
                    spec_creator.write_spec_file
         | 
| 40 | 
            +
                    spec_creator.filename
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  def curl_zip
         | 
| 44 | 
            +
                    zip_file = "#{CBin::Config::Builder.instance.library_file(@spec)}.zip"
         | 
| 45 | 
            +
                    res = File.exist?(zip_file)
         | 
| 46 | 
            +
                    unless res
         | 
| 47 | 
            +
                      zip_file = CBin::Config::Builder.instance.framework_zip_file(@spec) + ".zip"
         | 
| 48 | 
            +
                      res = File.exist?(zip_file)
         | 
| 49 | 
            +
                    end
         | 
| 50 | 
            +
                    if res
         | 
| 51 | 
            +
                      `curl #{CBin.config.binary_upload_url} -F "name=#{@spec.name}" -F "version=#{@spec.version}" -F "annotate=#{@spec.name}_#{@spec.version}_log" -F "file=@#{zip_file}"` if res
         | 
| 52 | 
            +
                    end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                    res
         | 
| 55 | 
            +
                  end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
             | 
| 58 | 
            +
                  # 上传二进制 podspec
         | 
| 59 | 
            +
                  def push_binary_repo(binary_podsepc_json)
         | 
| 60 | 
            +
                    argvs = [
         | 
| 61 | 
            +
                        "#{binary_podsepc_json}",
         | 
| 62 | 
            +
                        "--binary",
         | 
| 63 | 
            +
                        "--sources=#{sources_option(@code_dependencies, @sources)},https:\/\/cdn.cocoapods.org",
         | 
| 64 | 
            +
                        "--skip-import-validation",
         | 
| 65 | 
            +
                        "--use-libraries",
         | 
| 66 | 
            +
                        "--allow-warnings",
         | 
| 67 | 
            +
                        "--verbose",
         | 
| 68 | 
            +
                        "--code-dependencies"
         | 
| 69 | 
            +
                    ]
         | 
| 70 | 
            +
                    if @verbose
         | 
| 71 | 
            +
                      argvs += ['--verbose']
         | 
| 72 | 
            +
                    end
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                    push = Pod::Command::Bin::Repo::Push.new(CLAide::ARGV.new(argvs))
         | 
| 75 | 
            +
                    push.validate!
         | 
| 76 | 
            +
                    push.run
         | 
| 77 | 
            +
                  end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                end
         | 
| 80 | 
            +
              end
         | 
| 81 | 
            +
            end
         | 
| @@ -0,0 +1,26 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Pod
         | 
| 4 | 
            +
              module Generator
         | 
| 5 | 
            +
                class Acknowledgements
         | 
| 6 | 
            +
                  def license_text(spec)
         | 
| 7 | 
            +
                    return nil unless spec.license
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                    text = spec.license[:text]
         | 
| 10 | 
            +
                    unless text
         | 
| 11 | 
            +
                      if license_file = spec.license[:file]
         | 
| 12 | 
            +
                        license_path = file_accessor(spec).root + license_file
         | 
| 13 | 
            +
                        if File.exist?(license_path)
         | 
| 14 | 
            +
                          text = IO.read(license_path)
         | 
| 15 | 
            +
                        else
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                        end
         | 
| 18 | 
            +
                      elsif license_file = file_accessor(spec).license
         | 
| 19 | 
            +
                        text = IO.read(license_file)
         | 
| 20 | 
            +
                      end
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
                    text
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'parallel'
         | 
| 4 | 
            +
            require 'cocoapods'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Pod
         | 
| 7 | 
            +
              class Installer
         | 
| 8 | 
            +
                class Analyzer
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  alias old_update_repositories update_repositories
         | 
| 11 | 
            +
                  def update_repositories
         | 
| 12 | 
            +
                    if installation_options.update_source_with_multi_processes
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                      Parallel.each(sources.uniq(&:url), in_processes: 4) do |source|
         | 
| 15 | 
            +
                        if source.git?
         | 
| 16 | 
            +
                          config.sources_manager.update(source.name, true)
         | 
| 17 | 
            +
                        else
         | 
| 18 | 
            +
                        end
         | 
| 19 | 
            +
                      end
         | 
| 20 | 
            +
                      @specs_updated = true
         | 
| 21 | 
            +
                    else
         | 
| 22 | 
            +
                      old_update_repositories
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
             | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            require 'macho'
         | 
| 2 | 
            +
            require 'cocoapods'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Pod
         | 
| 5 | 
            +
              class Sandbox
         | 
| 6 | 
            +
                class FileAccessor
         | 
| 7 | 
            +
                 def dynamic_binary?(binary)
         | 
| 8 | 
            +
                   @cached_dynamic_binary_results ||= {}
         | 
| 9 | 
            +
                   return @cached_dynamic_binary_results[binary] unless @cached_dynamic_binary_results[binary].nil?
         | 
| 10 | 
            +
                   return false unless binary.file?
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                   @cached_dynamic_binary_results[binary] = MachO.open(binary).dylib?
         | 
| 13 | 
            +
                 rescue MachO::MachOError
         | 
| 14 | 
            +
                   @cached_dynamic_binary_results[binary] = true
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                 end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            require 'cocoapods'
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module Pod
         | 
| 5 | 
            +
              class Installer
         | 
| 6 | 
            +
                class InstallationOptions
         | 
| 7 | 
            +
                  def self.env_option(key, default = true)
         | 
| 8 | 
            +
                    option key, ENV[key.to_s].nil? ? default : ENV[key.to_s] == 'true'
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                  defaults.delete('warn_for_multiple_pod_sources')
         | 
| 12 | 
            +
                  env_option :warn_for_multiple_pod_sources, false
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  env_option :warn_for_unsecure_source, false
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                  env_option :install_with_multi_threads, true
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                  env_option :update_source_with_multi_processes, true
         | 
| 19 | 
            +
                end
         | 
| 20 | 
            +
              end
         | 
| 21 | 
            +
            end
         |