cocoapods-tj 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +1 -0
  4. data/lib/cocoapods-tj/command/bin/archive.rb +203 -0
  5. data/lib/cocoapods-tj/command/bin/auto.rb +189 -0
  6. data/lib/cocoapods-tj/command/bin/code.rb +198 -0
  7. data/lib/cocoapods-tj/command/bin/imy.rb +45 -0
  8. data/lib/cocoapods-tj/command/bin/init.rb +65 -0
  9. data/lib/cocoapods-tj/command/bin/initHotKey.rb +66 -0
  10. data/lib/cocoapods-tj/command/bin/install.rb +41 -0
  11. data/lib/cocoapods-tj/command/bin/lib/lint.rb +66 -0
  12. data/lib/cocoapods-tj/command/bin/local.rb +142 -0
  13. data/lib/cocoapods-tj/command/bin/repo/update.rb +42 -0
  14. data/lib/cocoapods-tj/command/bin/spec/create.rb +68 -0
  15. data/lib/cocoapods-tj/command/bin/spec/push.rb +114 -0
  16. data/lib/cocoapods-tj/command/bin/update.rb +144 -0
  17. data/lib/cocoapods-tj/command/bin.rb +42 -0
  18. data/lib/cocoapods-tj/command.rb +2 -0
  19. data/lib/cocoapods-tj/config/config.rb +129 -0
  20. data/lib/cocoapods-tj/config/config_asker.rb +49 -0
  21. data/lib/cocoapods-tj/config/config_builder.rb +201 -0
  22. data/lib/cocoapods-tj/config/config_hot_key.rb +102 -0
  23. data/lib/cocoapods-tj/config/config_hot_key_asker.rb +48 -0
  24. data/lib/cocoapods-tj/gem_version.rb +10 -0
  25. data/lib/cocoapods-tj/helpers/Info.plist +0 -0
  26. data/lib/cocoapods-tj/helpers/build_helper.rb +154 -0
  27. data/lib/cocoapods-tj/helpers/build_utils.rb +62 -0
  28. data/lib/cocoapods-tj/helpers/framework.rb +79 -0
  29. data/lib/cocoapods-tj/helpers/framework_builder.rb +391 -0
  30. data/lib/cocoapods-tj/helpers/library.rb +54 -0
  31. data/lib/cocoapods-tj/helpers/library_builder.rb +89 -0
  32. data/lib/cocoapods-tj/helpers/local/loca_llibrary.rb +57 -0
  33. data/lib/cocoapods-tj/helpers/local/local_build_helper.rb +177 -0
  34. data/lib/cocoapods-tj/helpers/local/local_framework.rb +85 -0
  35. data/lib/cocoapods-tj/helpers/local/local_framework_builder.rb +226 -0
  36. data/lib/cocoapods-tj/helpers/local/local_library_builder.rb +91 -0
  37. data/lib/cocoapods-tj/helpers/sources_helper.rb +32 -0
  38. data/lib/cocoapods-tj/helpers/spec_creator.rb +150 -0
  39. data/lib/cocoapods-tj/helpers/spec_files_helper.rb +73 -0
  40. data/lib/cocoapods-tj/helpers/spec_source_creator.rb +189 -0
  41. data/lib/cocoapods-tj/helpers/upload_helper.rb +81 -0
  42. data/lib/cocoapods-tj/helpers.rb +5 -0
  43. data/lib/cocoapods-tj/native/acknowledgements.rb +26 -0
  44. data/lib/cocoapods-tj/native/analyzer.rb +29 -0
  45. data/lib/cocoapods-tj/native/file_accessor.rb +20 -0
  46. data/lib/cocoapods-tj/native/installation_options.rb +21 -0
  47. data/lib/cocoapods-tj/native/installer.rb +106 -0
  48. data/lib/cocoapods-tj/native/linter.rb +26 -0
  49. data/lib/cocoapods-tj/native/path_source.rb +29 -0
  50. data/lib/cocoapods-tj/native/pod_source_installer.rb +18 -0
  51. data/lib/cocoapods-tj/native/pod_target_installer.rb +81 -0
  52. data/lib/cocoapods-tj/native/podfile.rb +91 -0
  53. data/lib/cocoapods-tj/native/podfile_env.rb +37 -0
  54. data/lib/cocoapods-tj/native/podfile_generator.rb +135 -0
  55. data/lib/cocoapods-tj/native/podspec_finder.rb +23 -0
  56. data/lib/cocoapods-tj/native/resolver.rb +202 -0
  57. data/lib/cocoapods-tj/native/sandbox_analyzer.rb +11 -0
  58. data/lib/cocoapods-tj/native/source.rb +35 -0
  59. data/lib/cocoapods-tj/native/sources_manager.rb +18 -0
  60. data/lib/cocoapods-tj/native/specification.rb +10 -0
  61. data/lib/cocoapods-tj/native/target_validator.rb +41 -0
  62. data/lib/cocoapods-tj/native/validator.rb +40 -0
  63. data/lib/cocoapods-tj/native.rb +23 -0
  64. data/lib/cocoapods-tj/source_provider_hook.rb +50 -0
  65. data/lib/cocoapods-tj.rb +2 -0
  66. data/lib/cocoapods_plugin.rb +3 -0
  67. data/spec/command/bin_spec.rb +12 -0
  68. data/spec/spec_helper.rb +50 -0
  69. metadata +182 -0
@@ -0,0 +1,65 @@
1
+ require 'cocoapods-tj/config/config_asker'
2
+
3
+ module Pod
4
+ class Command
5
+ class Bin < Command
6
+ class Init < Bin
7
+ self.summary = ''
8
+ self.description = <<-DESC
9
+
10
+ DESC
11
+
12
+ def self.options
13
+ [
14
+ ['--bin-url=URL', '配置文件地址,直接从此地址下载配置文件']
15
+ ].concat(super)
16
+ end
17
+
18
+ def initialize(argv)
19
+ @bin_url = argv.option('bin-url')
20
+ super
21
+ end
22
+
23
+ def run
24
+ if @bin_url.nil?
25
+ config_with_asker
26
+ else
27
+ config_with_url(@bin_url)
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def config_with_url(url)
34
+ require 'open-uri'
35
+
36
+ file = open(url)
37
+ contents = YAML.safe_load(file.read)
38
+
39
+ CBin.config.sync_config(contents.to_hash)
40
+ rescue Errno::ENOENT => e
41
+ raise Informative, "配置文件路径 #{url} 无效,请确认后重试."
42
+ end
43
+
44
+ def config_with_asker
45
+ asker = CBin::Config::Asker.new
46
+ asker.wellcome_message
47
+
48
+ config = {}
49
+ template_hash = CBin.config.template_hash
50
+ template_hash.each do |k, v|
51
+ default = begin
52
+ CBin.config.send(k)
53
+ rescue StandardError
54
+ nil
55
+ end
56
+ config[k] = asker.ask_with_answer(v[:description], default, v[:selection])
57
+ end
58
+
59
+ CBin.config.sync_config(config)
60
+ asker.done_message
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,66 @@
1
+
2
+ require 'cocoapods-tj/config/config_hot_key_asker'
3
+
4
+ module Pod
5
+ class Command
6
+ class Bin < Command
7
+ class Inithk < Bin
8
+ self.summary = ''
9
+ self.description = <<-DESC
10
+
11
+ DESC
12
+
13
+ def self.options
14
+ [
15
+ ['--bin-url=URL', '配置文件地址,直接从此地址下载配置文件']
16
+ ].concat(super)
17
+ end
18
+
19
+ def initialize(argv)
20
+ @bin_url = argv.option('bin-url')
21
+ super
22
+ end
23
+
24
+ def run
25
+ if @bin_url.nil?
26
+ config_with_asker
27
+ else
28
+ config_with_url(@bin_url)
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def config_with_url(url)
35
+ require 'open-uri'
36
+
37
+ file = open(url)
38
+ contents = YAML.safe_load(file.read)
39
+
40
+ CBin.config_hot_key.sync_config(contents.to_hash)
41
+ rescue Errno::ENOENT => e
42
+ raise Informative, "配置文件路径 #{url} 无效,请确认后重试."
43
+ end
44
+
45
+ def config_with_asker
46
+ asker = CBin::Config_Hot_Key::Asker.new
47
+ asker.wellcome_message
48
+
49
+ config = {}
50
+ template_hash = CBin.config_hot_key.template_hash
51
+ template_hash.each do |k, v|
52
+ default = begin
53
+ CBin.config_hot_key.send(k)
54
+ rescue StandardError
55
+ nil
56
+ end
57
+ config[k] = asker.ask_with_answer(v[:description], default, v[:selection])
58
+ end
59
+
60
+ CBin.config_hot_key.sync_config(config)
61
+ asker.done_message
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,41 @@
1
+
2
+ require 'cocoapods-tj/command/bin/update'
3
+ module Pod
4
+ class Command
5
+ class Bin < Command
6
+ class Install < Bin
7
+ include Pod
8
+
9
+ self.summary = ''
10
+
11
+ self.description = <<-DESC
12
+
13
+ DESC
14
+ def self.options
15
+ [
16
+ ['--repo-update', 'Force running `pod repo update` before install'],
17
+ ['--deployment', 'Disallow any changes to the Podfile or the Podfile.lock during installation'],
18
+ ['--clean-install', 'Ignore the contents of the project cache and force a full pod installation. This only ' \
19
+ 'applies to projects that have enabled incremental installation']
20
+ ].concat(super).reject { |(name, _)| name == '--no-repo-update' }
21
+ end
22
+
23
+ def initialize(argv)
24
+ @update = argv.flag?('update')
25
+ super
26
+ @additional_args = argv.remainder!
27
+ end
28
+
29
+ def run
30
+ Update.load_local_podfile
31
+ argvs = [
32
+ *@additional_args
33
+ ]
34
+ gen = Pod::Command::Install.new(CLAide::ARGV.new(argvs))
35
+ gen.validate!
36
+ gen.run
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,66 @@
1
+ require 'cocoapods-tj/config/config'
2
+ require 'cocoapods-tj/native/podfile'
3
+
4
+ module Pod
5
+ class Command
6
+ class Bin < Command
7
+ class Lib < Bin
8
+ class Lint < Lib
9
+ self.summary = ''
10
+ self.description = <<-DESC
11
+
12
+ DESC
13
+
14
+ self.arguments = [
15
+ CLAide::Argument.new('NAME.podspec', false)
16
+ ]
17
+ def self.options
18
+ [
19
+ ['--code-dependencies', '使用源码依赖进行 lint'],
20
+ ['--loose-options', '添加宽松的 options, 包括 --use-libraries (可能会造成 entry point (start) undefined)'],
21
+ ['--allow-prerelease', '允许使用 prerelease 的版本 lint']
22
+ ].concat(Pod::Command::Lib::Lint.options).concat(super).uniq
23
+ end
24
+
25
+ def initialize(argv)
26
+ @loose_options = argv.flag?('loose-options')
27
+ @code_dependencies = argv.flag?('code-dependencies')
28
+ @sources = argv.option('sources') || []
29
+ @allow_prerelease = argv.flag?('allow-prerelease')
30
+ @podspec = argv.shift_argument
31
+ super
32
+
33
+ @additional_args = argv.remainder!
34
+ end
35
+
36
+ def run
37
+ Podfile.execute_with_bin_plugin do
38
+ Podfile.execute_with_allow_prerelease(@allow_prerelease) do
39
+ Podfile.execute_with_use_binaries(!@code_dependencies) do
40
+ argvs = [
41
+ @podspec || code_spec_files.first,
42
+ "--sources=#{sources_option(@code_dependencies, @sources)}",
43
+ *@additional_args
44
+ ]
45
+
46
+ if @loose_options
47
+ argvs << '--allow-warnings'
48
+ if code_spec&.all_dependencies&.any?
49
+ argvs << '--use-libraries'
50
+ end
51
+ end
52
+
53
+ lint = Pod::Command::Lib::Lint.new(CLAide::ARGV.new(argvs))
54
+ lint.validate!
55
+ lint.run
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,142 @@
1
+
2
+ require 'cocoapods-tj/native/podfile'
3
+ require 'cocoapods/command/gen'
4
+ require 'cocoapods/generate'
5
+ require 'cocoapods-tj/helpers/local/local_framework_builder'
6
+ require 'cocoapods-tj/helpers/local/local_library_builder'
7
+ require 'cocoapods-tj/helpers/local/local_build_helper'
8
+ require 'cocoapods-tj/helpers/spec_source_creator'
9
+ require 'cocoapods-tj/config/config_builder'
10
+
11
+ module Pod
12
+ class Command
13
+ class Bin < Command
14
+ class Local < Bin
15
+ self.summary = ''
16
+ self.description = <<-DESC
17
+
18
+ DESC
19
+
20
+ def self.options
21
+ [
22
+ ['--no-clean', '保留构建中间产物'],
23
+ ['--framework-output', '输出framework文件'],
24
+ ['--no-zip', '不压缩静态 framework 为 zip'],
25
+ ['--make-binary-specs', '需要制作spec集合'],
26
+ ['--env', "该组件上传的环境 %w[dev debug_iphoneos release_iphoneos]"]
27
+ ].concat(Pod::Command::Gen.options).concat(super).uniq
28
+ end
29
+
30
+ def initialize(argv)
31
+ @env = argv.option('env') || 'dev'
32
+ CBin.config.set_configuration_env(@env)
33
+
34
+
35
+ @make_binary_specs = argv.option('make-binary-specs') || []
36
+ @framework_output = argv.flag?('framework-output', false)
37
+ @clean = argv.flag?('no-clean', true)
38
+ @zip = argv.flag?('zip', true)
39
+ @sources = argv.option('sources') || []
40
+ @platform = Platform.new(:ios)
41
+
42
+ @target_name = CBin::Config::Builder.instance.target_name
43
+ @local_build_dir_name = CBin::Config::Builder.instance.xcode_build_name
44
+ @local_build_dir = CBin::Config::Builder.instance.xcode_build_dir
45
+
46
+ @framework_path
47
+ super
48
+ end
49
+
50
+ def run
51
+
52
+
53
+ sources_spec = []
54
+ Dir.chdir(CBin::Config::Builder.instance.local_psec_dir) do
55
+ spec_files = Dir.glob(%w[*.json *.podspec])
56
+ spec_files.each do |file|
57
+ spec = Pod::Specification.from_file(file)
58
+ sources_spec << spec
59
+ end
60
+ end
61
+
62
+ build(sources_spec)
63
+ end
64
+
65
+ def build(make_binary_specs)
66
+ sources_sepc = []
67
+ make_binary_specs.uniq.each do |spec|
68
+ next if spec.name.include?('/')
69
+ next if spec.name == @target_name
70
+ next if CBin::Config::Builder.instance.white_pod_list.include?(spec.name)
71
+ if spec.source[:git] && spec.source[:git]
72
+ spec_git = spec.source[:git]
73
+ spec_git_res = false
74
+ CBin::Config::Builder.instance.ignore_git_list.each do |ignore_git|
75
+ spec_git_res = spec_git.include?(ignore_git)
76
+ break if spec_git_res
77
+ end
78
+ next if spec_git_res
79
+ end
80
+ UI.warn "#{spec.name}.podspec 带有 vendored_frameworks 字段,请检查是否有效!!!" if spec.attributes_hash['vendored_frameworks']
81
+ next if spec.attributes_hash['vendored_frameworks'] && @target_name != spec.name #过滤带有vendored_frameworks的
82
+ next if (spec.attributes_hash['ios'] && spec.attributes_hash['ios']['vendored_frameworks']) #过滤带有vendored_frameworks的
83
+
84
+ next unless library_exist(spec)
85
+
86
+ sources_sepc << spec
87
+ end
88
+
89
+ fail_build_specs = []
90
+ sources_sepc.uniq.each do |spec|
91
+ begin
92
+ builder = CBin::LocalBuild::Helper.new(spec,
93
+ @platform,
94
+ @framework_output,
95
+ @zip,
96
+ @clean,
97
+ @target_name,
98
+ @local_build_dir_name,
99
+ @local_build_dir)
100
+ builder.build
101
+ CBin::Upload::Helper.new(spec, @code_dependencies, @sources).upload
102
+ rescue StandardError
103
+ fail_build_specs << spec
104
+ end
105
+ end
106
+
107
+ if fail_build_specs.any?
108
+ fail_build_specs.uniq.each do |spec|
109
+ UI.warn "【#{spec.name} | #{spec.version}】组件二进制版本编译失败 ."
110
+ end
111
+ end
112
+
113
+ success_specs = sources_sepc - fail_build_specs
114
+ if success_specs.any?
115
+ success_specs.uniq.each do |spec|
116
+ UI.warn " =======【 #{spec.name} | #{spec.version} 】二进制组件制作完成 !!!"
117
+ end
118
+ end
119
+ # pod repo update
120
+ UI.section("\nUpdating Spec Repositories\n".yellow) do
121
+ Pod::Command::Bin::Repo::Update.new(CLAide::ARGV.new([])).run
122
+ end
123
+ end
124
+
125
+ private
126
+
127
+ def library_exist(spec)
128
+ File.exist?(File.join(@local_build_dir, "lib#{spec.name}.a")) || is_framework(spec)
129
+ end
130
+
131
+ def is_framework(spec)
132
+ res = File.exist?(File.join(@local_build_dir, "#{spec.name}.framework"))
133
+ unless res
134
+ res = File.exist?(File.join(CBin::Config::Builder.instance.xcode_BuildProductsPath_dir, "#{spec.name}","Swift Compatibility Header"))
135
+ end
136
+ res
137
+ end
138
+
139
+ end
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,42 @@
1
+ require 'parallel'
2
+
3
+ module Pod
4
+ class Command
5
+ class Bin < Command
6
+ class Repo < Bin
7
+ class Update < Repo
8
+ self.summary = '更新私有源'
9
+
10
+ self.arguments = [
11
+ CLAide::Argument.new('NAME', false)
12
+ ]
13
+
14
+ def self.options
15
+ [
16
+ ['--all', '更新所有私有源,默认只更新二进制相关私有源']
17
+ ].concat(super)
18
+ end
19
+
20
+ def initialize(argv)
21
+ @all = argv.flag?('all')
22
+ @name = argv.shift_argument
23
+ super
24
+ end
25
+
26
+ def run
27
+ show_output = !config.silent?
28
+ if @name || @all
29
+ config.sources_manager.update(@name, show_output)
30
+ else
31
+ Parallel.each(valid_sources, in_threads: 4) do |source|
32
+ source.update(show_output)
33
+ end
34
+ end
35
+ end
36
+
37
+
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,68 @@
1
+ require 'cocoapods-tj/helpers'
2
+
3
+ module Pod
4
+ class Command
5
+ class Bin < Command
6
+ class Spec < Bin
7
+ class Create < Spec
8
+ self.summary = ''
9
+ self.description = <<-DESC
10
+
11
+ DESC
12
+
13
+ def self.options
14
+ [
15
+ ['--platforms=ios', '生成二进制 spec 支持的平台'],
16
+ ['--template-podspec=A.binary-template.podspec', '生成拥有 subspec 的二进制 spec 需要的模版 podspec, 插件会更改 version 和 source'],
17
+ ['--no-overwrite', '不允许覆盖']
18
+ ].concat(super)
19
+ end
20
+
21
+ def initialize(argv)
22
+ @platforms = argv.option('platforms', 'ios')
23
+ @allow_overwrite = argv.flag?('overwrite', true)
24
+ @template_podspec = argv.option('template-podspec')
25
+ @podspec = argv.shift_argument
26
+ super
27
+ end
28
+
29
+ def run
30
+ code_spec = Pod::Specification.from_file(spec_file)
31
+ if template_spec_file
32
+ template_spec = Pod::Specification.from_file(template_spec_file)
33
+ end
34
+
35
+ if binary_spec && !@allow_overwrite
36
+ else
37
+ spec_file = create_binary_spec_file(code_spec, template_spec)
38
+ end
39
+ end
40
+
41
+ def template_spec_file
42
+ @template_spec_file ||= begin
43
+ if @template_podspec
44
+ find_spec_file(@template_podspec)
45
+ else
46
+ binary_template_spec_file
47
+ end
48
+ end
49
+ end
50
+
51
+ def spec_file
52
+ @spec_file ||= begin
53
+ if @podspec
54
+ find_spec_file(@podspec)
55
+ else
56
+ if code_spec_files.empty?
57
+ raise Informative, '当前目录下没有找到可用源码 podspec.'
58
+ end
59
+
60
+ code_spec_files.first
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,114 @@
1
+ require 'cocoapods-tj/config/config'
2
+ require 'cocoapods-tj/native/podfile'
3
+
4
+ module Pod
5
+ class Command
6
+ class Bin < Command
7
+ class Repo < Bin
8
+ class Push < Repo
9
+ self.summary = ''
10
+ self.description = <<-DESC
11
+
12
+ DESC
13
+
14
+ self.arguments = [
15
+ CLAide::Argument.new('NAME.podspec', false)
16
+ ]
17
+
18
+ def self.options
19
+ [
20
+ ['--binary', '发布组件的二进制版本'],
21
+ ['--template-podspec=A.binary-template.podspec', '生成拥有 subspec 的二进制 spec 需要的模版 podspec, 插件会更改 version 和 source'],
22
+ ['--reserve-created-spec', '保留生成的二进制 spec 文件'],
23
+ ['--code-dependencies', '使用源码依赖进行 lint'],
24
+ ['--loose-options', '添加宽松的 options, 包括 --use-libraries (可能会造成 entry point (start) undefined)'],
25
+ ['--allow-prerelease', '允许使用 prerelease 的版本 lint']
26
+ ].concat(Pod::Command::Repo::Push.options).concat(super).uniq
27
+ end
28
+
29
+ def initialize(argv)
30
+ @podspec = argv.shift_argument
31
+ @binary = argv.flag?('binary')
32
+ @loose_options = argv.flag?('loose-options')
33
+ @code_dependencies = argv.flag?('code-dependencies')
34
+ @sources = argv.option('sources') || []
35
+ @reserve_created_spec = argv.flag?('reserve-created-spec')
36
+ @template_podspec = argv.option('template-podspec')
37
+ @allow_prerelease = argv.flag?('allow-prerelease')
38
+ super
39
+
40
+ @additional_args = argv.remainder!
41
+ end
42
+
43
+ def run
44
+ Podfile.execute_with_bin_plugin do
45
+ Podfile.execute_with_allow_prerelease(@allow_prerelease) do
46
+ Podfile.execute_with_use_binaries(!@code_dependencies) do
47
+ argvs = [
48
+ repo,
49
+ "--sources=#{sources_option(@code_dependencies, @sources)}",
50
+ *@additional_args
51
+ ]
52
+
53
+ argvs << spec_file if spec_file
54
+
55
+ if @loose_options
56
+ argvs += ['--allow-warnings', '--use-json']
57
+ if code_spec&.all_dependencies&.any?
58
+ argvs << '--use-libraries'
59
+ end
60
+ end
61
+
62
+ push = Pod::Command::Repo::Push.new(CLAide::ARGV.new(argvs))
63
+ push.validate!
64
+ push.run
65
+ end
66
+ end
67
+ end
68
+ ensure
69
+ clear_binary_spec_file_if_needed unless @reserve_created_spec
70
+ end
71
+
72
+ private
73
+
74
+ def template_spec_file
75
+ @template_spec_file ||= begin
76
+ if @template_podspec
77
+ find_spec_file(@template_podspec)
78
+ else
79
+ binary_template_spec_file
80
+ end
81
+ end
82
+ end
83
+
84
+ def spec_file
85
+ @spec_file ||= begin
86
+ if @podspec
87
+ find_spec_file(@podspec)
88
+ else
89
+ if code_spec_files.empty?
90
+ raise Informative, '当前目录下没有找到可用源码 podspec.'
91
+ end
92
+
93
+ spec_file = if @binary
94
+ code_spec = Pod::Specification.from_file(code_spec_files.first)
95
+ if template_spec_file
96
+ template_spec = Pod::Specification.from_file(template_spec_file)
97
+ end
98
+ create_binary_spec_file(code_spec, template_spec)
99
+ else
100
+ code_spec_files.first
101
+ end
102
+ spec_file
103
+ end
104
+ end
105
+ end
106
+
107
+ def repo
108
+ @binary ? binary_source.name : code_source.name
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
114
+ end