class Pod::Command::Bin::Archive

Public Class Methods

missing_binary_specs(missing_binary_specs) click to toggle source

解析器传过来的

# File lib/cocoapods-tdf-bin/command/bin/archive.rb, line 158
def Archive.missing_binary_specs(missing_binary_specs)
  @@missing_binary_specs = missing_binary_specs unless @build_finshed
end
new(argv) click to toggle source
Calls superclass method Pod::Command::Bin::new
# File lib/cocoapods-tdf-bin/command/bin/archive.rb, line 43
def initialize(argv)
  @env = argv.option('env') || 'dev'
  CBin.config.set_configuration_env(@env)
  UI.warn "====== cocoapods-tdf-bin #{CBin::VERSION} 版本 ======== \n "
  UI.warn "======  #{@env} 环境 ======== \n "

  @code_dependencies = argv.flag?('code-dependencies')
  @framework_output = argv.flag?('framework-output', false )
  @clean = argv.flag?('no-clean', false)
  @zip = argv.flag?('zip', true)
  @all_make = argv.flag?('all-make', false )
  @use_modular_headers = argv.flag?('use-modular-headers', false )
  @sources = argv.option('sources') || []
  @platform = Platform.new(:ios)

  @config = argv.option('configuration', 'Release')

  @framework_path
  super

  @additional_args = argv.remainder!
  @build_finshed = false

end
options() click to toggle source
Calls superclass method
# File lib/cocoapods-tdf-bin/command/bin/archive.rb, line 25
def self.options
  [
      ['--all-make', '对该组件的依赖库,全部制作为二进制组件'],
      ['--code-dependencies', '使用源码依赖'],
      ['--no-clean', '保留构建中间产物'],
      ['--sources', '私有源地址,多个用分号区分'],
      ['--framework-output', '输出framework文件'],
      ['--no-zip', '不压缩静态库 为 zip'],
      ['--use-modular-headers', '使用modular-headers打包'],
      ['--configuration', 'Build the specified configuration (e.g. Debug). Defaults to Release'],
      ['--env', "该组件上传的环境 %w[dev debug_iphoneos release_iphoneos]"]
  ].concat(Pod::Command::Gen.options).concat(super).uniq
end

Public Instance Methods

build_dependencies() click to toggle source
# File lib/cocoapods-tdf-bin/command/bin/archive.rb, line 101
def build_dependencies
  @build_finshed = true
  #如果没要求,就清空依赖库数据
  source_specs = []
  @@missing_binary_specs.uniq.each do |spec|
    next if spec.name.include?('/')
    next if spec.name == @spec.name
    # 过滤白名单
    next if CBin::Config::Builder.instance.white_pod_list.include?(spec.name)
    # 在编译名单里面才编译
    if CBin::Config::Builder.instance.build_pod_list.length != 0
      next unless CBin::Config::Builder.instance.build_pod_list.include?(spec.name)
    end

    #过滤 git
    if spec.source[:git] && spec.source[:git]
      spec_git = spec.source[:git]
      spec_git_res = false
      CBin::Config::Builder.instance.ignore_git_list.each do |ignore_git|
        spec_git_res = spec_git.include?(ignore_git)
        break if spec_git_res
      end
      next if spec_git_res
    end
    UI.warn "#{spec.name}.podspec 带有 vendored_frameworks 字段,请检查是否有效!!!" if spec.attributes_hash['vendored_frameworks']
    next if spec.attributes_hash['vendored_frameworks'] && @spec.name != spec.name #过滤带有vendored_frameworks的
    next if spec.attributes_hash['ios.vendored_frameworks'] && @spec.name != spec.name #过滤带有vendored_frameworks的
    #获取没有制作二进制版本的spec集合
    source_specs << spec
  end

  fail_build_specs = []
  source_specs.uniq.each do |spec|
    begin
      builder = CBin::Build::Helper.new(spec,
                                        @platform,
                                        @framework_output,
                                        @zip,
                                        @spec,
                                        false ,
                                        @config)
      builder.build
    rescue Object => exception
      UI.puts exception
      fail_build_specs << spec
    end
  end

  if fail_build_specs.any?
    fail_build_specs.uniq.each do |spec|
      UI.warn "【#{spec.name} | #{spec.version}】组件二进制版本编译失败 ."
    end
  end
  source_specs - fail_build_specs
end
build_root_spec() click to toggle source
# File lib/cocoapods-tdf-bin/command/bin/archive.rb, line 84
def build_root_spec
  source_specs = []
  builder = CBin::Build::Helper.new(@spec,
                                    @platform,
                                    @framework_output,
                                    @zip,
                                    @spec,
                                    CBin::Config::Builder.instance.white_pod_list.include?(@spec.name),
                                    @config)

  builder.build
  builder.clean_workspace if @clean && !@all_make
  source_specs << @spec unless CBin::Config::Builder.instance.white_pod_list.include?(@spec.name)

  source_specs
end
run() click to toggle source
# File lib/cocoapods-tdf-bin/command/bin/archive.rb, line 68
def run
  #清除之前的缓存
  zip_dir = CBin::Config::Builder.instance.zip_dir
  FileUtils.rm_rf(zip_dir) if File.exist?(zip_dir)

  @spec = Specification.from_file(spec_file)

  generate_project

  source_specs = Array.new
  source_specs.concat(build_root_spec)
  source_specs.concat(build_dependencies) if @all_make

  source_specs
end

Private Instance Methods

generate_project() click to toggle source
# File lib/cocoapods-tdf-bin/command/bin/archive.rb, line 164
def generate_project
  Podfile.execute_with_bin_plugin do
    Podfile.execute_with_use_binaries(!@code_dependencies) do
        argvs = [
          "--sources=#{sources_option(@code_dependencies, @sources)}",
          "--gen-directory=#{CBin::Config::Builder.instance.gen_dir}",
          '--clean',
          *@additional_args
        ]

        if @use_modular_headers
          argvs += ['--use-modular-headers']
        end

        # podfile = File.join(Pathname.pwd, "Podfile")

        # unless File.exist?(podfile)
        #   podfile = File.join(Pathname.pwd, "Example/Podfile")
        # end

        # podfile_instance = Pod::Podfile.from_file(podfile)
        # podfile_instance.use_frameworks!(:linkage => :static)
        # podfile_instance.to_yaml

        # if File.exist?(podfile)
        #   argvs += ['--use-podfile', "--podfile-path=#{podfile}"]
        # end

        argvs << spec_file if spec_file

        gen = Pod::Command::Gen.new(CLAide::ARGV.new(argvs))
        gen.validate!
        gen.run
    end
  end
end
spec_file() click to toggle source
# File lib/cocoapods-tdf-bin/command/bin/archive.rb, line 202
def spec_file
  @spec_file ||= begin
                   if @podspec
                     find_spec_file(@podspec)
                   else
                     if code_spec_files.empty?
                       raise Informative, '当前目录下没有找到可用源码 podspec.'
                     end

                     spec_file = code_spec_files.first
                     spec_file
                   end
                 end
end