cocoapods-pahealth-bin 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 289d20bfac5def5a0989035912a4414e76572be944e4d0dded1fdacebc027e5d
4
+ data.tar.gz: 87a9ebdce164352588eccc39c080a767f568c0f2cd66a0ca1c10db15d9941571
5
+ SHA512:
6
+ metadata.gz: d97649ac7523edee63b653f6696f67e71f9fcd5ea14a383f8beddd817aa7076aa9d60dce08db0f66168a27bc6baa98cd3cc041a2d6994a72c56a27b97c413762
7
+ data.tar.gz: f64d47d0516025c0f7decbe2c1b6a7c4f32354c264b813e41d811e5e05a2144dc3b86838e0822c0a9b2fb13ad67b7751564e40b2854e09c34a41633cec5c8a57
@@ -0,0 +1,70 @@
1
+ require 'cocoapods-pahealth-bin/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
+ 创建 #{CBin.config.config_file} 文件,在其中保存插件需要的配置信息,
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
+ UI.puts "开始下载配置文件...\n"
38
+ file = open(url)
39
+ contents = YAML.safe_load(file.read)
40
+
41
+ UI.puts "开始同步配置文件...\n"
42
+ CBin.config.sync_config(contents.to_hash)
43
+ UI.puts "设置完成.\n".green
44
+ rescue Errno::ENOENT => e
45
+ raise Informative, "配置文件路径 #{url} 无效,请确认后重试."
46
+ end
47
+
48
+ def config_with_asker
49
+ asker = CBin::Config::Asker.new
50
+ asker.wellcome_message
51
+
52
+ config = {}
53
+ template_hash = CBin.config.template_hash
54
+ template_hash.each do |k, v|
55
+ default = begin
56
+ CBin.config.send(k)
57
+ rescue StandardError
58
+ nil
59
+ end
60
+ config[k] = asker.ask_with_answer(v[:description], default, v[:selection])
61
+ end
62
+
63
+ CBin.config.sync_config(config)
64
+ asker.done_message
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
70
+
@@ -0,0 +1,110 @@
1
+ require 'cocoapods-pahealth-bin/config/config'
2
+ require 'cocoapods-pahealth-bin/native/podfile'
3
+
4
+ module Pod
5
+ class Command
6
+ class Bin < Command
7
+ class Spec < Bin
8
+ class Lint < Spec
9
+ self.summary = 'lint spec.'
10
+ self.description = <<-DESC
11
+ spec lint 组件
12
+ DESC
13
+
14
+ self.arguments = [
15
+ CLAide::Argument.new(%w[NAME.podspec DIRECTORY http://PATH/NAME.podspec], false, true)
16
+ ]
17
+
18
+ def self.options
19
+ [
20
+ ['--binary', 'lint 组件的二进制版本'],
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::Spec::Lint.options).concat(super).uniq
27
+ end
28
+
29
+ def initialize(argv)
30
+ @podspec = argv.shift_argument
31
+ @loose_options = argv.flag?('loose-options')
32
+ @code_dependencies = argv.flag?('code-dependencies')
33
+ @sources = argv.option('sources') || []
34
+ @binary = argv.flag?('binary')
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
+ "--sources=#{sources_option(@code_dependencies, @sources)}",
49
+ *@additional_args
50
+ ]
51
+
52
+ argvs << spec_file if spec_file
53
+
54
+ if @loose_options
55
+ argvs += ['--allow-warnings']
56
+ if code_spec&.all_dependencies&.any?
57
+ argvs << '--use-libraries'
58
+ end
59
+ end
60
+
61
+ lint = Pod::Command::Spec::Lint.new(CLAide::ARGV.new(argvs))
62
+ lint.validate!
63
+ lint.run
64
+ end
65
+ end
66
+ end
67
+ ensure
68
+ clear_binary_spec_file_if_needed unless @reserve_created_spec
69
+ end
70
+
71
+ private
72
+
73
+ def template_spec_file
74
+ @template_spec_file ||= begin
75
+ if @template_podspec
76
+ find_spec_file(@template_podspec)
77
+ else
78
+ binary_template_spec_file
79
+ end
80
+ end
81
+ end
82
+
83
+ def spec_file
84
+ @spec_file ||= begin
85
+ if @podspec
86
+ find_spec_file(@podspec) || @podspec
87
+ else
88
+ if code_spec_files.empty?
89
+ raise Informative, '当前目录下没有找到可用源码 podspec.'
90
+ end
91
+
92
+ spec_file = if @binary
93
+ code_spec = Pod::Specification.from_file(code_spec_files.first)
94
+ if template_spec_file
95
+ template_spec = Pod::Specification.from_file(template_spec_file)
96
+ end
97
+ create_binary_spec_file(code_spec, template_spec)
98
+ else
99
+ code_spec_files.first
100
+ end
101
+ spec_file
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+ end
110
+
@@ -0,0 +1,14 @@
1
+ # require 'cocoapods-pahealth-bin/command/bin/spec/create'
2
+ require 'cocoapods-pahealth-bin/command/bin/spec/lint'
3
+
4
+ module Pod
5
+ class Command
6
+ class Bin < Command
7
+ class Spec < Bin
8
+ self.abstract_command = true
9
+ self.summary = '管理 spec.'
10
+ end
11
+ end
12
+ end
13
+ end
14
+
@@ -0,0 +1,51 @@
1
+ require 'cocoapods-pahealth-bin/command/bin/init'
2
+ require 'cocoapods-pahealth-bin/command/bin/spec'
3
+ require 'cocoapods-pahealth-bin/helpers'
4
+
5
+ module Pod
6
+ class Command
7
+ # This is an example of a cocoapods plugin adding a top-level subcommand
8
+ # to the 'pod' command.
9
+ #
10
+ # You can also create subcommands of existing or new commands. Say you
11
+ # wanted to add a subcommand to `list` to show newly deprecated pods,
12
+ # (e.g. `pod list deprecsated`), there are a few things that would need
13
+ # to change.
14
+ #
15
+ # - move this file to `lib/pod/command/list/deprecated.rb` and update
16
+ # the class to exist in the the Pod::Command::List namespace
17
+ # - change this class to extend from `List` instead of `Command`. This
18
+ # tells the plugin system that it is a subcommand of `list`.
19
+ # - edit `lib/cocoapods_plugins.rb` to require this file
20
+ #
21
+ # @todo Create a PR to add your plugin to CocoaPods/cocoapods.org
22
+ # in the `plugins.json` file, once your plugin is released.
23
+ #
24
+ class Bin < Command
25
+ include CBin::SourcesHelper
26
+ include CBin::SpecFilesHelper
27
+
28
+ self.abstract_command = true
29
+
30
+ self.default_subcommand = 'open'
31
+ self.summary = '组件远程私有化插件.'
32
+ self.description = <<-DESC
33
+ 组件远程私有化插件,组件发布,组件更新。
34
+ DESC
35
+
36
+
37
+ def initialize(argv)
38
+ require 'cocoapods-pahealth-bin/native'
39
+ @help = argv.flag?('help')
40
+ super
41
+ end
42
+
43
+ def validate!
44
+ super
45
+ # 这里由于 --help 是在 validate! 方法中提取的,会导致 --help 失效
46
+ # pod lib create 也有这个问题
47
+ banner! if @help
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1 @@
1
+ require 'cocoapods-pahealth-bin/command/bin'
@@ -0,0 +1,79 @@
1
+ require 'yaml'
2
+
3
+ module CBin
4
+ class Config
5
+ def config_file
6
+ File.expand_path("#{Pod::Config.instance.home_dir}/bin.yml")
7
+ end
8
+
9
+ def template_hash
10
+ {
11
+ 'code_repo_url' => { description: '私有源 Git 地址', default: 'http://domain/git/pahealth_private_repo.git' },
12
+ #'binary_repo_url' => { description: '二进制私有源 Git 地址', default: 'git@git.2dfire.net:ios/cocoapods-spec-binary.git' },
13
+ #'binary_download_url' => { description: '二进制下载地址,内部会依次传入组件名称与版本,替换字符串中的 %s ', default: 'http://iosframeworkserver-shopkeeperclient.app.2dfire.com/download/%s/%s.zip' },
14
+ # 'binary_type' => { description: '二进制打包类型', default: 'framework', selection: %w[framework library] },
15
+ #'download_file_type' => { description: '下载二进制文件类型', default: 'zip', selection: %w[zip tgz tar tbz txz dmg] }
16
+ }
17
+ end
18
+
19
+ def sync_config(config)
20
+ File.open(config_file, 'w+') do |f|
21
+ f.write(config.to_yaml)
22
+ end
23
+ end
24
+
25
+ def default_config
26
+ @default_config ||= Hash[template_hash.map { |k, v| [k, v[:default]] }]
27
+ end
28
+
29
+ private
30
+
31
+ def load_config
32
+ if File.exist?(config_file)
33
+ YAML.load_file(config_file)
34
+ else
35
+ default_config
36
+ end
37
+ end
38
+
39
+ def config
40
+ @config ||= begin
41
+ @config = OpenStruct.new load_config
42
+ validate!
43
+ @config
44
+ end
45
+ end
46
+
47
+ def validate!
48
+ template_hash.each do |k, v|
49
+ selection = v[:selection]
50
+ next if !selection || selection.empty?
51
+
52
+ config_value = @config.send(k)
53
+ next unless config_value
54
+ unless selection.include?(config_value)
55
+ raise Pod::Informative, "#{k} 字段的值必须限定在可选值 [ #{selection.join(' / ')} ] 内".red
56
+ end
57
+ end
58
+ end
59
+
60
+ def respond_to_missing?(method, include_private = false)
61
+ config.respond_to?(method) || super
62
+ end
63
+
64
+ def method_missing(method, *args, &block)
65
+ if config.respond_to?(method)
66
+ config.send(method, *args)
67
+ elsif template_hash.keys.include?(method.to_s)
68
+ raise Pod::Informative, "#{method} 字段必须在配置文件 #{config_file} 中设置, 请执行 init 命令配置或手动修改配置文件".red
69
+ else
70
+ super
71
+ end
72
+ end
73
+ end
74
+
75
+ def self.config
76
+ @config ||= Config.new
77
+ end
78
+ end
79
+
@@ -0,0 +1,61 @@
1
+ require 'yaml'
2
+ require 'cocoapods-pahealth-bin/config/config'
3
+
4
+ module CBin
5
+ class Config
6
+ class Asker
7
+ def show_prompt
8
+ print ' > '.green
9
+ end
10
+
11
+ def ask_with_answer(question, pre_answer, selection)
12
+ print "\n#{question}\n"
13
+
14
+ print_selection_info = lambda {
15
+ print "可选值:[ #{selection.join(' / ')} ]\n" if selection
16
+ }
17
+ print_selection_info.call
18
+ print "旧值:#{pre_answer}\n" unless pre_answer.nil?
19
+
20
+ answer = ''
21
+ loop do
22
+ show_prompt
23
+ answer = STDIN.gets.chomp.strip
24
+
25
+ if answer == '' && !pre_answer.nil?
26
+ answer = pre_answer
27
+ print answer.yellow
28
+ print "\n"
29
+ end
30
+
31
+ next if answer.empty?
32
+ break if !selection || selection.include?(answer)
33
+
34
+ print_selection_info.call
35
+ end
36
+
37
+ answer
38
+ end
39
+
40
+ def wellcome_message
41
+ print <<~EOF
42
+
43
+ 开始设置二进制化初始信息.
44
+ 所有的信息都会保存在 #{CBin.config.config_file} 文件中.
45
+ 你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息样式如下:
46
+
47
+ #{CBin.config.default_config.to_yaml}
48
+ EOF
49
+ end
50
+
51
+ def done_message
52
+ print "\n设置完成.\n".green
53
+ end
54
+ end
55
+
56
+ def binary_repo_url
57
+ # code here
58
+ end
59
+ end
60
+ end
61
+
@@ -0,0 +1,3 @@
1
+ module CocoapodsPahealthBin
2
+ VERSION = "0.0.3"
3
+ end
@@ -0,0 +1,38 @@
1
+ require 'cocoapods-pahealth-bin/native/sources_manager.rb'
2
+
3
+ module CBin
4
+ module SourcesHelper
5
+ def sources_manager
6
+ Pod::Config.instance.sources_manager
7
+ end
8
+
9
+ def binary_source
10
+ sources_manager.binary_source
11
+ end
12
+
13
+ def code_source
14
+ sources_manager.code_source
15
+ end
16
+
17
+ def trunk_source
18
+ sources_manager.trunk_source
19
+ end
20
+
21
+ # 优先采用对应依赖的 source
22
+ # cocoapods 内部会先匹配前面符合的 specification
23
+ # 只允许二进制的 specification subspec 比源码的 specification subspec 多
24
+ #
25
+ def valid_sources(code_dependencies = false)
26
+ sources = [code_source,trunk_source]
27
+ # unless code_dependencies
28
+ # sources << binary_source
29
+ # sources.reverse!
30
+ # end
31
+ sources
32
+ end
33
+
34
+ def sources_option(code_dependencies, additional_sources)
35
+ (valid_sources(code_dependencies).map(&:url) + Array(additional_sources)).join(',')
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,132 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cocoapods'
4
+ require 'cocoapods-pahealth-bin/config/config'
5
+
6
+ module CBin
7
+ class Specification
8
+ class Creator
9
+ attr_reader :code_spec
10
+ attr_reader :template_spec
11
+ attr_reader :spec
12
+
13
+ def initialize(code_spec, template_spec, platforms = 'ios')
14
+ @code_spec = code_spec
15
+ @template_spec = template_spec
16
+ @platforms = Array(platforms)
17
+ validate!
18
+ end
19
+
20
+ def validate!
21
+ raise Pod::Informative, '源码 podspec 不能为空 .' unless code_spec
22
+ if code_spec.subspecs.any? && template_spec.nil?
23
+ raise Pod::Informative, "不支持自动生成存在 subspec 的二进制 podspec , 需要提供模版文件 #{code_spec.name}.binary.podspec.template ."
24
+ end
25
+ end
26
+
27
+ def create
28
+ spec = template_spec ? create_from_code_spec_and_template_spec : create_from_code_spec
29
+
30
+ Pod::UI.message '生成二进制 podspec 内容: '
31
+ spec.to_pretty_json.split("\n").each do |text|
32
+ Pod::UI.message text
33
+ end
34
+
35
+ spec
36
+ end
37
+
38
+ def write_spec_file(file = filename)
39
+ create unless spec
40
+
41
+ File.open(file, 'w+') do |f|
42
+ f.write(spec.to_pretty_json)
43
+ end
44
+
45
+ @filename = file
46
+ end
47
+
48
+ def clear_spec_file
49
+ File.delete(filename) if File.exist?(filename)
50
+ end
51
+
52
+ def filename
53
+ @filename ||= "#{spec.name}.binary.podspec.json"
54
+ end
55
+
56
+ private
57
+
58
+ def create_from_code_spec
59
+ @spec = code_spec.dup
60
+ # vendored_frameworks | resources | source | source_files | public_header_files
61
+ # license | resource_bundles | vendored_libraries
62
+
63
+ # Project Linkin
64
+ @spec.vendored_frameworks = "#{code_spec.root.name}.framework"
65
+
66
+ # Resources
67
+ extnames = []
68
+ extnames << '*.bundle' if code_spec_consumer.resource_bundles.any?
69
+ if code_spec_consumer.resources.any?
70
+ extnames += code_spec_consumer.resources.map { |r| File.basename(r) }
71
+ end
72
+ if extnames.any?
73
+ @spec.resources = framework_contents('Resources').flat_map { |r| extnames.map { |e| "#{r}/#{e}" } }
74
+ end
75
+
76
+ # Source Location
77
+ @spec.source = binary_source
78
+
79
+ # Source Code
80
+ @spec.source_files = framework_contents('Headers/*')
81
+ @spec.public_header_files = framework_contents('Headers/*')
82
+
83
+ # Unused for binary
84
+ spec_hash = @spec.to_hash
85
+ # spec_hash.delete('license')
86
+ spec_hash.delete('resource_bundles')
87
+ spec_hash.delete('exclude_files')
88
+ spec_hash.delete('preserve_paths')
89
+ # 这里不确定 vendored_libraries 指定的时动态/静态库
90
+ # 如果是静态库的话,需要移除,否则就不移除
91
+ # 最好是静态库都独立成 Pod ,cocoapods-package 打静态库去 collect 目标文件时好做过滤
92
+ # 这里统一只对命名后缀 .a 文件做处理
93
+ # spec_hash.delete('vendored_libraries')
94
+ # libraries 只能假设为动态库不做处理了,如果有例外,需要开发者自行处理
95
+ vendored_libraries = spec_hash.delete('vendored_libraries')
96
+ vendored_libraries = Array(vendored_libraries).reject { |l| l.end_with?('.a') }
97
+ if vendored_libraries.any?
98
+ spec_hash['vendored_libraries'] = vendored_libraries
99
+ end
100
+
101
+ # Filter platforms
102
+ platforms = spec_hash['platforms']
103
+ selected_platforms = platforms.select { |k, _v| @platforms.include?(k) }
104
+ spec_hash['platforms'] = selected_platforms.empty? ? platforms : selected_platforms
105
+
106
+ @spec = Pod::Specification.from_hash(spec_hash)
107
+ @spec
108
+ end
109
+
110
+ def create_from_code_spec_and_template_spec
111
+ @spec = template_spec.dup
112
+
113
+ @spec.version = code_spec.version
114
+ @spec.source = binary_source
115
+ @spec
116
+ end
117
+
118
+ def binary_source
119
+ { http: format(CBin.config.binary_download_url, code_spec.root.name, code_spec.version), type: CBin.config.download_file_type }
120
+ end
121
+
122
+ def code_spec_consumer(_platform = :ios)
123
+ code_spec.consumer(:ios)
124
+ end
125
+
126
+ def framework_contents(name)
127
+ ["#{code_spec.root.name}.framework", "#{code_spec.root.name}.framework/Versions/A"].map { |path| "#{path}/#{name}" }
128
+ end
129
+ end
130
+ end
131
+ end
132
+
@@ -0,0 +1,78 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'cocoapods-pahealth-bin/native/sources_manager.rb'
4
+ require 'cocoapods-pahealth-bin/helpers/spec_creator'
5
+
6
+ module CBin
7
+ module SpecFilesHelper
8
+ def spec_files
9
+ @spec_files ||= Pathname.glob('*.podspec{,.json}')
10
+ end
11
+
12
+ def binary_spec_files
13
+ @binary_spec_files ||= Pathname.glob('*.binary.podspec{,.json}')
14
+ end
15
+
16
+ def binary_template_spec_files
17
+ @binary_spec_template_files ||= Pathname.glob('*.binary-template.podspec{,.json}')
18
+ end
19
+
20
+ def binary_template_spec_file
21
+ @binary_spec_template_file ||= binary_template_spec_files.first
22
+ end
23
+
24
+ def code_spec_files
25
+ @code_spec_files ||= spec_files - binary_spec_files - binary_template_spec_files
26
+ end
27
+
28
+ def code_spec
29
+ if code_spec_files.first
30
+ Pod::Specification.from_file(code_spec_files.first)
31
+ end
32
+ end
33
+
34
+ def binary_spec
35
+ if binary_spec_files.first
36
+ Pod::Specification.from_file(binary_spec_files.first)
37
+ end
38
+ end
39
+
40
+ def binary_template_spec
41
+ if binary_template_spec_file
42
+ Pod::Specification.from_file(binary_template_spec_file)
43
+ end
44
+ end
45
+
46
+ def find_spec_file(podspec)
47
+ path = Pathname(podspec)
48
+ raise Pod::Informative, "无法找到 #{podspec}" unless path.exist?
49
+
50
+ path
51
+ end
52
+
53
+ def create_binary_spec_file(code_spec, template_spec)
54
+ # 1. code spec 是否有 subpsec
55
+ # 1.1 有,查找 template spec,并生成
56
+ # 1.2 没有,是否有 template spec
57
+ # 1.2.1 有,根据 template spec 生成
58
+ # 1.2.2 没有,根据 code spec 生成
59
+
60
+ unless code_spec
61
+ raise Pod::Informative, '没有二进制 podspec 的情况下,必须要提供源码 podspec.'
62
+ end
63
+ if code_spec.subspecs.any? && template_spec.nil?
64
+ raise Pod::Informative, '拥有 subspec 的组件,在生成二进制 podspec 时,必须要提供模版 podspec.'
65
+ end
66
+
67
+ @spec_creator = CBin::Specification::Creator.new(code_spec, template_spec)
68
+ @spec_creator.create
69
+ @spec_creator.write_spec_file
70
+ @spec_creator.filename
71
+ end
72
+
73
+ def clear_binary_spec_file_if_needed
74
+ @spec_creator&.clear_spec_file
75
+ end
76
+ end
77
+ end
78
+
@@ -0,0 +1,3 @@
1
+ require 'cocoapods-pahealth-bin/helpers/sources_helper'
2
+ require 'cocoapods-pahealth-bin/helpers/spec_creator'
3
+ require 'cocoapods-pahealth-bin/helpers/spec_files_helper'
@@ -0,0 +1,78 @@
1
+ require 'cocoapods'
2
+ require 'cocoapods-pahealth-bin/native/podfile_env'
3
+
4
+ module Pod
5
+ class Podfile
6
+ # TREAT_DEVELOPMENTS_AS_NORMAL = 'treat_developments_as_normal'.freeze
7
+
8
+ module DSL
9
+ def allow_prerelease!
10
+ set_internal_hash_value(ALLOW_PRERELEASE, true)
11
+ end
12
+
13
+ def use_binaries!(flag = true)
14
+ set_internal_hash_value(USE_BINARIES, flag)
15
+ end
16
+
17
+ def use_binaries_with_spec_selector!(&block)
18
+ raise Informative, '必须提供选择需要二进制组件的 block !' unless block_given?
19
+
20
+ set_internal_hash_value(USE_BINARIES_SELECTOR, block)
21
+ end
22
+
23
+ def set_use_source_pods(pods)
24
+ hash_pods_use_source = get_internal_hash_value(USE_SOURCE_PODS) || []
25
+ hash_pods_use_source += Array(pods)
26
+ set_internal_hash_value(USE_SOURCE_PODS, hash_pods_use_source)
27
+ end
28
+ end
29
+
30
+ alias old_plugins plugins
31
+ def plugins
32
+ if ENV[USE_PLUGINS]
33
+ env_plugins = ENV[USE_PLUGINS].split(',').each_with_object({}) do |name, result|
34
+ result[name] = {}
35
+ end
36
+ env_plugins.merge!(old_plugins)
37
+ else
38
+ old_plugins
39
+ end
40
+ end
41
+
42
+ def use_binaries_selector
43
+ get_internal_hash_value(USE_BINARIES_SELECTOR, nil)
44
+ end
45
+
46
+ def allow_prerelease?
47
+ get_internal_hash_value(ALLOW_PRERELEASE, false) || ENV[ALLOW_PRERELEASE] == 'true'
48
+ end
49
+
50
+ def use_binaries?
51
+ get_internal_hash_value(USE_BINARIES, false) || ENV[USE_BINARIES] == 'true'
52
+ end
53
+
54
+ def use_source_pods
55
+ get_internal_hash_value(USE_SOURCE_PODS, []) + String(ENV[USE_SOURCE_PODS]).split('|').uniq
56
+ end
57
+
58
+ private
59
+
60
+ def valid_bin_plugin
61
+ unless plugins.keys.include?('cocoapods-bin')
62
+ raise Pod::Informative, 'You should add `plugin \'cocoapods-bin\'` before using its DSL'
63
+ end
64
+ end
65
+
66
+ # set_hash_value 有 key 限制
67
+ def set_internal_hash_value(key, value)
68
+ valid_bin_plugin
69
+
70
+ internal_hash[key] = value
71
+ end
72
+
73
+ def get_internal_hash_value(key, default = nil)
74
+ internal_hash.fetch(key, default)
75
+ end
76
+ end
77
+ end
78
+
@@ -0,0 +1,35 @@
1
+ module Pod
2
+ class Podfile
3
+ USE_BINARIES = 'use_binaries'
4
+ USE_SOURCE_PODS = 'use_source_pods'
5
+ USE_BINARIES_SELECTOR = 'use_binaries_selector'
6
+ ALLOW_PRERELEASE = 'allow_prerelease'
7
+ USE_PLUGINS = 'use_plugins'
8
+
9
+ module ENVExecutor
10
+ def execute_with_bin_plugin(&block)
11
+ execute_with_key(USE_PLUGINS, -> { 'cocoapods-pahealth-bin' }, &block)
12
+ end
13
+
14
+ def execute_with_allow_prerelease(allow_prerelease, &block)
15
+ execute_with_key(ALLOW_PRERELEASE, -> { allow_prerelease ? 'true' : 'false' }, &block)
16
+ end
17
+
18
+ def execute_with_use_binaries(use_binaries, &block)
19
+ execute_with_key(USE_BINARIES, -> { use_binaries ? 'true' : 'false' }, &block)
20
+ end
21
+
22
+ def execute_with_key(key, value_returner)
23
+ origin_value = ENV[key]
24
+ ENV[key] = value_returner.call
25
+
26
+ yield if block_given?
27
+
28
+ ENV[key] = origin_value
29
+ end
30
+ end
31
+
32
+ extend ENVExecutor
33
+ end
34
+ end
35
+
@@ -0,0 +1,22 @@
1
+ require 'cocoapods'
2
+ require 'cocoapods-pahealth-bin/config/config'
3
+
4
+ module Pod
5
+ class Source
6
+ class Manager
7
+ # 源码 source
8
+ def code_source
9
+ source_with_name_or_url(CBin.config.code_repo_url)
10
+ end
11
+
12
+ # 二进制 source
13
+ def binary_source
14
+ source_with_name_or_url(CBin.config.binary_repo_url)
15
+ end
16
+
17
+ def trunk_source
18
+ source_with_name_or_url('https://github.com/CocoaPods/Specs.git')
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,2 @@
1
+ require 'cocoapods'
2
+ require 'cocoapods-pahealth-bin/native/sources_manager'
@@ -0,0 +1 @@
1
+ require 'cocoapods-pahealth-bin/gem_version'
@@ -0,0 +1 @@
1
+ require 'cocoapods-pahealth-bin/command'
metadata ADDED
@@ -0,0 +1,131 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cocoapods-pahealth-bin
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - GitWangKai
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-09-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: parallel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: cocoapods
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.9.3
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.9.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: cocoapods-generate
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.0.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.3'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.3'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: A short description of cocoapods-pahealth-bin.
84
+ email:
85
+ - 18500052382@163.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - lib/cocoapods-pahealth-bin.rb
91
+ - lib/cocoapods-pahealth-bin/command.rb
92
+ - lib/cocoapods-pahealth-bin/command/bin.rb
93
+ - lib/cocoapods-pahealth-bin/command/bin/init.rb
94
+ - lib/cocoapods-pahealth-bin/command/bin/spec.rb
95
+ - lib/cocoapods-pahealth-bin/command/bin/spec/lint.rb
96
+ - lib/cocoapods-pahealth-bin/config/config.rb
97
+ - lib/cocoapods-pahealth-bin/config/config_asker.rb
98
+ - lib/cocoapods-pahealth-bin/gem_version.rb
99
+ - lib/cocoapods-pahealth-bin/helpers.rb
100
+ - lib/cocoapods-pahealth-bin/helpers/sources_helper.rb
101
+ - lib/cocoapods-pahealth-bin/helpers/spec_creator.rb
102
+ - lib/cocoapods-pahealth-bin/helpers/spec_files_helper.rb
103
+ - lib/cocoapods-pahealth-bin/native.rb
104
+ - lib/cocoapods-pahealth-bin/native/podfile.rb
105
+ - lib/cocoapods-pahealth-bin/native/podfile_env.rb
106
+ - lib/cocoapods-pahealth-bin/native/sources_manager.rb
107
+ - lib/cocoapods_plugin.rb
108
+ homepage: https://github.com/EXAMPLE/cocoapods-pahealth-bin
109
+ licenses:
110
+ - MIT
111
+ metadata: {}
112
+ post_install_message:
113
+ rdoc_options: []
114
+ require_paths:
115
+ - lib
116
+ required_ruby_version: !ruby/object:Gem::Requirement
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ required_rubygems_version: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ requirements: []
127
+ rubygems_version: 3.0.3
128
+ signing_key:
129
+ specification_version: 4
130
+ summary: A longer description of cocoapods-pahealth-bin.
131
+ test_files: []