lib/cocoapods-tdfire-binary/command/package.rb in cocoapods-tdfire-binary-1.0.6 vs lib/cocoapods-tdfire-binary/command/package.rb in cocoapods-tdfire-binary-1.0.7

- old
+ new

@@ -1,7 +1,8 @@ require 'colored2' require 'fileutils' +require 'cocoapods_packager' require 'cocoapods-tdfire-binary/binary_url_manager' require 'cocoapods-tdfire-binary/binary_specification_refactor' module Pod class Command @@ -15,15 +16,19 @@ def self.options [ ['--clean', '执行成功后,删除 zip 文件外的所有生成文件'], ['--spec-sources', '私有源地址'], + # ['--local', '使用本地代码'], + ['--use-carthage', 'carthage使用carthage进行打包'], ].concat(super) end def initialize(argv) @clean = argv.flag?('clean') + @local = argv.flag?('local') + @use_carthage = argv.flag?('use-carthage') @spec_sources = argv.option('spec-sources') @spec_file = first_podspec super end @@ -31,20 +36,44 @@ super help! '当前目录下没有podspec文件.' if @spec_file.nil? end def run + # 组件有多个 platform 时,限制 cocoapods-packager 只打 ios 代码 + Pod::Tdfire::BinaryStateStore.limit_platform = true + spec = Specification.from_file(@spec_file) + prepare(spec) package(spec) zip(spec) + + Pod::Tdfire::BinaryStateStore.limit_platform = false end private + def prepare(spec) + UI.section("Tdfire: prepare for packaging ...") do + clean(spec) + end + end + def package(spec) UI.section("Tdfire: package #{spec.name} ...") do - system "pod package #{spec.name}.podspec --exclude-deps --force --no-mangle --spec-sources=#{@spec_sources || Pod::Tdfire::BinaryUrlManager.private_cocoapods_url}" + argvs = [ + "#{spec.name}.podspec", + "--exclude-deps", + "--force", + "--no-mangle", + "--spec-sources=#{@spec_sources || Pod::Tdfire::BinaryUrlManager.private_cocoapods_url}", + ] + + argvs << "--local" if @local + + package = Pod::Command::Package.new(CLAide::ARGV.new(argvs)) + package.validate! + package.run end end def zip(spec) framework_directory = "#{spec.name}-#{spec.version}/ios" @@ -54,11 +83,11 @@ raise Informative, "没有需要压缩的 framework 文件:#{framework_path}" unless File.exist?(framework_path) # cocoapods-packager 使用了 --exclude-deps 后,虽然没有把 dependency 的符号信息打进可执行文件,但是它把 dependency 的 bundle 给拷贝过来了 (builder.rb 229 copy_resources) # 这里把多余的 bundle 删除 # https://github.com/CocoaPods/cocoapods-packager/pull/199 - resource_bundles = spec.all_hash_value_for_attribute('resource_bundles').keys.flatten.uniq + resource_bundles = spec.tdfire_recursive_value('resource_bundles').map(&:keys).flatten.uniq FileUtils.chdir("#{framework_path}/Versions/A/Resources") do dependency_bundles = Dir.glob('*.bundle').select { |b| !resource_bundles.include?(b.split('.').first) } unless dependency_bundles.empty? Pod::UI::puts "Tdfire: remove dependency bundles: #{dependency_bundles.join(', ')}" @@ -76,10 +105,17 @@ end end Pod::UI::puts "Tdfire: save framework zip file to #{Dir.pwd}/#{output_name}".green - system "rm -fr #{spec.name}-#{@spec.version}" if @clean + clean(spec) if @clean + end + + def clean(spec) + file = "#{spec.name}-#{spec.version}" + + UI.message "Tdfire: cleaning #{file}" + system "rm -fr #{spec.name}-#{spec.version}" if File.exist?(file) end end end end \ No newline at end of file