cocoapods-fy-bin 0.0.1

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 (62) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +1 -0
  4. data/lib/cocoapods-fy-bin/command/bin/archive.rb +202 -0
  5. data/lib/cocoapods-fy-bin/command/bin/auto.rb +204 -0
  6. data/lib/cocoapods-fy-bin/command/bin/code.rb +232 -0
  7. data/lib/cocoapods-fy-bin/command/bin/imy.rb +46 -0
  8. data/lib/cocoapods-fy-bin/command/bin/init.rb +69 -0
  9. data/lib/cocoapods-fy-bin/command/bin/initHotKey.rb +70 -0
  10. data/lib/cocoapods-fy-bin/command/bin/install.rb +44 -0
  11. data/lib/cocoapods-fy-bin/command/bin/lib/lint.rb +69 -0
  12. data/lib/cocoapods-fy-bin/command/bin/repo/update.rb +43 -0
  13. data/lib/cocoapods-fy-bin/command/bin/spec/create.rb +73 -0
  14. data/lib/cocoapods-fy-bin/command/bin/spec/push.rb +114 -0
  15. data/lib/cocoapods-fy-bin/command/bin/update.rb +154 -0
  16. data/lib/cocoapods-fy-bin/command/bin.rb +59 -0
  17. data/lib/cocoapods-fy-bin/command.rb +2 -0
  18. data/lib/cocoapods-fy-bin/config/config.rb +137 -0
  19. data/lib/cocoapods-fy-bin/config/config_asker.rb +57 -0
  20. data/lib/cocoapods-fy-bin/config/config_builder.rb +228 -0
  21. data/lib/cocoapods-fy-bin/config/config_hot_key.rb +103 -0
  22. data/lib/cocoapods-fy-bin/config/config_hot_key_asker.rb +57 -0
  23. data/lib/cocoapods-fy-bin/gem_version.rb +10 -0
  24. data/lib/cocoapods-fy-bin/helpers/build_helper.rb +164 -0
  25. data/lib/cocoapods-fy-bin/helpers/build_utils.rb +63 -0
  26. data/lib/cocoapods-fy-bin/helpers/framework.rb +94 -0
  27. data/lib/cocoapods-fy-bin/helpers/framework_builder.rb +419 -0
  28. data/lib/cocoapods-fy-bin/helpers/library.rb +54 -0
  29. data/lib/cocoapods-fy-bin/helpers/library_builder.rb +91 -0
  30. data/lib/cocoapods-fy-bin/helpers/sources_helper.rb +36 -0
  31. data/lib/cocoapods-fy-bin/helpers/spec_creator.rb +170 -0
  32. data/lib/cocoapods-fy-bin/helpers/spec_files_helper.rb +77 -0
  33. data/lib/cocoapods-fy-bin/helpers/spec_source_creator.rb +229 -0
  34. data/lib/cocoapods-fy-bin/helpers/upload_helper.rb +97 -0
  35. data/lib/cocoapods-fy-bin/helpers.rb +5 -0
  36. data/lib/cocoapods-fy-bin/native/acknowledgements.rb +27 -0
  37. data/lib/cocoapods-fy-bin/native/analyzer.rb +55 -0
  38. data/lib/cocoapods-fy-bin/native/file_accessor.rb +28 -0
  39. data/lib/cocoapods-fy-bin/native/installation_options.rb +25 -0
  40. data/lib/cocoapods-fy-bin/native/installer.rb +204 -0
  41. data/lib/cocoapods-fy-bin/native/linter.rb +26 -0
  42. data/lib/cocoapods-fy-bin/native/path_source.rb +33 -0
  43. data/lib/cocoapods-fy-bin/native/pod_source_installer.rb +19 -0
  44. data/lib/cocoapods-fy-bin/native/pod_target_installer.rb +94 -0
  45. data/lib/cocoapods-fy-bin/native/podfile.rb +91 -0
  46. data/lib/cocoapods-fy-bin/native/podfile_env.rb +37 -0
  47. data/lib/cocoapods-fy-bin/native/podfile_generator.rb +199 -0
  48. data/lib/cocoapods-fy-bin/native/podspec_finder.rb +25 -0
  49. data/lib/cocoapods-fy-bin/native/resolver.rb +238 -0
  50. data/lib/cocoapods-fy-bin/native/sandbox_analyzer.rb +34 -0
  51. data/lib/cocoapods-fy-bin/native/source.rb +35 -0
  52. data/lib/cocoapods-fy-bin/native/sources_manager.rb +20 -0
  53. data/lib/cocoapods-fy-bin/native/specification.rb +31 -0
  54. data/lib/cocoapods-fy-bin/native/target_validator.rb +41 -0
  55. data/lib/cocoapods-fy-bin/native/validator.rb +40 -0
  56. data/lib/cocoapods-fy-bin/native.rb +23 -0
  57. data/lib/cocoapods-fy-bin/source_provider_hook.rb +55 -0
  58. data/lib/cocoapods-fy-bin.rb +2 -0
  59. data/lib/cocoapods_plugin.rb +3 -0
  60. data/spec/command/bin_spec.rb +12 -0
  61. data/spec/spec_helper.rb +50 -0
  62. metadata +177 -0
@@ -0,0 +1,46 @@
1
+ require 'cocoapods-fy-bin/config/config_hot_key_asker'
2
+
3
+ module Pod
4
+ class Command
5
+ class Bin < Command
6
+ class Imy < Bin
7
+ self.summary = '快捷键'
8
+ self.description = <<-DESC
9
+ 创建 文件,在其中保存插件需要的配置信息,
10
+ 如二进制私有源地址、源码私有源地址等。
11
+ DESC
12
+
13
+ self.arguments = [
14
+ CLAide::Argument.new('1', false)
15
+ ]
16
+
17
+ def self.options
18
+ [
19
+ ].concat(super)
20
+ end
21
+
22
+ def initialize(argv)
23
+ @hot_key = argv.shift_argument || '1'
24
+ super
25
+ end
26
+
27
+ def run
28
+ CBin.config_hot_key.set_hot_key_index(@hot_key)
29
+ UI.puts "cd #{CBin.config_hot_key.hot_key_dir}".yellow
30
+
31
+ if Dir.exist?(CBin.config_hot_key.hot_key_dir)
32
+ Dir.chdir(CBin.config_hot_key.hot_key_dir) do
33
+ UI.puts " #{CBin.config_hot_key.hot_key_cmd}".yellow
34
+ system CBin.config_hot_key.hot_key_cmd
35
+ end
36
+ else
37
+ raise "配置项中文件目录不存在 #{CBin.config_hot_key.hot_key_dir}"
38
+ end
39
+
40
+
41
+ end
42
+
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,69 @@
1
+ require 'cocoapods-fy-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
+ 创建 文件,在其中保存插件需要的配置信息,
10
+ 如快捷键1 快捷键2 所对应执行的命令
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
@@ -0,0 +1,70 @@
1
+
2
+ require 'cocoapods-fy-bin/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
+ 如二进制私有源地址、源码私有源地址等。
12
+ DESC
13
+
14
+ def self.options
15
+ [
16
+ ['--bin-url=URL', '配置文件地址,直接从此地址下载配置文件']
17
+ ].concat(super)
18
+ end
19
+
20
+ def initialize(argv)
21
+ @bin_url = argv.option('bin-url')
22
+ super
23
+ end
24
+
25
+ def run
26
+ if @bin_url.nil?
27
+ config_with_asker
28
+ else
29
+ config_with_url(@bin_url)
30
+ end
31
+ end
32
+
33
+ private
34
+
35
+ def config_with_url(url)
36
+ require 'open-uri'
37
+
38
+ UI.puts "开始下载配置文件...\n"
39
+ file = open(url)
40
+ contents = YAML.safe_load(file.read)
41
+
42
+ UI.puts "开始同步配置文件...\n"
43
+ CBin.config_hot_key.sync_config(contents.to_hash)
44
+ UI.puts "设置完成.\n".green
45
+ rescue Errno::ENOENT => e
46
+ raise Informative, "配置文件路径 #{url} 无效,请确认后重试."
47
+ end
48
+
49
+ def config_with_asker
50
+ asker = CBin::Config_Hot_Key::Asker.new
51
+ asker.wellcome_message
52
+
53
+ config = {}
54
+ template_hash = CBin.config_hot_key.template_hash
55
+ template_hash.each do |k, v|
56
+ default = begin
57
+ CBin.config_hot_key.send(k)
58
+ rescue StandardError
59
+ nil
60
+ end
61
+ config[k] = asker.ask_with_answer(v[:description], default, v[:selection])
62
+ end
63
+
64
+ CBin.config_hot_key.sync_config(config)
65
+ asker.done_message
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,44 @@
1
+
2
+ require 'cocoapods-fy-bin/command/bin/update'
3
+ module Pod
4
+ class Command
5
+ class Bin < Command
6
+ class Install < Bin
7
+ include Pod
8
+
9
+ self.summary = 'pod install 拦截器,会加载本地Podfile_local文件,DSL加载到原始Podfile文件中。'
10
+
11
+ self.description = <<-DESC
12
+ pod install 拦截器,会加载本地Podfile_local文件
13
+ 会通过DSL加载到原始Podfile文件中
14
+ 支持 pod 'xxx' 各种写法
15
+ 支持 post_install/pre_install钩子,采用覆盖做法
16
+ DESC
17
+ def self.options
18
+ [
19
+ ['--repo-update', 'Force running `pod repo update` before install'],
20
+ ['--deployment', 'Disallow any changes to the Podfile or the Podfile.lock during installation'],
21
+ ['--clean-install', 'Ignore the contents of the project cache and force a full pod installation. This only ' \
22
+ 'applies to projects that have enabled incremental installation']
23
+ ].concat(super).reject { |(name, _)| name == '--no-repo-update' }
24
+ end
25
+
26
+ def initialize(argv)
27
+ @update = argv.flag?('update')
28
+ super
29
+ @additional_args = argv.remainder!
30
+ end
31
+
32
+ def run
33
+ Update.load_local_podfile
34
+ argvs = [
35
+ *@additional_args
36
+ ]
37
+ gen = Pod::Command::Install.new(CLAide::ARGV.new(argvs))
38
+ gen.validate!
39
+ gen.run
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,69 @@
1
+ require 'cocoapods-fy-bin/config/config'
2
+ require 'cocoapods-fy-bin/native/podfile'
3
+
4
+ module Pod
5
+ class Command
6
+ class Bin < Command
7
+ class Lib < Bin
8
+ class Lint < Lib
9
+ self.summary = 'lint 组件.'
10
+ self.description = <<-DESC
11
+ lint 二进制组件 / 源码组件
12
+ DESC
13
+
14
+ self.arguments = [
15
+ CLAide::Argument.new('NAME.podspec', false)
16
+ ]
17
+
18
+ # lib lint 不会下载 source,所以不能进行二进制 lint
19
+ # 要 lint 二进制版本,需要进行 spec lint,此 lint 会去下载 source
20
+ def self.options
21
+ [
22
+ ['--code-dependencies', '使用源码依赖进行 lint'],
23
+ ['--loose-options', '添加宽松的 options, 包括 --use-libraries (可能会造成 entry point (start) undefined)'],
24
+ ['--allow-prerelease', '允许使用 prerelease 的版本 lint']
25
+ ].concat(Pod::Command::Lib::Lint.options).concat(super).uniq
26
+ end
27
+
28
+ def initialize(argv)
29
+ @loose_options = argv.flag?('loose-options')
30
+ @code_dependencies = argv.flag?('code-dependencies')
31
+ @sources = argv.option('sources') || []
32
+ @allow_prerelease = argv.flag?('allow-prerelease')
33
+ @podspec = argv.shift_argument
34
+ super
35
+
36
+ @additional_args = argv.remainder!
37
+ end
38
+
39
+ def run
40
+ Podfile.execute_with_bin_plugin do
41
+ Podfile.execute_with_allow_prerelease(@allow_prerelease) do
42
+ Podfile.execute_with_use_binaries(!@code_dependencies) do
43
+ argvs = [
44
+ @podspec || code_spec_files.first,
45
+ "--sources=#{sources_option(@code_dependencies, @sources)}",
46
+ *@additional_args
47
+ ]
48
+
49
+ if @loose_options
50
+ argvs << '--allow-warnings'
51
+ if code_spec&.all_dependencies&.any?
52
+ argvs << '--use-libraries'
53
+ end
54
+ end
55
+
56
+ lint = Pod::Command::Lib::Lint.new(CLAide::ARGV.new(argvs))
57
+ lint.validate!
58
+ lint.run
59
+ end
60
+ end
61
+ end
62
+ end
63
+
64
+
65
+ end
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,43 @@
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
+ UI.puts "更新私有源仓库 #{source.to_s}".yellow
33
+ source.update(show_output)
34
+ end
35
+ end
36
+ end
37
+
38
+
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,73 @@
1
+ require 'cocoapods-fy-bin/helpers'
2
+
3
+ module Pod
4
+ class Command
5
+ class Bin < Command
6
+ class Spec < Bin
7
+ class Create < Spec
8
+ self.summary = '创建二进制 spec.'
9
+ self.description = <<-DESC
10
+ 根据源码 podspec 文件,创建对应的二进制 podspec 文件.
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
+ UI.puts "开始读取 podspec 文件...\n"
31
+
32
+ code_spec = Pod::Specification.from_file(spec_file)
33
+ if template_spec_file
34
+ template_spec = Pod::Specification.from_file(template_spec_file)
35
+ end
36
+
37
+ if binary_spec && !@allow_overwrite
38
+ UI.warn "二进制 podspec 文件 #{binary_spec_files.first} 已存在.\n"
39
+ else
40
+ UI.puts "开始生成二进制 podspec 文件...\n"
41
+ spec_file = create_binary_spec_file(code_spec, template_spec)
42
+ UI.puts "创建二进制 podspec 文件 #{spec_file} 成功.\n".green
43
+ end
44
+ end
45
+
46
+ def template_spec_file
47
+ @template_spec_file ||= begin
48
+ if @template_podspec
49
+ find_spec_file(@template_podspec)
50
+ else
51
+ binary_template_spec_file
52
+ end
53
+ end
54
+ end
55
+
56
+ def spec_file
57
+ @spec_file ||= begin
58
+ if @podspec
59
+ find_spec_file(@podspec)
60
+ else
61
+ if code_spec_files.empty?
62
+ raise Informative, '当前目录下没有找到可用源码 podspec.'
63
+ end
64
+
65
+ code_spec_files.first
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,114 @@
1
+ require 'cocoapods-fy-bin/config/config'
2
+ require 'cocoapods-fy-bin/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
@@ -0,0 +1,154 @@
1
+
2
+ require 'cocoapods'
3
+ require 'cocoapods-fy-bin/native/podfile_env'
4
+ require 'cocoapods-fy-bin/native/podfile'
5
+
6
+ module Pod
7
+ class Command
8
+ class Bin < Command
9
+ class Update < Bin
10
+ include Pod
11
+ include Pod::Podfile::DSL
12
+
13
+ self.summary = 'pod update 拦截器,会加载本地Podfile_local文件,DSL加载到原始Podfile文件中。'
14
+
15
+ self.description = <<-DESC
16
+ pod update 拦截器,会加载本地Podfile_local文件
17
+ 会通过DSL加载到原始Podfile文件中
18
+ 支持 pod 'xxx' 各种写法
19
+ 支持 post_install/pre_install钩子,采用覆盖做法
20
+ DESC
21
+ def self.options
22
+ [
23
+ ["--sources=#{Pod::TrunkSource::TRUNK_REPO_URL}", 'The sources from which to update dependent pods. ' \
24
+ 'Multiple sources must be comma-delimited'],
25
+ ['--exclude-pods=podName', 'Pods to exclude during update. Multiple pods must be comma-delimited'],
26
+ ['--clean-install', 'Ignore the contents of the project cache and force a full pod installation. This only ' \
27
+ 'applies to projects that have enabled incremental installation'],
28
+ ['--project-directory=/project/dir/', 'The path to the root of the project directory'],
29
+ ['--no-repo-update', 'Skip running `pod repo update` before install']
30
+ ].concat(super)
31
+ end
32
+
33
+ def initialize(argv)
34
+ @update = argv.flag?('update')
35
+ super
36
+ @additional_args = argv.remainder!
37
+ end
38
+
39
+ def run
40
+ Update.load_local_podfile
41
+
42
+ argvs = [
43
+ *@additional_args
44
+ ]
45
+
46
+ gen = Pod::Command::Update.new(CLAide::ARGV.new(argvs))
47
+ gen.validate!
48
+ gen.run
49
+ end
50
+
51
+ def self.load_local_podfile
52
+ # 同步 Podfile_local 文件
53
+ project_root = Pod::Config.instance.project_root
54
+ path = File.join(project_root.to_s, 'Podfile_local')
55
+ unless File.exist?(path)
56
+ path = File.join(project_root.to_s, 'Podfile_local')
57
+ end
58
+
59
+ if File.exist?(path)
60
+ contents = File.open(path, 'r:utf-8', &:read)
61
+
62
+ podfile = Pod::Config.instance.podfile
63
+ local_podfile = Podfile.from_file(path)
64
+
65
+ if local_podfile
66
+ local_pre_install_callback = nil
67
+ local_post_install_callback = nil
68
+ local_podfile.instance_eval do
69
+ local_pre_install_callback = @pre_install_callback
70
+ local_post_install_callback = @post_install_callback
71
+ end
72
+ end
73
+
74
+ podfile.instance_eval do
75
+ begin
76
+
77
+ # podfile HASH_KEYS才有plugins字段,否则会被限制
78
+ if local_podfile.plugins.any?
79
+ hash_plugins = podfile.plugins || {}
80
+ hash_plugins = hash_plugins.merge(local_podfile.plugins)
81
+ set_hash_value(%w[plugins].first, hash_plugins)
82
+
83
+ # 加入源码白名单,避免本地库被二进制了
84
+ podfile.set_use_source_pods(local_podfile.use_source_pods) if local_podfile.use_source_pods
85
+ podfile.use_binaries!(local_podfile.use_binaries?)
86
+ end
87
+
88
+ # 在target把local-target中到dependencies值删除了,再设置
89
+ # 把本地和原始到dependencies 合并,设置dependencies
90
+ local_podfile&.target_definition_list&.each do |local_target|
91
+ next if local_target.name == 'Pods'
92
+
93
+ target_definition_list.each do |target|
94
+
95
+ unless target.name == local_target.name &&
96
+ (local_target.to_hash['dependencies'] &&local_target.to_hash['dependencies'].any?)
97
+ next
98
+ end
99
+
100
+
101
+
102
+ target.instance_exec do
103
+ # 在target把local-target中到dependencies值删除了,再设置
104
+
105
+ local_dependencies = local_target.to_hash['dependencies']
106
+ target_dependencies = target.to_hash['dependencies']
107
+
108
+ local_dependencies.each do |local_dependency|
109
+ unless local_dependency.is_a?(Hash) && local_dependency.keys.first
110
+ next
111
+ end
112
+
113
+ target_dependencies.each do |target_dependency|
114
+ next unless target_dependency.is_a?(Hash) &&
115
+ target_dependency.keys.first &&
116
+ target_dependency.keys.first == local_dependency.keys.first
117
+
118
+ target_dependencies.delete target_dependency
119
+ break
120
+ end
121
+ end
122
+ # 把本地和原始到dependencies 合并,设置dependencies
123
+ local_dependencies.each do |d|
124
+ UI.message "Development Pod #{d.to_yaml}"
125
+ if podfile.plugins.keys.include?('cocoapods-fy-bin')
126
+ podfile.set_use_source_pods(d.keys.first) if (d.is_a?(Hash) && d.keys.first)
127
+ end
128
+ end
129
+ new_dependencies = target_dependencies + local_dependencies
130
+ set_hash_value(%w[dependencies].first, new_dependencies)
131
+
132
+ end
133
+ end
134
+
135
+ end
136
+
137
+ if local_pre_install_callback
138
+ @pre_install_callback = local_pre_install_callback
139
+ end
140
+ if local_post_install_callback
141
+ @post_install_callback = local_post_install_callback
142
+ end
143
+ rescue Exception => e
144
+ message = "Invalid `#{path}` file: #{e.message}"
145
+ raise Pod::DSLError.new(message, path, e, contents)
146
+ end
147
+ end
148
+
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end