cocoapods-bin 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 397354181f9f9ab4ce7e462c4583f8d87ece5d7c
4
- data.tar.gz: 21c9a9409b99972a592567df8e60e97d5b5b7da1
3
+ metadata.gz: 560ddbfb4258324c1e3dbcf1c35fa58fcd238b7e
4
+ data.tar.gz: b02c0f9c578eed09d6cb850593beded52b7c6f82
5
5
  SHA512:
6
- metadata.gz: deaea76a36d15e7a706b15f8b575ca2efc2d65bc8ae67e27799514928439ee6529637e232dd9efd28797794b1f1735f32c6e9e04d385fe05076149e81142247f
7
- data.tar.gz: 7f0a12aad14d315d5bc67dfadacab6bd89d33dd1ff52dd04d253c9fa2343d26fc71944cecb5409fc8da81bc7195f508680b0d79dfdb35715c7fa25aec8b2cb8b
6
+ metadata.gz: b5ebe970aeca3cc85adbe7615783406569d98dcc4de4eadb658cf6e2c05a43fc5b8fa2d7bd9a2cf6917b0a51160afe4992243b534835716d4798b99796f6c227
7
+ data.tar.gz: 50f193d2d9c6f37a5d1201c7fac572800f968671f970e2afc5ff3a65e0bd646000dfc8ef242f7f4eabb8adf5479495d21877a6d0668729a528c4135b63cad9bf
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- cocoapods-bin (0.0.1)
4
+ cocoapods-bin (0.0.2)
5
5
  cocoapods (~> 1.4)
6
6
  parallel
7
7
 
@@ -18,6 +18,7 @@ module Pod
18
18
  def self.options
19
19
  [
20
20
  ['--binary', 'lint 组件的二进制版本'],
21
+ ['--template-podspec=A.binary-template.podspec', '生成拥有 subspec 的二进制 spec 需要的模版 podspec, 插件会更改 version 和 source'],
21
22
  ['--code-dependencies', '使用源码依赖进行 lint'],
22
23
  ['--loose-options', '添加宽松的 options, 可能包括 --use-libraries (可能会造成 entry point (start) undefined)'],
23
24
  ['--reserve-created-spec', '保留生成的二进制 spec 文件'],
@@ -31,6 +32,7 @@ module Pod
31
32
  @code_dependencies = argv.flag?('code-dependencies')
32
33
  @sources = argv.option('sources') || []
33
34
  @reserve_created_spec = argv.flag?('reserve-created-spec')
35
+ @template_podspec = argv.option('template-podspec')
34
36
  super
35
37
 
36
38
  @additional_args = argv.remainder!
@@ -39,54 +41,56 @@ module Pod
39
41
  def run
40
42
  Podfile.execute_with_use_binaries(!@code_dependencies) do
41
43
  argvs = [
42
- spec_file,
43
44
  "--sources=#{sources_option(@code_dependencies, @sources)}",
44
45
  *@additional_args
45
46
  ]
47
+
48
+ argvs << spec_file if spec_file
46
49
 
47
50
  if @loose_options
48
51
  argvs << '--allow-warnings'
49
- argvs << '--use-libraries' if spec.all_dependencies.any?
52
+ argvs << '--use-libraries' if code_spec.all_dependencies.any?
50
53
  end
51
54
 
52
-
53
55
  lint = Pod::Command::Lib::Lint.new(CLAide::ARGV.new(argvs))
54
56
  lint.validate!
55
57
  lint.run
56
58
  end
57
59
  ensure
58
- @spec_generator.clear_spec_file if @spec_generator && !@reserve_created_spec
60
+ clear_binary_spec_file_if_needed
59
61
  end
60
62
 
61
63
  private
62
64
 
63
- def spec
64
- Pod::Specification.from_file(spec_file)
65
+
66
+ def template_spec_file
67
+ @template_spec_file ||= begin
68
+ if @template_podspec
69
+ find_spec_file(@template_podspec)
70
+ else
71
+ binary_template_spec_file
72
+ end
73
+ end
65
74
  end
66
75
 
67
76
  def spec_file
68
77
  @spec_file ||= begin
69
78
  if @podspec
70
- path = Pathname(@podspec)
71
- raise Informative, "Couldn't find #{@podspec}" unless path.exist?
72
- path
79
+ find_spec_file(@podspec)
73
80
  else
74
- raise Informative, "Couldn't find any podspec files in current directory" if spec_files.empty?
75
- raise Informative, "Couldn't find any code podspec files in current directory" if code_spec_files.empty? && !@binary
76
- path = code_spec_files.first
77
- path = binary_spec_files.first || generate_binary_spec_file(path) if @binary
78
- path
81
+ raise Informative, "当前目录下没有找到可用源码 podspec." if code_spec_files.empty?
82
+
83
+ spec_file = if @binary
84
+ code_spec = Pod::Specification.from_file(code_spec_files.first)
85
+ template_spec = Pod::Specification.from_file(template_spec_file) if template_spec_file
86
+ create_binary_spec_file(code_spec, template_spec)
87
+ else
88
+ code_spec_files.first
89
+ end
90
+ spec_file
79
91
  end
80
92
  end
81
93
  end
82
-
83
- def generate_binary_spec_file(code_spec_path)
84
- spec = Pod::Specification.from_file(code_spec_path)
85
- @spec_generator = CBin::SpecGenerator.new(spec)
86
- @spec_generator.generate
87
- @spec_generator.write_to_spec_file
88
- @spec_generator.filename
89
- end
90
94
  end
91
95
  end
92
96
  end
@@ -27,7 +27,6 @@ module Pod
27
27
  command.run
28
28
  end
29
29
 
30
-
31
30
  path = find_in_children(Pathname.pwd.children, @deep) ||
32
31
  find_in_parent(Pathname.pwd.parent, @deep)
33
32
  if path
@@ -18,6 +18,7 @@ module Pod
18
18
  def self.options
19
19
  [
20
20
  ['--binary', '发布组件的二进制版本'],
21
+ ['--template-podspec=A.binary-template.podspec', '生成拥有 subspec 的二进制 spec 需要的模版 podspec, 插件会更改 version 和 source'],
21
22
  ['--code-dependencies', '使用源码依赖进行 lint'],
22
23
  ['--loose-options', '添加宽松的 options, 可能包括 --use-libraries (可能会造成 entry point (start) undefined)'],
23
24
  ['--reserve-created-spec', '保留生成的二进制 spec 文件'],
@@ -31,6 +32,7 @@ module Pod
31
32
  @code_dependencies = argv.flag?('code-dependencies')
32
33
  @sources = argv.option('sources') || []
33
34
  @reserve_created_spec = argv.flag?('reserve-created-spec')
35
+ @template_podspec = argv.option('template-podspec')
34
36
  super
35
37
 
36
38
  @additional_args = argv.remainder!
@@ -40,14 +42,15 @@ module Pod
40
42
  Podfile.execute_with_use_binaries(!@code_dependencies) do
41
43
  argvs = [
42
44
  repo,
43
- spec_file,
44
45
  "--sources=#{sources_option(@code_dependencies, @sources)}",
45
46
  *@additional_args
46
47
  ]
47
48
 
49
+ argvs << spec_file if spec_file
50
+
48
51
  if @loose_options
49
52
  argvs += ['--allow-warnings', '--use-json']
50
- argvs << '--use-libraries' if spec.all_dependencies.any?
53
+ argvs << '--use-libraries' if code_spec.all_dependencies.any?
51
54
  end
52
55
 
53
56
  push = Pod::Command::Repo::Push.new(CLAide::ARGV.new(argvs))
@@ -55,39 +58,40 @@ module Pod
55
58
  push.run
56
59
  end
57
60
  ensure
58
- @spec_generator.clear_spec_file if @spec_generator && !@reserve_created_spec
61
+ clear_binary_spec_file_if_needed
59
62
  end
60
63
 
61
64
  private
62
65
 
63
- def spec
64
- Pod::Specification.from_file(spec_file)
66
+ def template_spec_file
67
+ @template_spec_file ||= begin
68
+ if @template_podspec
69
+ find_spec_file(@template_podspec)
70
+ else
71
+ binary_template_spec_file
72
+ end
73
+ end
65
74
  end
66
75
 
67
76
  def spec_file
68
77
  @spec_file ||= begin
69
78
  if @podspec
70
- path = Pathname(@podspec)
71
- raise Informative, "Couldn't find #{@podspec}" unless path.exist?
72
- path
79
+ find_spec_file(@podspec)
73
80
  else
74
- raise Informative, "Couldn't find any podspec files in current directory" if spec_files.empty?
75
- raise Informative, "Couldn't find any code podspec files in current directory" if code_spec_files.empty? && !@binary
76
- path = code_spec_files.first
77
- path = binary_spec_files.first || generate_binary_spec_file(path) if @binary
78
- path
81
+ raise Informative, "当前目录下没有找到可用源码 podspec." if code_spec_files.empty?
82
+
83
+ spec_file = if @binary
84
+ code_spec = Pod::Specification.from_file(code_spec_files.first)
85
+ template_spec = Pod::Specification.from_file(template_spec_file) if template_spec_file
86
+ create_binary_spec_file(code_spec, template_spec)
87
+ else
88
+ code_spec_files.first
89
+ end
90
+ spec_file
79
91
  end
80
92
  end
81
93
  end
82
94
 
83
- def generate_binary_spec_file(code_spec_path)
84
- spec = Pod::Specification.from_file(code_spec_path)
85
- @spec_generator = CBin::SpecGenerator.new(spec)
86
- @spec_generator.generate
87
- @spec_generator.write_to_spec_file
88
- @spec_generator.filename
89
- end
90
-
91
95
  def repo
92
96
  @binary ? binary_source.name : code_source.name
93
97
  end
@@ -1,4 +1,4 @@
1
- require 'cocoapods-bin/helpers/spec_generator'
1
+ require 'cocoapods-bin/helpers'
2
2
 
3
3
  module Pod
4
4
  class Command
@@ -10,53 +10,53 @@ module Pod
10
10
  根据源码 podspec 文件,创建对应的二进制 podspec 文件.
11
11
  DESC
12
12
 
13
- self.arguments = [
14
- CLAide::Argument.new('NAME.podspec', false),
15
- ]
16
-
17
13
  def self.options
18
14
  [
19
15
  ['--platforms=ios', '生成二进制 spec 支持的平台'],
16
+ ['--template-podspec=A.binary-template.podspec', '生成拥有 subspec 的二进制 spec 需要的模版 podspec, 插件会更改 version 和 source'],
20
17
  ['--no-overwrite', '不允许覆盖']
21
18
  ].concat(super)
22
19
  end
23
20
 
24
21
  def initialize(argv)
25
- @platforms = argv.option('platforms') || 'ios'
22
+ @platforms = argv.option('platforms', 'ios')
26
23
  @allow_overwrite = argv.flag?('overwrite', true)
24
+ @template_podspec = argv.option('template-podspec')
27
25
  @podspec = argv.shift_argument
28
26
  super
29
27
  end
30
28
 
31
29
  def run
30
+ UI.puts "开始读取 podspec 文件...\n"
32
31
 
33
- UI.puts "开始读取 #{podspec_file} 文件...\n"
34
- spec = Pod::Specification.from_file(podspec_file)
35
-
36
- UI.puts "开始生成二进制 podspec 文件...\n"
37
- spec_generator = CBin::SpecGenerator.new(spec, @platforms)
38
- spec_generator.generate
39
-
40
- UI.puts "开始保存 #{spec_generator.filename} 文件至当前目录...\n"
32
+ code_spec = Pod::Specification.from_file(spec_file)
33
+ template_spec = Pod::Specification.from_file(template_spec_file) if template_spec_file
41
34
 
42
- if File.exist?(spec_generator.filename) && !@allow_overwrite
43
- UI.warn "二进制 podspec 文件 #{spec_generator.filename} 已存在.\n"
35
+ if binary_spec && !@allow_overwrite
36
+ UI.warn "二进制 podspec 文件 #{binary_spec_files.first} 已存在.\n"
44
37
  else
45
- spec_generator.write_to_spec_file
46
- UI.puts "创建二进制 podspec 文件成功.\n".green
38
+ UI.puts "开始生成二进制 podspec 文件...\n"
39
+ spec_file = create_binary_spec_file(code_spec, template_spec)
40
+ UI.puts "创建二进制 podspec 文件 #{spec_file} 成功.\n".green
47
41
  end
48
42
  end
49
43
 
50
- private
44
+ def template_spec_file
45
+ @template_spec_file ||= begin
46
+ if @template_podspec
47
+ find_spec_file(@template_podspec)
48
+ else
49
+ binary_template_spec_file
50
+ end
51
+ end
52
+ end
51
53
 
52
- def podspec_file
53
- @podspec_file ||= begin
54
+ def spec_file
55
+ @spec_file ||= begin
54
56
  if @podspec
55
- path = Pathname(@podspec)
56
- raise Informative, "Couldn't find #{@podspec}" unless path.exist?
57
- path
57
+ find_spec_file(@podspec)
58
58
  else
59
- raise Informative, "Couldn't find any valid podspec files in current directory" if code_spec_files.empty?
59
+ raise Informative, "当前目录下没有找到可用源码 podspec." if code_spec_files.empty?
60
60
  code_spec_files.first
61
61
  end
62
62
  end
@@ -1,5 +1,5 @@
1
1
  module CBin
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
4
4
 
5
5
  module Pod
@@ -0,0 +1,110 @@
1
+ require 'cocoapods'
2
+ require 'cocoapods-bin/config/config'
3
+
4
+ module CBin
5
+ class Specification
6
+ class Creator
7
+ attr_reader :code_spec
8
+ attr_reader :template_spec
9
+ attr_reader :spec
10
+
11
+ def initialize(code_spec, template_spec, platforms = 'ios')
12
+ @code_spec = code_spec
13
+ @template_spec = template_spec
14
+ @platforms = Array(platforms)
15
+ validate!
16
+ end
17
+
18
+ def validate!
19
+ raise Pod::Informative, "源码 podspec 不能为空 ." unless code_spec
20
+ raise Pod::Informative, "不支持自动生成存在 subspec 的二进制 podspec , 需要提供模版文件 #{code_spec.name}.binary.podspec.template ." if code_spec.subspecs.any? && template_spec.nil?
21
+ end
22
+
23
+ def create
24
+ spec = template_spec ? create_from_code_spec_and_template_spec : create_from_code_spec
25
+
26
+ Pod::UI.message "生成二进制 podspec 内容: "
27
+ spec.to_pretty_json.split("\n").each do |text|
28
+ Pod::UI.message text
29
+ end
30
+
31
+ spec
32
+ end
33
+
34
+ def write_spec_file(file = filename)
35
+ create unless spec
36
+
37
+ File.open(file, 'w+') do |f|
38
+ f.write(spec.to_pretty_json)
39
+ end
40
+
41
+ @filename = file
42
+ end
43
+
44
+ def clear_spec_file
45
+ File.delete(filename) if File.exist?(filename)
46
+ end
47
+
48
+ def filename
49
+ @filename ||= "#{spec.name}.binary.podspec.json"
50
+ end
51
+
52
+ private
53
+
54
+ def create_from_code_spec
55
+ @spec = code_spec.dup
56
+ # vendored_frameworks | resources | source | source_files | public_header_files
57
+ # license | resource_bundles
58
+
59
+ # Project Linkin
60
+ @spec.vendored_frameworks = "#{code_spec.root.name}.framework"
61
+
62
+ # Resources
63
+ extnames = []
64
+ extnames << '*.bundle' if code_spec_consumer.resource_bundles.any?
65
+ extnames += code_spec_consumer.resources.map { |r| File.basename(r) } if code_spec_consumer.resources.any?
66
+ @spec.resources = framework_contents('Resources').flat_map { |r| extnames.map { |e| "#{r}/#{e}" } } if extnames.any?
67
+
68
+ # Source Location
69
+ @spec.source = binary_source
70
+
71
+ # Source Code
72
+ @spec.source_files = framework_contents('Headers/*')
73
+ @spec.public_header_files = framework_contents('Headers/*')
74
+
75
+ # Unused for binary
76
+ spec_hash = @spec.to_hash
77
+ # spec_hash.delete('license')
78
+ spec_hash.delete('resource_bundles')
79
+
80
+ # Filter platforms
81
+ platforms = spec_hash['platforms']
82
+ selected_platforms = platforms.select { |k, v| @platforms.include?(k) }
83
+ spec_hash['platforms'] = selected_platforms.empty? ? platforms : selected_platforms
84
+
85
+ @spec = Pod::Specification.from_hash(spec_hash)
86
+ @spec
87
+ end
88
+
89
+ def create_from_code_spec_and_template_spec
90
+ @spec = template_spec.dup
91
+
92
+ @spec.version = code_spec.version
93
+ @spec.source = binary_source
94
+ @spec
95
+ end
96
+
97
+ def binary_source
98
+ { http: CBin.config.binary_download_url % [code_spec.root.name, code_spec.version] }
99
+ end
100
+
101
+ def code_spec_consumer(platform = :ios)
102
+ code_spec.consumer(:ios)
103
+ end
104
+
105
+ def framework_contents(name)
106
+ ["#{code_spec.root.name}.framework", "#{code_spec.root.name}.framework/Versions/A"].map { |path| "#{path}/#{name}" }
107
+ end
108
+ end
109
+ end
110
+ end
@@ -10,8 +10,50 @@ module CBin
10
10
  @binary_spec_files ||= Pathname.glob('*.binary.podspec{,.json}')
11
11
  end
12
12
 
13
+ def binary_template_spec_file
14
+ @binary_spec_template_file ||= Pathname.glob('*.binary-template.podspec{,.json}').first
15
+ end
16
+
13
17
  def code_spec_files
14
18
  @code_spec_files ||= spec_files - binary_spec_files
15
19
  end
20
+
21
+ def code_spec
22
+ Pod::Specification.from_file(code_spec_files.first) if code_spec_files.first
23
+ end
24
+
25
+ def binary_spec
26
+ Pod::Specification.from_file(binary_spec_files.first) if binary_spec_files.first
27
+ end
28
+
29
+ def binary_template_spec
30
+ Pod::Specification.from_file(binary_template_spec_file) if binary_template_spec_file
31
+ end
32
+
33
+ def find_spec_file(podspec)
34
+ path = Pathname(podspec)
35
+ raise Pod::Informative, "无法找到 #{podspec}" unless path.exist?
36
+ path
37
+ end
38
+
39
+ def create_binary_spec_file(code_spec, template_spec)
40
+ # 1. code spec 是否有 subpsec
41
+ # 1.1 有,查找 template spec,并生成
42
+ # 1.2 没有,是否有 template spec
43
+ # 1.2.1 有,根据 template spec 生成
44
+ # 1.2.2 没有,根据 code spec 生成
45
+
46
+ raise Pod::Informative, "没有二进制 podspec 的情况下,必须要提供源码 podspec." unless code_spec
47
+ raise Pod::Informative, "拥有 subspec 的组件,在生成二进制 podspec 时,必须要提供模版 podspec." if code_spec.subspecs.any? && template_spec.nil?
48
+
49
+ @spec_creator = CBin::Specification::Creator.new(code_spec, template_spec)
50
+ @spec_creator.create
51
+ @spec_creator.write_spec_file
52
+ @spec_creator.filename
53
+ end
54
+
55
+ def clear_binary_spec_file_if_needed
56
+ @spec_creator.clear_spec_file if @spec_creator
57
+ end
16
58
  end
17
59
  end
@@ -1,3 +1,3 @@
1
1
  require 'cocoapods-bin/helpers/sources_helper'
2
- require 'cocoapods-bin/helpers/spec_generator'
2
+ require 'cocoapods-bin/helpers/spec_creator'
3
3
  require 'cocoapods-bin/helpers/spec_files_helper'
@@ -0,0 +1,24 @@
1
+ module Pod
2
+ module Generator
3
+ class Acknowledgements
4
+ def license_text(spec)
5
+ return nil unless spec.license
6
+ text = spec.license[:text]
7
+ unless text
8
+ if license_file = spec.license[:file]
9
+ license_path = file_accessor(spec).root + license_file
10
+ if File.exist?(license_path)
11
+ text = IO.read(license_path)
12
+ else
13
+ # UI.warn "Unable to read the license file `#{license_file}` " \
14
+ # "for the spec `#{spec}`"
15
+ end
16
+ elsif license_file = file_accessor(spec).license
17
+ text = IO.read(license_file)
18
+ end
19
+ end
20
+ text
21
+ end
22
+ end
23
+ end
24
+ end
@@ -11,45 +11,80 @@ module Pod
11
11
  installer
12
12
  end
13
13
 
14
- # rewrite install_pod_sources
15
14
  alias_method :old_install_pod_sources, :install_pod_sources
16
15
  def install_pod_sources
17
16
  if installation_options.install_with_multi_processes
18
- @installed_specs = []
19
- pods_to_install = sandbox_state.added | sandbox_state.changed
20
- title_options = { :verbose_prefix => '-> '.green }
21
- # 多进程下载,多线程时 log 会显著交叉,多进程好点,但是多进程需要利用文件锁对 cache 进行保护
22
- # in_processes: 10
23
- Parallel.each(root_specs.sort_by(&:name), in_threads: 10) do |spec|
24
- if pods_to_install.include?(spec.name)
25
- if sandbox_state.changed.include?(spec.name) && sandbox.manifest
26
- current_version = spec.version
27
- previous_version = sandbox.manifest.version(spec.name)
28
- has_changed_version = current_version != previous_version
29
- current_repo = analysis_result.specs_by_source.detect { |key, values| break key if values.map(&:name).include?(spec.name) }
30
- current_repo &&= current_repo.url || current_repo.name
31
- previous_spec_repo = sandbox.manifest.spec_repo(spec.name)
32
- has_changed_repo = !previous_spec_repo.nil? && current_repo && (current_repo != previous_spec_repo)
33
- title = "Installing #{spec.name} #{spec.version}"
34
- title << " (was #{previous_version} and source changed to `#{current_repo}` from `#{previous_spec_repo}`)" if has_changed_version && has_changed_repo
35
- title << " (was #{previous_version})" if has_changed_version && !has_changed_repo
36
- title << " (source changed to `#{current_repo}` from `#{previous_spec_repo}`)" if !has_changed_version && has_changed_repo
37
- else
38
- title = "Installing #{spec}"
39
- end
40
- UI.titled_section(title.green, title_options) do
41
- install_source_of_pod(spec.name)
42
- end
43
- else
44
- UI.titled_section("Using #{spec}", title_options) do
45
- create_pod_installer(spec.name)
46
- end
47
- end
48
- end
49
- else
17
+ if Pod.match_version?('~> 1.4.0')
18
+ install_pod_sources_for_version_in_1_4_0
19
+ elsif Pod.match_version?('~> 1.5')
20
+ install_pod_sources_for_version_above_1_5_0
21
+ else
22
+ old_install_pod_sources
23
+ end
24
+ else
50
25
  old_install_pod_sources
51
26
  end
52
27
  end
28
+
29
+
30
+ # rewrite install_pod_sources
31
+ def install_pod_sources_for_version_in_1_4_0
32
+ @installed_specs = []
33
+ pods_to_install = sandbox_state.added | sandbox_state.changed
34
+ title_options = { :verbose_prefix => '-> '.green }
35
+ Parallel.each(root_specs.sort_by(&:name), in_threads: 10) do |spec|
36
+ if pods_to_install.include?(spec.name)
37
+ if sandbox_state.changed.include?(spec.name) && sandbox.manifest
38
+ previous = sandbox.manifest.version(spec.name)
39
+ title = "Installing #{spec.name} #{spec.version} (was #{previous})"
40
+ else
41
+ title = "Installing #{spec}"
42
+ end
43
+ UI.titled_section(title.green, title_options) do
44
+ install_source_of_pod(spec.name)
45
+ end
46
+ else
47
+ UI.titled_section("Using #{spec}", title_options) do
48
+ create_pod_installer(spec.name)
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ def install_pod_sources_for_version_above_1_5_0
55
+ @installed_specs = []
56
+ pods_to_install = sandbox_state.added | sandbox_state.changed
57
+ title_options = { :verbose_prefix => '-> '.green }
58
+ # 多进程下载,多线程时 log 会显著交叉,多进程好点,但是多进程需要利用文件锁对 cache 进行保护
59
+ # in_processes: 10
60
+ Parallel.each(root_specs.sort_by(&:name), in_threads: 10) do |spec|
61
+ if pods_to_install.include?(spec.name)
62
+ if sandbox_state.changed.include?(spec.name) && sandbox.manifest
63
+ current_version = spec.version
64
+ previous_version = sandbox.manifest.version(spec.name)
65
+ has_changed_version = current_version != previous_version
66
+ current_repo = analysis_result.specs_by_source.detect { |key, values| break key if values.map(&:name).include?(spec.name) }
67
+ current_repo &&= current_repo.url || current_repo.name
68
+ previous_spec_repo = sandbox.manifest.spec_repo(spec.name)
69
+ has_changed_repo = !previous_spec_repo.nil? && current_repo && (current_repo != previous_spec_repo)
70
+ title = "Installing #{spec.name} #{spec.version}"
71
+ title << " (was #{previous_version} and source changed to `#{current_repo}` from `#{previous_spec_repo}`)" if has_changed_version && has_changed_repo
72
+ title << " (was #{previous_version})" if has_changed_version && !has_changed_repo
73
+ title << " (source changed to `#{current_repo}` from `#{previous_spec_repo}`)" if !has_changed_version && has_changed_repo
74
+ else
75
+ title = "Installing #{spec}"
76
+ end
77
+ UI.titled_section(title.green, title_options) do
78
+ install_source_of_pod(spec.name)
79
+ end
80
+ else
81
+ UI.titled_section("Using #{spec}", title_options) do
82
+ create_pod_installer(spec.name)
83
+ end
84
+ end
85
+ end
86
+ end
87
+
53
88
  end
54
89
 
55
90
  module Downloader
@@ -8,6 +8,7 @@ if Pod.match_version?('~> 1.4')
8
8
  require 'cocoapods-bin/native/resolver'
9
9
  require 'cocoapods-bin/native/source'
10
10
  require 'cocoapods-bin/native/validator'
11
+ require 'cocoapods-bin/native/acknowledgements'
11
12
  end
12
13
 
13
14
  require 'cocoapods-bin/native/source_provider_hook'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cocoapods-bin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - tripleCC
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-09 00:00:00.000000000 Z
11
+ date: 2019-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parallel
@@ -97,9 +97,10 @@ files:
97
97
  - lib/cocoapods-bin/gem_version.rb
98
98
  - lib/cocoapods-bin/helpers.rb
99
99
  - lib/cocoapods-bin/helpers/sources_helper.rb
100
+ - lib/cocoapods-bin/helpers/spec_creator.rb
100
101
  - lib/cocoapods-bin/helpers/spec_files_helper.rb
101
- - lib/cocoapods-bin/helpers/spec_generator.rb
102
102
  - lib/cocoapods-bin/native.rb
103
+ - lib/cocoapods-bin/native/acknowledgements.rb
103
104
  - lib/cocoapods-bin/native/analyzer.rb
104
105
  - lib/cocoapods-bin/native/installation_options.rb
105
106
  - lib/cocoapods-bin/native/installer.rb
@@ -1,86 +0,0 @@
1
- require 'cocoapods'
2
- require 'cocoapods-bin/config/config'
3
-
4
- module CBin
5
- class SpecGenerator
6
- attr_reader :ref_spec
7
- attr_reader :spec
8
-
9
- def initialize(ref_spec, platforms = 'ios')
10
- @ref_spec = ref_spec
11
- @platforms = Array(platforms)
12
- validate!
13
- end
14
-
15
- def validate!
16
- raise StandardError, '不支持自动生成存在 subspec 的二进制 podspec .' if ref_spec.subspecs.any?
17
- end
18
-
19
- def generate
20
- @spec = @ref_spec.dup
21
- # vendored_frameworks | resources | source | source_files | public_header_files
22
- # license | resource_bundles
23
-
24
- # Project Linkin
25
- @spec.vendored_frameworks = "#{ref_spec.root.name}.framework"
26
-
27
- # Resources
28
- extnames = []
29
- extnames << '*.bundle' if ref_spec_consumer.resource_bundles.any?
30
- extnames += ref_spec_consumer.resources.map { |r| File.basename(r) } if ref_spec_consumer.resources.any?
31
- @spec.resources = framework_contents('Resources').flat_map { |r| extnames.map { |e| "#{r}/#{e}" } } if extnames.any?
32
-
33
- # Source Location
34
- @spec.source = { http: CBin.config.binary_download_url % [ref_spec.root.name, ref_spec.version] }
35
-
36
- # Source Code
37
- @spec.source_files = framework_contents('Headers/*')
38
- @spec.public_header_files = framework_contents('Headers/*')
39
-
40
- # Unused for binary
41
- spec_hash = @spec.to_hash
42
- # spec_hash.delete('license')
43
- spec_hash.delete('resource_bundles')
44
-
45
- # Filter platforms
46
- platforms = spec_hash['platforms']
47
- selected_platforms = platforms.select { |k, v| @platforms.include?(k) }
48
- spec_hash['platforms'] = selected_platforms.empty? ? platforms : selected_platforms
49
-
50
- @spec = Pod::Specification.from_hash(spec_hash)
51
-
52
- Pod::UI.message "生成二进制 podspec 内容: "
53
- @spec.to_pretty_json.split("\n").each do |text|
54
- Pod::UI.message text
55
- end
56
-
57
- @spec
58
- end
59
-
60
- def write_to_spec_file(file = filename)
61
- File.open(file, 'w+') do |f|
62
- f.write(spec.to_pretty_json)
63
- end
64
-
65
- @filename = file
66
- end
67
-
68
- def clear_spec_file
69
- File.delete(@filename) if File.exist?(@filename)
70
- end
71
-
72
- def filename
73
- @filename ||= "#{spec.name}.binary.podspec.json"
74
- end
75
-
76
- private
77
-
78
- def ref_spec_consumer(platform = :ios)
79
- ref_spec.consumer(:ios)
80
- end
81
-
82
- def framework_contents(name)
83
- ["#{ref_spec.root.name}.framework", "#{ref_spec.root.name}.framework/Versions/A"].map { |path| "#{path}/#{name}" }
84
- end
85
- end
86
- end