cocoapods-mtxx-bin 0.0.13 → 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.
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)