cocoapods-mtxx-bin 0.0.13 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (29) hide show
  1. checksums.yaml +4 -4
  2. data/lib/cocoapods-mtxx-bin/command/bin/buildAll.rb +45 -23
  3. data/lib/cocoapods-mtxx-bin/command/bin/init.rb +14 -36
  4. data/lib/cocoapods-mtxx-bin/command/bin/lock/dependency.rb +82 -0
  5. data/lib/cocoapods-mtxx-bin/command/bin/lock/spec_repo.rb +105 -0
  6. data/lib/cocoapods-mtxx-bin/command/bin/lock/version.rb +41 -0
  7. data/lib/cocoapods-mtxx-bin/command/bin/lock.rb +36 -0
  8. data/lib/cocoapods-mtxx-bin/command/bin/outputSource.rb +18 -11
  9. data/lib/cocoapods-mtxx-bin/command/bin/upload.rb +2 -2
  10. data/lib/cocoapods-mtxx-bin/command/bin.rb +11 -12
  11. data/lib/cocoapods-mtxx-bin/config/config.rb +24 -49
  12. data/lib/cocoapods-mtxx-bin/config/config_asker.rb +1 -4
  13. data/lib/cocoapods-mtxx-bin/gem_version.rb +1 -1
  14. data/lib/cocoapods-mtxx-bin/helpers/buildAll/bin_helper.rb +11 -0
  15. data/lib/cocoapods-mtxx-bin/helpers/buildAll/builder.rb +44 -39
  16. data/lib/cocoapods-mtxx-bin/helpers/buildAll/podspec_util.rb +11 -8
  17. data/lib/cocoapods-mtxx-bin/helpers/buildAll/zip_file_helper.rb +17 -13
  18. data/lib/cocoapods-mtxx-bin/helpers/pod_size_helper.rb +30 -12
  19. data/lib/cocoapods-mtxx-bin/native/installer.rb +8 -7
  20. data/lib/cocoapods-mtxx-bin/native/podfile.rb +8 -0
  21. data/lib/cocoapods-mtxx-bin/native/podfile_env.rb +1 -0
  22. data/lib/cocoapods-mtxx-bin/native/resolver.rb +31 -32
  23. data/lib/cocoapods-mtxx-bin/native/sources_manager.rb +2 -1
  24. data/lib/cocoapods-mtxx-bin/source_provider_hook.rb +4 -2
  25. metadata +6 -6
  26. data/lib/cocoapods-mtxx-bin/command/bin/imy.rb +0 -45
  27. data/lib/cocoapods-mtxx-bin/command/bin/initHotKey.rb +0 -70
  28. data/lib/cocoapods-mtxx-bin/config/config_hot_key.rb +0 -103
  29. data/lib/cocoapods-mtxx-bin/config/config_hot_key_asker.rb +0 -57
@@ -3,7 +3,6 @@ require 'cocoapods-mtxx-bin/native/podfile'
3
3
  require 'cocoapods-mtxx-bin/native/podfile_env'
4
4
  require 'cocoapods/generate'
5
5
 
6
-
7
6
  module CBin
8
7
  class Config
9
8
  def config_file
@@ -13,11 +12,9 @@ module CBin
13
12
  def template_hash
14
13
  {
15
14
  'configuration_env' => { description: '编译环境', default: 'dev', selection: %w[dev debug_iphoneos release_iphoneos] },
16
- 'code_repo_url_list' => { description: '源码私有源 Git 地址,多个私有源用分号区分', default: 'git@techgit.meitu.com:iMeituPic/mtsourcespecs.git' },
17
- 'binary_repo_url' => { description: '二进制私有源 Git 地址', default: 'git@techgit.meitu.com:iMeituPic/mtbinaryspecs.git' },
18
- 'binary_upload_url' => { description: '二进制文件上传地址', default: 'http://pre.intapi.xiuxiu.meitu.com/internal/file/upload.json' },
19
- # 'binary_type' => { description: '二进制打包类型', default: 'framework', selection: %w[framework library] },
20
- 'binary_download_url' => { description: '二进制文件下载地址,内部会依次传入组件名称与版本,替换字符串中的 %s', default: 'https://manhattan-test.obs.cn-north-4.myhuaweicloud.com:443/ios/binary' },
15
+ 'binary_repo_url' => { description: '二进制podspec私有源地址', default: 'git@github.com:Zhangyanshen/example-private-spec-bin.git' },
16
+ 'binary_upload_url' => { description: '二进制文件上传地址', default: 'http://localhost:8080/frameworks' },
17
+ 'binary_download_url' => { description: '二进制文件下载地址,后面会依次传入Xcode版本、configuration、组件名称与组件版本', default: 'http://localhost:8080/frameworks' },
21
18
  'download_file_type' => { description: '二进制文件类型', default: 'zip', selection: %w[zip tgz tar tbz txz dmg] }
22
19
  }
23
20
  end
@@ -26,32 +23,15 @@ module CBin
26
23
  file = config_dev_file
27
24
  if configuration_env == "release_iphoneos"
28
25
  file = config_release_iphoneos_file
29
- # puts "====== #{configuration_env} 环境 ========"
30
26
  elsif configuration_env == "debug_iphoneos"
31
27
  file = config_debug_iphoneos_file
32
- # puts "====== #{configuration_env} 环境 ========"
33
28
  elsif configuration_env == "dev"
34
- # puts "====== #{configuration_env} 环境 ========"
29
+ file = config_dev_file
35
30
  else
36
31
  raise "===== #{configuration_env} %w[dev debug_iphoneos release_iphoneos]===="
37
32
  end
38
33
 
39
- # File.expand_path("#{Pod::Config.instance.home_dir}/#{file}")
40
- File.expand_path("#{binary_dir}/#{file}")
41
- end
42
-
43
- def config_file_with_configuration_env_list(configuration_env)
44
- file = config_dev_file
45
- # File.expand_path("#{Pod::Config.instance.home_dir}/#{file}")
46
- File.expand_path("#{binary_dir}/#{file}")
47
- end
48
-
49
- def binary_dir
50
- @binary_dir ||= begin
51
- binary_dir = "#{Pod::Config.instance.project_root}/binary"
52
- FileUtils.mkdir(binary_dir) unless File.exist?(binary_dir)
53
- binary_dir
54
- end
34
+ File.expand_path("#{Pod::Config.instance.project_root}/#{file}")
55
35
  end
56
36
 
57
37
  def configuration_env
@@ -66,13 +46,14 @@ module CBin
66
46
  @configuration_env
67
47
  end
68
48
 
69
- #上传的url
49
+ # 上传二进制的url
70
50
  def binary_upload_url_str
71
51
  CBin.config.binary_upload_url
72
52
  end
73
53
 
54
+ # 下载二进制的url
74
55
  def binary_download_url_str
75
- binary_download_url
56
+ CBin.config.binary_download_url
76
57
  end
77
58
 
78
59
  def set_configuration_env(env)
@@ -81,40 +62,29 @@ module CBin
81
62
 
82
63
  #包含arm64 armv7架构,xcodebuild 是Debug模式
83
64
  def config_debug_iphoneos_file
84
- "bin_debug_iphoneos.yml"
65
+ ".bin_debug_iphoneos.yml"
85
66
  end
86
67
  #包含arm64 armv7架构,xcodebuild 是Release模式
87
68
  def config_release_iphoneos_file
88
- "bin_release_iphoneos.yml"
69
+ ".bin_release_iphoneos.yml"
89
70
  end
90
71
  #包含x86 arm64 armv7架构,xcodebuild 是Release模式
91
72
  def config_dev_file
92
- "bin_dev.yml"
73
+ ".bin_dev.yml"
93
74
  end
94
75
 
76
+ # 配置信息写入文件
95
77
  def sync_config(config)
96
78
  File.open(config_file_with_configuration_env(config['configuration_env']), 'w+') do |f|
97
79
  f.write(config.to_yaml)
98
80
  end
99
81
  end
100
82
 
101
- def config_old
102
- configTo = {}
103
- text_list = IO.readlines(config_file_with_configuration_env_list("dev"))
104
- text_list.delete("---\n")
105
- text_list.each { |text|
106
- textTo = text.strip
107
- list = textTo.split(": ")
108
- configTo[list.first] = list.last
109
- }
110
- configTo
111
- end
112
-
113
- def sync_config_code_repo_url_list(config)
114
- File.open(config_file_with_configuration_env_list(config['code_repo_url_list']), 'w+') do |f|
115
- f.write(config.to_yaml)
116
- end
117
- end
83
+ # def sync_config_code_repo_url_list(config)
84
+ # File.open(config_file_with_configuration_env_list(config['code_repo_url_list']), 'w+') do |f|
85
+ # f.write(config.to_yaml)
86
+ # end
87
+ # end
118
88
 
119
89
  def default_config
120
90
  @default_config ||= Hash[template_hash.map { |k, v| [k, v[:default]] }]
@@ -164,11 +134,16 @@ module CBin
164
134
  super
165
135
  end
166
136
  end
137
+
138
+ public
139
+
140
+ # 判断配置文件是否存在
141
+ def config_file_exist?
142
+ raise Pod::Informative, "当前目录下没有配置文件,请先执行`pod bin init`" unless File.exist?(config_file)
143
+ end
167
144
  end
168
145
 
169
146
  def self.config
170
147
  @config ||= Config.new
171
148
  end
172
-
173
-
174
149
  end
@@ -37,7 +37,7 @@ module CBin
37
37
  answer
38
38
  end
39
39
 
40
- def wellcome_message
40
+ def welcome_message
41
41
  print <<~EOF
42
42
 
43
43
  设置插件配置信息.
@@ -52,9 +52,6 @@ module CBin
52
52
  def done_message
53
53
  print "\n设置完成.\n".green
54
54
  end
55
- def done_message_update
56
- print "\n更新完成.\n".green
57
- end
58
55
  end
59
56
  end
60
57
  end
@@ -1,5 +1,5 @@
1
1
  module CBin
2
- VERSION = "0.0.13"
2
+ VERSION = "1.0.0"
3
3
  end
4
4
 
5
5
  module Pod
@@ -18,6 +18,7 @@ module CBin
18
18
  spec.include?(pod_name) && !spec.include?('/Binary')
19
19
  }.sort!
20
20
  specs << xcode_version
21
+ specs << configuration
21
22
  specs_str = specs.join('')
22
23
  specs_str_md5 = Digest::MD5.hexdigest(specs_str)[0,6]
23
24
  @specs_str_md5_hash[pod_name] = specs_str_md5
@@ -32,12 +33,22 @@ module CBin
32
33
  `xcodebuild -version`.split(' ').join('')
33
34
  end
34
35
  end
36
+
37
+ def configuration
38
+ @configuration ||= begin
39
+ Pod::Config.instance.podfile.configuration
40
+ end
41
+ end
35
42
 
36
43
  def self.xcode_version
37
44
  xcode_version = `xcodebuild -version`.split(' ').join('')
38
45
  xcode_version
39
46
  end
40
47
 
48
+ def self.configuration
49
+ Pod::Config.instance.podfile.configuration
50
+ end
51
+
41
52
  end
42
53
  end
43
54
  end
@@ -4,47 +4,54 @@ module CBin
4
4
  class Builder
5
5
  include Pod
6
6
 
7
- def initialize(pod_target, checkout_sources)
7
+ def initialize(pod_target, checkout_sources, skip_simulator = false, configuration = 'Debug')
8
8
  @pod_target = pod_target
9
9
  @checkout_sources = checkout_sources
10
+ @skip_simulator = skip_simulator
11
+ @configuration = configuration
10
12
  @file_accessors = pod_target.file_accessors unless pod_target.nil?
11
13
  @base_dir = "#{Pathname.pwd}/build_pods"
12
14
  end
13
15
 
14
16
  # 构建
15
17
  def build
16
- UI.info "编译#{@pod_target}".yellow
18
+ UI.info "编译`#{@pod_target}`".yellow
17
19
  dir = result_product_dir
18
20
  FileUtils.rm_rf(dir) if File.exist?(dir)
19
21
  # 编译模拟器
20
- result = build_pod_target
21
- return false unless result
22
+ unless @skip_simulator
23
+ result = build_pod_target
24
+ return false unless result
25
+ end
22
26
  # 编译真机
23
- build_pod_target(false )
27
+ build_pod_target(false)
24
28
  end
25
29
 
26
30
  # 创建binary
27
31
  def create_binary
28
- UI.info "创建#{@pod_target}.framework".yellow
32
+ UI.info "创建`#{@pod_target.framework_name}`".yellow
29
33
  # 如果是framework需要先copy
30
- if build_as_framework
34
+ if build_as_framework?
31
35
  copy_framework
32
36
  else
33
37
  create_framework_dir
34
- end
35
- # 合并真机模拟器
36
- merge_device_sim
37
- # 如果是lib需要拷贝头文件
38
- unless build_as_framework
39
38
  copy_headers
40
39
  copy_headers(false )
41
40
  generate_umbrella_header
42
41
  generate_module_map
43
42
  compile_resources
44
43
  if @pod_target.uses_swift?
45
- copy_swiftmodules
44
+ copy_iphoneos_swiftmodules
45
+ copy_simulator_swiftmodules unless @skip_simulator
46
+ end
47
+ if @skip_simulator
48
+ device_lib = "#{product_dir}/#{iphoneos}/#{@pod_target}/#{@pod_target.static_library_name}"
49
+ output = "#{result_product_dir}/#{@pod_target.product_module_name}"
50
+ `cp -f #{device_lib} #{output}`
46
51
  end
47
52
  end
53
+ # 合并真机模拟器
54
+ merge_device_sim unless @skip_simulator
48
55
  # 拷贝资源文件
49
56
  copy_resources
50
57
  # 拷贝 vendored_frameworks 和 vendored_libraries
@@ -53,7 +60,7 @@ module CBin
53
60
  end
54
61
 
55
62
  # 是否以framework形式构建
56
- def build_as_framework
63
+ def build_as_framework?
57
64
  path = "#{product_dir}/#{iphoneos}/#{@pod_target}/#{@pod_target.framework_name}"
58
65
  File.exist?(path)
59
66
  end
@@ -94,16 +101,12 @@ module CBin
94
101
  "#{@base_dir}/#{@pod_target}/Temp"
95
102
  end
96
103
 
97
- def configuration
98
- "Debug"
99
- end
100
-
101
104
  def iphoneos
102
- "#{configuration}-iphoneos"
105
+ "#{@configuration}-iphoneos"
103
106
  end
104
107
 
105
108
  def iphonesimulator
106
- "#{configuration}-iphonesimulator"
109
+ "#{@configuration}-iphonesimulator"
107
110
  end
108
111
 
109
112
  # 需要排除的资源文件后缀
@@ -134,15 +137,14 @@ CONFIGURATION_TEMP_DIR=#{temp_dir} \
134
137
  BUILD_ROOT=#{product_dir} \
135
138
  BUILD_DIR=#{product_dir} \
136
139
  clean build \
137
- -configuration #{configuration} \
140
+ -configuration #{@configuration} \
138
141
  -target #{@pod_target} \
139
142
  -project #{project}
140
143
  BUILD
141
144
  UI.info "#{command}"
142
145
  output = `#{command}`
143
- # puts output
144
146
  if $CHILD_STATUS.exitstatus != 0
145
- UI.info "#{@pod_target}(#{sdk}) 编译失败!".red
147
+ UI.info "`#{@pod_target}(#{sdk})`编译失败!".red
146
148
  error_log_file = "#{temp_dir}/#{@pod_target}_error.log"
147
149
  File.open(error_log_file, "w+") do |f|
148
150
  f.write(output)
@@ -154,7 +156,7 @@ clean build \
154
156
 
155
157
  # 合并真机模拟器
156
158
  def merge_device_sim
157
- if build_as_framework
159
+ if build_as_framework?
158
160
  device_lib_dir = "#{product_dir}/#{iphoneos}/#{@pod_target}/#{@pod_target.framework_name}/#{@pod_target.product_module_name}"
159
161
  sim_lib_dir = "#{product_dir}/#{iphonesimulator}/#{@pod_target}/#{@pod_target.framework_name}/#{@pod_target.product_module_name}"
160
162
  else
@@ -317,30 +319,33 @@ ibtool \
317
319
  if File.exist?(source_path)
318
320
  `rsync -av #{source_path} #{product_dir}`
319
321
  end
320
- # 如果包含Swift代码,需要copy swiftmodules
322
+ # 如果包含Swift代码且需要编译模拟器,则copy模拟器swiftmodules
321
323
  if @pod_target.uses_swift?
322
- copy_swiftmodules
324
+ copy_simulator_swiftmodules unless @skip_simulator
323
325
  end
324
326
  end
325
327
 
326
- # 拷贝swiftmodule
327
- def copy_swiftmodules
328
- if build_as_framework
329
- swift_module = "#{modules_dir}/#{@pod_target.product_module_name}.swiftmodule"
330
- src_swift = "#{product_dir}/#{iphonesimulator}/#{@pod_target}/#{@pod_target.framework_name}/Modules/#{@pod_target.product_module_name}.swiftmodule"
328
+ # 拷贝真机swiftmodules(只用于static library)
329
+ def copy_iphoneos_swiftmodules
330
+ FileUtils.mkdir(modules_dir) unless File.exist?(modules_dir)
331
+ `cp -rf #{product_dir}/#{iphoneos}/#{@pod_target}/#{@pod_target.product_module_name}.swiftmodule #{modules_dir}`
332
+ end
333
+
334
+ # 拷贝模拟器swiftmodules
335
+ def copy_simulator_swiftmodules
336
+ target_swift_module = "#{modules_dir}/#{@pod_target.product_module_name}.swiftmodule"
337
+ if build_as_framework?
338
+ src_swift_module = "#{product_dir}/#{iphonesimulator}/#{@pod_target}/#{@pod_target.framework_name}/Modules/#{@pod_target.product_module_name}.swiftmodule"
331
339
  else
332
- FileUtils.mkdir(modules_dir) unless File.exist?(modules_dir)
333
- `cp -rf #{product_dir}/#{iphoneos}/#{@pod_target}/#{@pod_target.product_module_name}.swiftmodule #{modules_dir}`
334
- swift_module = "#{modules_dir}/#{@pod_target.product_module_name}.swiftmodule"
335
- src_swift = "#{product_dir}/#{iphonesimulator}/#{@pod_target}/#{@pod_target.product_module_name}.swiftmodule"
340
+ src_swift_module = "#{product_dir}/#{iphonesimulator}/#{@pod_target}/#{@pod_target.product_module_name}.swiftmodule"
336
341
  end
337
- if File.exist?(swift_module)
338
- `cp -af #{src_swift}/* #{swift_module}`
339
- `cp -af #{src_swift}/Project/* #{swift_module}/Project`
342
+ if File.exist?(target_swift_module)
343
+ `cp -af #{src_swift_module}/* #{target_swift_module}`
344
+ `cp -af #{src_swift_module}/Project/* #{target_swift_module}/Project`
340
345
  end
341
346
  end
342
347
 
343
- # -------------------------- LLVM module --------------------------------
348
+ # -------------------------- clang module --------------------------------
344
349
 
345
350
  # 生成 module map
346
351
  def generate_module_map
@@ -4,15 +4,16 @@ module CBin
4
4
  class PodspecUtil
5
5
  include Pod
6
6
 
7
- def initialize(pod_target, version, build_as_framework = false )
7
+ def initialize(pod_target, version, build_as_framework = false, configuration = 'Debug')
8
8
  @pod_target = pod_target
9
9
  @version = version
10
10
  @build_as_framework = build_as_framework
11
+ @configuration = configuration
11
12
  end
12
13
 
13
14
  # 创建二进制podspec
14
15
  def create_binary_podspec
15
- UI.info "创建二进制podspec:#{@pod_target}".yellow
16
+ UI.info "创建二进制podspec:`#{@pod_target}`".yellow
16
17
  spec = @pod_target.root_spec.to_hash
17
18
  root_dir = @pod_target.framework_name
18
19
  # 处理版本号
@@ -45,7 +46,7 @@ module CBin
45
46
 
46
47
  # podspec写入文件
47
48
  def write_binary_podspec(spec)
48
- UI.info "写入podspec:#{@pod_target}".yellow
49
+ UI.info "写入podspec:`#{@pod_target}`".yellow
49
50
  podspec_dir = "#{Pathname.pwd}/build_pods/#{@pod_target}/Products/podspec"
50
51
  FileUtils.mkdir(podspec_dir) unless File.exist?(podspec_dir)
51
52
  file = "#{podspec_dir}/#{@pod_target.pod_name}.podspec.json"
@@ -59,7 +60,7 @@ module CBin
59
60
 
60
61
  # 上传二进制podspec
61
62
  def push_binary_podspec(binary_podsepc_json)
62
- UI.info "推送podspec:#{@pod_target}".yellow
63
+ UI.info "推送podspec:`#{@pod_target}`".yellow
63
64
  return unless File.exist?(binary_podsepc_json)
64
65
  repo_name = Pod::Config.instance.sources_manager.binary_source.name
65
66
  # repo_name = 'example-private-spec-bin'
@@ -69,8 +70,10 @@ module CBin
69
70
  push = Pod::Command::Repo::Push.new(CLAide::ARGV.new(argvs))
70
71
  push.validate!
71
72
  push.run
73
+ return true
72
74
  rescue Pod::StandardError => e
73
- UI.info "推送podspec:#{@pod_target} 失败,#{e.to_s}".red
75
+ UI.info "推送podspec:`#{@pod_target}`失败,#{e.to_s}".red
76
+ return false
74
77
  end
75
78
  end
76
79
 
@@ -118,9 +121,9 @@ module CBin
118
121
  end
119
122
 
120
123
  def source
121
- # url = "http://localhost:8080/frameworks/#{@pod_target.root_spec.module_name}/#{version}/zip"
122
- url = "#{CBin.config.binary_download_url_str}/#{BinHelper.xcode_version}/#{@pod_target.root_spec.module_name}/#{version}/#{@pod_target.root_spec.module_name}.framework_#{version}.zip"
123
- { http: url, type: 'zip' }
124
+ # url = "http://localhost:8080/frameworks/#{BinHelper.xcode_version}/#{@pod_target.root_spec.module_name}/#{version}/zip"
125
+ url = "#{CBin.config.binary_download_url_str}/#{BinHelper.xcode_version}/#{@configuration}/#{@pod_target.root_spec.module_name}/#{version}/#{@pod_target.framework_name}_#{version}.zip"
126
+ { http: url, type: CBin.config.download_file_type }
124
127
  end
125
128
 
126
129
  def version
@@ -6,11 +6,12 @@ module CBin
6
6
  class ZipFileHelper
7
7
  include Pod
8
8
 
9
- def initialize(pod_target, version, product_dir, build_as_framework = false)
9
+ def initialize(pod_target, version, product_dir, build_as_framework = false, configuration = 'Debug')
10
10
  @pod_target = pod_target
11
11
  @version = version
12
12
  @product_dir = product_dir
13
13
  @build_as_framework = build_as_framework
14
+ @configuration = configuration
14
15
  end
15
16
 
16
17
  # 上传静态库
@@ -18,28 +19,27 @@ module CBin
18
19
  Dir.chdir(@product_dir) do
19
20
  zip_file = File.join(Dir.pwd, "#{zip_file_name}")
20
21
  unless File.exist?(zip_file)
21
- UI.info "#{Dir.pwd}目录下无 #{zip_file_name} 文件".red
22
+ UI.info "`#{Dir.pwd}`目录下无`#{zip_file_name}`文件".red
22
23
  return false
23
24
  end
24
- UI.info "Uploading binary zip file #{@pod_target.root_spec.name} (#{@version || @pod_target.root_spec.version})".yellow do
25
+ UI.info "Uploading binary zip file `#{@pod_target.root_spec.name} (#{version})`".yellow do
25
26
  upload_url = CBin.config.binary_upload_url_str
26
- # upload_url = "http://localhost:8080/frameworks" xcode_version
27
27
  xcode_version = BinHelper.xcode_version
28
- command = "curl -F \"name=#{@pod_target.product_module_name}\" -F \"version=#{@version || @pod_target.root_spec.version}\" -F \"xcode_version=#{xcode_version}\" -F \"file=@#{zip_file}\" #{upload_url}"
28
+ command = "curl -F \"name=#{@pod_target.product_module_name}\" -F \"version=#{version}\" -F \"xcode_version=#{xcode_version}\" -F \"configuration=#{@configuration}\" -F \"file=@#{zip_file}\" #{upload_url}"
29
29
  UI.info "#{command}"
30
30
  json = `#{command}`
31
31
  UI.info json
32
32
  begin
33
- error_code = JSON.parse(json)["error_code"]
34
- if error_code == 0
35
- Pod::UI.info "#{@pod_target.root_spec.name} (#{@pod_target.root_spec.version}) 上传成功".green
33
+ success = JSON.parse(json)["success"]
34
+ if success
35
+ Pod::UI.info "#{@pod_target.root_spec.name} (#{version}) 上传成功".green
36
36
  return true
37
37
  else
38
- Pod::UI.info "#{@pod_target.root_spec.name} (#{@pod_target.root_spec.version}) 上传失败".red
38
+ Pod::UI.info "#{@pod_target.root_spec.name} (#{version}) 上传失败".red
39
39
  return false
40
40
  end
41
41
  rescue JSON::ParserError => e
42
- Pod::UI.info "#{@pod_target.root_spec.name} (#{@pod_target.root_spec.version}) 上传失败".red
42
+ Pod::UI.info "#{@pod_target.root_spec.name} (#{version}) 上传失败".red
43
43
  Pod::UI.info "#{e.to_s}".red
44
44
  return false
45
45
  end
@@ -54,16 +54,16 @@ module CBin
54
54
  output_library = File.join(Dir.pwd, zip_file_name)
55
55
  FileUtils.rm_f(output_library) if File.exist?(output_library)
56
56
  unless File.exist?(input_library)
57
- UI.info "没有需要压缩的二进制文件:#{input_library}".red
57
+ UI.info "没有需要压缩的二进制文件:`#{input_library}`".red
58
58
  return false
59
59
  end
60
60
 
61
- UI.info "Compressing #{input_library} into #{zip_file_name}".yellow do
61
+ UI.info "Compressing `#{input_library}` into `#{zip_file_name}`".yellow do
62
62
  command = "zip --symlinks -r #{output_library} #{input_library}"
63
63
  UI.info "#{command}"
64
64
  `#{command}`
65
65
  unless File.exist?(output_library)
66
- UI.info "压缩 #{output_library} 失败".red
66
+ UI.info "压缩`#{output_library}`失败".red
67
67
  return false
68
68
  end
69
69
  return true
@@ -78,6 +78,10 @@ module CBin
78
78
  end
79
79
  end
80
80
 
81
+ def version
82
+ @version || @pod_target.root_spec.version
83
+ end
84
+
81
85
  end
82
86
  end
83
87
  end
@@ -2,35 +2,53 @@ module CBin
2
2
  class PodSize
3
3
  include Pod
4
4
 
5
- # 存放大于阈值的Pod
6
- @@pods = []
5
+ # 多线程锁
6
+ @@lock = Mutex.new
7
7
  # 阈值,单位MB
8
8
  @@size_threshold = 500
9
+ # 存放过大Pod信息的临时文件
10
+ @@tmp_file_path = File.join(Dir.pwd, '.mtxx_big_pods.log')
9
11
 
10
12
  # 添加超过阈值的pod
11
13
  def self.add_pod(pod)
12
- if pod['size'].to_i < @@size_threshold * 1024
14
+ if pod[:size].to_i < @@size_threshold * 1024
13
15
  return
14
16
  end
15
- @@pods << pod
17
+ @@lock.synchronize do
18
+ File.open(@@tmp_file_path, "a") do |f|
19
+ f.write(format_pod_size(pod))
20
+ end
21
+ end
22
+ end
23
+
24
+ # 格式化pod
25
+ def self.format_pod_size(pod)
26
+ unit = 'KB'
27
+ size = pod[:size].to_i
28
+ if size >= 1024 * 1024
29
+ unit = 'GB'
30
+ size = ('%.1f' % (size / 1024.0 / 1024.0)).to_f
31
+ elsif size >= 1024
32
+ unit = 'MB'
33
+ size = ('%.1f' % (size / 1024.0)).to_f
34
+ end
35
+ "#{pod[:name]}:#{size}#{unit}\n"
16
36
  end
17
37
 
18
38
  # 打印超过阈值的Pod库
19
39
  def self.print_pods
20
- if @@pods.empty?
40
+ unless File.exist?(@@tmp_file_path)
21
41
  return
22
42
  end
23
43
  UI.puts "\n"
24
44
  UI.puts "以下Pod库下载大小大于阈值`#{@@size_threshold}MB`:".green
25
- @@pods.map do |pod|
26
- unit = 'KB'
27
- size = pod['size'].to_i
28
- if size >= 1024
29
- unit = 'MB'
30
- size = ('%.1f' % (size / 1024.0)).to_f
45
+ File.open(@@tmp_file_path, "r") do |f|
46
+ f.readlines.map do |line|
47
+ UI.puts " - #{line.strip}".green
31
48
  end
32
- UI.puts " - #{pod['name']}:#{size}#{unit}".green
33
49
  end
50
+ # 打印完成后,删除临时文件
51
+ FileUtils.rm_f(@@tmp_file_path) if File.exist?(@@tmp_file_path)
34
52
  end
35
53
  end
36
54
  end
@@ -97,14 +97,15 @@ module Pod
97
97
 
98
98
  # 打印耗时
99
99
  def print_cost_time
100
- UI.title '执行耗时:'.green do
101
- UI.info '———————————————————————————————————————————————'.green
102
- UI.info "|#{'Stage'.center(30)}|#{'Time(s)'.center(15)}|".green
103
- UI.info '———————————————————————————————————————————————'.green
100
+ prefix = 'pod_time_profiler:'
101
+ UI.title "#{prefix} pod执行耗时:".green do
102
+ UI.info "#{prefix} ———————————————————————————————————————————————".green
103
+ UI.info "#{prefix} |#{'Stage'.center(30)}|#{'Time(s)'.center(15)}|".green
104
+ UI.info "#{prefix} ———————————————————————————————————————————————".green
104
105
  cost_time_hash.each do |key, value|
105
- UI.info "|#{key.center(30)}|#{('%.3f' % value).to_s.center(15)}|".green
106
+ UI.info "#{prefix} |#{key.center(30)}|#{('%.3f' % value).to_s.center(15)}|".green
106
107
  end
107
- UI.info '———————————————————————————————————————————————'.green
108
+ UI.info "#{prefix} ———————————————————————————————————————————————".green
108
109
  end
109
110
  end
110
111
 
@@ -212,7 +213,7 @@ module Pod
212
213
  # 记录下载大小大于阈值的库及大小
213
214
  if File.exist?(target.to_s)
214
215
  dir_size = `du -sk #{target.to_s}`.strip().split(' ')[0]
215
- CBin::PodSize.add_pod({'name' => request.name, 'size' => dir_size})
216
+ CBin::PodSize.add_pod({:name => request.name, :size => dir_size})
216
217
  end
217
218
 
218
219
  podspecs.each do |name, spec|
@@ -28,6 +28,10 @@ module Pod
28
28
  set_internal_hash_value(USE_SOURCE_PODS, hash_pods_use_source)
29
29
  end
30
30
 
31
+ def set_configuration(config = 'Debug')
32
+ set_internal_hash_value(CONFIGURATION, config)
33
+ end
34
+
31
35
  # 0 dev
32
36
  # 1 debug_iphoneos
33
37
  # 2 release_iphoneos
@@ -69,6 +73,10 @@ module Pod
69
73
  get_internal_hash_value(CONFIGURATION_ENV, "dev") || ENV[CONFIGURATION_ENV] == "dev"
70
74
  end
71
75
 
76
+ def configuration
77
+ get_internal_hash_value(CONFIGURATION, "Debug")
78
+ end
79
+
72
80
  private
73
81
 
74
82
  def valid_bin_plugin
@@ -8,6 +8,7 @@ module Pod
8
8
  ALLOW_PRERELEASE = 'allow_prerelease'
9
9
  USE_PLUGINS = 'use_plugins'
10
10
  CONFIGURATION_ENV = 'configuration_env'
11
+ CONFIGURATION = 'configuration'
11
12
 
12
13
  module ENVExecutor
13
14
  def execute_with_bin_plugin(&block)