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