cocoapods-mtxx-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 (67) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +22 -0
  3. data/README.md +11 -0
  4. data/lib/cocoapods-mtxx-bin/command/bin/archive.rb +206 -0
  5. data/lib/cocoapods-mtxx-bin/command/bin/auto.rb +212 -0
  6. data/lib/cocoapods-mtxx-bin/command/bin/code.rb +232 -0
  7. data/lib/cocoapods-mtxx-bin/command/bin/imy.rb +45 -0
  8. data/lib/cocoapods-mtxx-bin/command/bin/init.rb +94 -0
  9. data/lib/cocoapods-mtxx-bin/command/bin/initHotKey.rb +70 -0
  10. data/lib/cocoapods-mtxx-bin/command/bin/install.rb +44 -0
  11. data/lib/cocoapods-mtxx-bin/command/bin/lib/lint.rb +67 -0
  12. data/lib/cocoapods-mtxx-bin/command/bin/repo/push.rb +115 -0
  13. data/lib/cocoapods-mtxx-bin/command/bin/repo/update.rb +42 -0
  14. data/lib/cocoapods-mtxx-bin/command/bin/repo.rb +14 -0
  15. data/lib/cocoapods-mtxx-bin/command/bin/spec/create.rb +73 -0
  16. data/lib/cocoapods-mtxx-bin/command/bin/spec/lint.rb +109 -0
  17. data/lib/cocoapods-mtxx-bin/command/bin/spec.rb +13 -0
  18. data/lib/cocoapods-mtxx-bin/command/bin/update.rb +154 -0
  19. data/lib/cocoapods-mtxx-bin/command/bin.rb +65 -0
  20. data/lib/cocoapods-mtxx-bin/command.rb +1 -0
  21. data/lib/cocoapods-mtxx-bin/config/config.rb +166 -0
  22. data/lib/cocoapods-mtxx-bin/config/config_asker.rb +60 -0
  23. data/lib/cocoapods-mtxx-bin/config/config_builder.rb +216 -0
  24. data/lib/cocoapods-mtxx-bin/config/config_hot_key.rb +103 -0
  25. data/lib/cocoapods-mtxx-bin/config/config_hot_key_asker.rb +57 -0
  26. data/lib/cocoapods-mtxx-bin/gem_version.rb +9 -0
  27. data/lib/cocoapods-mtxx-bin/helpers/Info.plist +0 -0
  28. data/lib/cocoapods-mtxx-bin/helpers/build_helper.rb +167 -0
  29. data/lib/cocoapods-mtxx-bin/helpers/build_utils.rb +64 -0
  30. data/lib/cocoapods-mtxx-bin/helpers/framework.rb +86 -0
  31. data/lib/cocoapods-mtxx-bin/helpers/framework_builder.rb +551 -0
  32. data/lib/cocoapods-mtxx-bin/helpers/library.rb +54 -0
  33. data/lib/cocoapods-mtxx-bin/helpers/library_builder.rb +90 -0
  34. data/lib/cocoapods-mtxx-bin/helpers/sources_helper.rb +35 -0
  35. data/lib/cocoapods-mtxx-bin/helpers/spec_creator.rb +170 -0
  36. data/lib/cocoapods-mtxx-bin/helpers/spec_files_helper.rb +80 -0
  37. data/lib/cocoapods-mtxx-bin/helpers/spec_source_creator.rb +304 -0
  38. data/lib/cocoapods-mtxx-bin/helpers/upload_helper.rb +104 -0
  39. data/lib/cocoapods-mtxx-bin/helpers.rb +5 -0
  40. data/lib/cocoapods-mtxx-bin/native/acknowledgements.rb +27 -0
  41. data/lib/cocoapods-mtxx-bin/native/analyzer.rb +85 -0
  42. data/lib/cocoapods-mtxx-bin/native/file_accessor.rb +28 -0
  43. data/lib/cocoapods-mtxx-bin/native/gen.rb +79 -0
  44. data/lib/cocoapods-mtxx-bin/native/installation_options.rb +25 -0
  45. data/lib/cocoapods-mtxx-bin/native/installer.rb +135 -0
  46. data/lib/cocoapods-mtxx-bin/native/linter.rb +26 -0
  47. data/lib/cocoapods-mtxx-bin/native/path_source.rb +33 -0
  48. data/lib/cocoapods-mtxx-bin/native/pod_source_installer.rb +19 -0
  49. data/lib/cocoapods-mtxx-bin/native/pod_target_installer.rb +94 -0
  50. data/lib/cocoapods-mtxx-bin/native/podfile.rb +91 -0
  51. data/lib/cocoapods-mtxx-bin/native/podfile_env.rb +37 -0
  52. data/lib/cocoapods-mtxx-bin/native/podfile_generator.rb +201 -0
  53. data/lib/cocoapods-mtxx-bin/native/podspec_finder.rb +25 -0
  54. data/lib/cocoapods-mtxx-bin/native/resolver.rb +238 -0
  55. data/lib/cocoapods-mtxx-bin/native/sandbox_analyzer.rb +34 -0
  56. data/lib/cocoapods-mtxx-bin/native/source.rb +35 -0
  57. data/lib/cocoapods-mtxx-bin/native/sources_manager.rb +19 -0
  58. data/lib/cocoapods-mtxx-bin/native/specification.rb +31 -0
  59. data/lib/cocoapods-mtxx-bin/native/target_validator.rb +41 -0
  60. data/lib/cocoapods-mtxx-bin/native/validator.rb +40 -0
  61. data/lib/cocoapods-mtxx-bin/native.rb +25 -0
  62. data/lib/cocoapods-mtxx-bin/source_provider_hook.rb +53 -0
  63. data/lib/cocoapods-mtxx-bin.rb +2 -0
  64. data/lib/cocoapods_plugin.rb +2 -0
  65. data/spec/command/bin_spec.rb +12 -0
  66. data/spec/spec_helper.rb +50 -0
  67. metadata +182 -0
@@ -0,0 +1,154 @@
1
+
2
+ require 'cocoapods'
3
+ require 'cocoapods-mtxx-bin/native/podfile_env'
4
+ require 'cocoapods-mtxx-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 拦截器'
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-mtxx-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
@@ -0,0 +1,65 @@
1
+ # require 'cocoapods-mtxx-bin/command/bin/initHotKey'
2
+ require 'cocoapods-mtxx-bin/command/bin/init'
3
+ require 'cocoapods-mtxx-bin/command/bin/archive'
4
+ require 'cocoapods-mtxx-bin/command/bin/auto'
5
+ require 'cocoapods-mtxx-bin/command/bin/code'
6
+ require 'cocoapods-mtxx-bin/command/bin/update'
7
+ require 'cocoapods-mtxx-bin/command/bin/install'
8
+ # require 'cocoapods-mtxx-bin/command/bin/imy'
9
+ require 'cocoapods-mtxx-bin/command/bin/repo'
10
+ require 'cocoapods-mtxx-bin/command/bin/spec'
11
+ require 'cocoapods-mtxx-bin/helpers'
12
+ # require 'cocoapods-mtxx-bin/native'
13
+
14
+ module Pod
15
+ class Command
16
+ # This is an example of a cocoapods plugin adding a top-level subcommand
17
+ # to the 'pod' command.
18
+ #
19
+ # You can also create subcommands of existing or new commands. Say you
20
+ # wanted to add a subcommand to `list` to show newly deprecated pods,
21
+ # (e.g. `pod list deprecated`), there are a few things that would need
22
+ # to change.
23
+ #
24
+ # - move this file to `lib/pod/command/list/deprecated.rb` and update
25
+ # the class to exist in the the Pod::Command::List namespace
26
+ # - change this class to extend from `List` instead of `Command`. This
27
+ # tells the plugin system that it is a subcommand of `list`.
28
+ # - edit `lib/cocoapods_plugins.rb` to require this file
29
+ #
30
+ # @todo Create a PR to add your plugin to CocoaPods/cocoapods.org
31
+ # in the `plugins.json` file, once your plugin is released.
32
+ #
33
+ class Bin < Command
34
+ include CBin::SourcesHelper
35
+ include CBin::SpecFilesHelper
36
+
37
+ self.abstract_command = true
38
+
39
+ # self.default_subcommand = 'open'
40
+ self.summary = '组件二进制化插件'
41
+ self.description = <<-DESC.strip_heredoc
42
+ 组件二进制化插件
43
+
44
+ 利用源码私有源与二进制私有源实现对组件依赖类型的切换
45
+ DESC
46
+
47
+ def initialize(argv)
48
+ # !!! 下面这个require必须放在这里,不能放到文件顶部,切记 !!!
49
+ require 'cocoapods-mtxx-bin/native'
50
+
51
+ # @help = argv.flag?('help')
52
+ super
53
+ # @env = argv.option('env') || 'dev'
54
+ # CBin.config.set_configuration_env(@env)
55
+ # msg = "cocoapods-mtxx-bin #{CBin::VERSION} 版本 #{@env} 环境"
56
+ # UI.info "\033[44;30m#{msg}\033[0m\n"
57
+ end
58
+
59
+ # def validate!
60
+ # super
61
+ # banner! if @help
62
+ # end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1 @@
1
+ require 'cocoapods-mtxx-bin/command/bin'
@@ -0,0 +1,166 @@
1
+ require 'yaml'
2
+ require 'cocoapods-mtxx-bin/native/podfile'
3
+ require 'cocoapods-mtxx-bin/native/podfile_env'
4
+ require 'cocoapods/generate'
5
+
6
+
7
+ module CBin
8
+ class Config
9
+ def config_file
10
+ config_file_with_configuration_env(configuration_env)
11
+ end
12
+
13
+ def template_hash
14
+ {
15
+ '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' },
21
+ 'download_file_type' => { description: '下载二进制文件类型', default: 'zip', selection: %w[zip tgz tar tbz txz dmg] }
22
+ }
23
+ end
24
+
25
+ def config_file_with_configuration_env(configuration_env)
26
+ file = config_dev_file
27
+ if configuration_env == "release_iphoneos"
28
+ file = config_release_iphoneos_file
29
+ # puts "====== #{configuration_env} 环境 ========"
30
+ elsif configuration_env == "debug_iphoneos"
31
+ file = config_debug_iphoneos_file
32
+ # puts "====== #{configuration_env} 环境 ========"
33
+ elsif configuration_env == "dev"
34
+ # puts "====== #{configuration_env} 环境 ========"
35
+ else
36
+ raise "===== #{configuration_env} %w[dev debug_iphoneos release_iphoneos]===="
37
+ end
38
+
39
+ File.expand_path("#{Pod::Config.instance.home_dir}/#{file}")
40
+ end
41
+
42
+ def config_file_with_configuration_env_list(configuration_env)
43
+ file = config_dev_file
44
+ File.expand_path("#{Pod::Config.instance.home_dir}/#{file}")
45
+ end
46
+
47
+ def configuration_env
48
+ #如果是dev 再去 podfile的配置文件中获取,确保是正确的, pod update时会用到
49
+ if @configuration_env == "dev" || @configuration_env == nil
50
+ if Pod::Config.instance.podfile
51
+ configuration_env ||= Pod::Config.instance.podfile.configuration_env
52
+ end
53
+ configuration_env ||= "dev"
54
+ @configuration_env = configuration_env
55
+ end
56
+ @configuration_env
57
+ end
58
+
59
+ #上传的url
60
+ def binary_upload_url_str
61
+ CBin.config.binary_upload_url
62
+ end
63
+
64
+ def binary_download_url_str
65
+ binary_download_url
66
+ end
67
+
68
+ def set_configuration_env(env)
69
+ @configuration_env = env
70
+ end
71
+
72
+ #包含arm64 armv7架构,xcodebuild 是Debug模式
73
+ def config_debug_iphoneos_file
74
+ "bin_debug_iphoneos.yml"
75
+ end
76
+ #包含arm64 armv7架构,xcodebuild 是Release模式
77
+ def config_release_iphoneos_file
78
+ "bin_release_iphoneos.yml"
79
+ end
80
+ #包含x86 arm64 armv7架构,xcodebuild 是Release模式
81
+ def config_dev_file
82
+ "bin_dev.yml"
83
+ end
84
+
85
+ def sync_config(config)
86
+ File.open(config_file_with_configuration_env(config['configuration_env']), 'w+') do |f|
87
+ f.write(config.to_yaml)
88
+ end
89
+ end
90
+
91
+ def config_old
92
+ configTo = {}
93
+ text_list = IO.readlines(config_file_with_configuration_env_list("dev"))
94
+ text_list.delete("---\n")
95
+ text_list.each { |text|
96
+ textTo = text.strip
97
+ list = textTo.split(": ")
98
+ configTo[list.first] = list.last
99
+ }
100
+ configTo
101
+ end
102
+
103
+ def sync_config_code_repo_url_list(config)
104
+ File.open(config_file_with_configuration_env_list(config['code_repo_url_list']), 'w+') do |f|
105
+ f.write(config.to_yaml)
106
+ end
107
+ end
108
+
109
+ def default_config
110
+ @default_config ||= Hash[template_hash.map { |k, v| [k, v[:default]] }]
111
+ end
112
+
113
+ private
114
+
115
+ def load_config
116
+ if File.exist?(config_file)
117
+ YAML.load_file(config_file)
118
+ else
119
+ default_config
120
+ end
121
+ end
122
+
123
+ def config
124
+ @config ||= begin
125
+ msg = "cocoapods-mtxx-bin #{CBin::VERSION} 版本"
126
+ puts "\033[44m#{msg}\033[0m\n"
127
+ @config = OpenStruct.new load_config
128
+ validate!
129
+ @config
130
+ end
131
+ end
132
+
133
+ def validate!
134
+ template_hash.each do |k, v|
135
+ selection = v[:selection]
136
+ next if !selection || selection.empty?
137
+
138
+ config_value = @config.send(k)
139
+ next unless config_value
140
+ unless selection.include?(config_value)
141
+ raise Pod::Informative, "#{k} 字段的值必须限定在可选值 [ #{selection.join(' / ')} ] 内".red
142
+ end
143
+ end
144
+ end
145
+
146
+ def respond_to_missing?(method, include_private = false)
147
+ config.respond_to?(method) || super
148
+ end
149
+
150
+ def method_missing(method, *args, &block)
151
+ if config.respond_to?(method)
152
+ config.send(method, *args)
153
+ elsif template_hash.keys.include?(method.to_s)
154
+ raise Pod::Informative, "#{method} 字段必须在配置文件 #{config_file} 中设置, 请执行 init 命令配置或手动修改配置文件".red
155
+ else
156
+ super
157
+ end
158
+ end
159
+ end
160
+
161
+ def self.config
162
+ @config ||= Config.new
163
+ end
164
+
165
+
166
+ end
@@ -0,0 +1,60 @@
1
+ require 'yaml'
2
+ require 'cocoapods-mtxx-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
+ %w[bin_dev.yml bin_debug_iphoneos.yml bin_release_iphoneos.yml]
46
+ 你可以在对应目录下手动添加编辑该文件. 文件包含的配置信息样式如下:
47
+
48
+ #{CBin.config.default_config.to_yaml}
49
+ EOF
50
+ end
51
+
52
+ def done_message
53
+ print "\n设置完成.\n".green
54
+ end
55
+ def done_message_update
56
+ print "\n更新完成.\n".green
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,216 @@
1
+ require 'yaml'
2
+
3
+ module CBin
4
+ class Config
5
+ class Builder
6
+
7
+ include Pod
8
+
9
+ def self.instance
10
+ @instance ||= new
11
+ end
12
+
13
+ def initialize
14
+ load_build_config
15
+ # clean
16
+ end
17
+
18
+ # 加载配置项
19
+ def load_build_config
20
+ @white_pod_list = []
21
+ @ignore_git_list = []
22
+ project_root = Pod::Config.instance.project_root
23
+ path = File.join(project_root.to_s, 'BinArchive.json')
24
+
25
+ if File.exist?(path)
26
+ config = JSON.parse(File.read(path))
27
+ @white_pod_list = config['archive-white-pod-list']
28
+ UI.warn "====== archive-white-pod-list = #{@white_pod_list}" if @white_pod_list
29
+ @ignore_git_list = config['ignore-git-list']
30
+ UI.warn "====== ignore_git_list = #{@ignore_git_list}" if @ignore_git_list
31
+ @ignore_http_list = config['ignore-http-list']
32
+
33
+ @xcode_build_name = config['xcode_build_path']
34
+ @root_dir = config['root_dir'] unless config['root_dir'].nil?
35
+ end
36
+
37
+ end
38
+
39
+ def clean
40
+ #清除之前的缓存
41
+ FileUtils.rm_rf(Dir.glob("#{zip_dir}/*")) if File.exist?(zip_dir)
42
+ FileUtils.rm_rf(Dir.glob("#{binary_json_dir}/*")) if File.exist?(binary_json_dir)
43
+ FileUtils.rm_rf(Dir.glob("#{local_psec_dir}/*")) if File.exist?(local_psec_dir)
44
+ end
45
+
46
+ # 制作二进制打包 工程目录
47
+ def gen_name
48
+ 'bin-archive'
49
+ end
50
+
51
+ # 制作二进制打包 工程目录
52
+ def gen_dir
53
+ @gen_dir ||= begin
54
+ dir = File.join(root_dir,gen_name)
55
+ Dir.mkdir(dir) unless File.exist?dir
56
+ Pathname.new(dir)
57
+ end
58
+ end
59
+
60
+
61
+ def framework_name(spec)
62
+ "#{spec.module_name}.framework"
63
+ end
64
+
65
+ def framework_name_version(spec)
66
+ "#{spec.module_name}.framework_#{spec.version}"
67
+ end
68
+
69
+ def framework_zip_file(spec)
70
+ File.join(zip_dir_name, framework_name_version(spec))
71
+ end
72
+
73
+ def framework_file(spec)
74
+ File.join(zip_dir_name, framework_name(spec))
75
+ end
76
+
77
+ def library_name(spec)
78
+ library_name_version(spec.name, spec.version)
79
+ end
80
+
81
+ def library_name_version(name,version)
82
+ "bin_#{name}_#{version}"
83
+ end
84
+ def library_file(spec)
85
+ File.join(zip_dir_name, library_name(spec))
86
+ end
87
+
88
+ def zip_dir_name
89
+ "bin-zip"
90
+ end
91
+
92
+ def zip_dir
93
+ @zip_dir ||= begin
94
+ dir = File.join(root_dir,zip_dir_name)
95
+ Dir.mkdir(dir) unless File.exist?dir
96
+ Pathname.new(dir)
97
+ end
98
+ end
99
+
100
+ #本地
101
+ def local_spec_dir_name
102
+ "bin-spec"
103
+ end
104
+
105
+ def local_psec_dir
106
+ @local_psec_dir ||= begin
107
+ dir = File.join(root_dir,local_spec_dir_name)
108
+ Dir.mkdir(dir) unless File.exist?dir
109
+ Pathname.new(dir)
110
+ end
111
+ end
112
+
113
+ def binary_json_dir_name
114
+ "bin-json"
115
+ end
116
+
117
+ def binary_json_dir
118
+ @binary_json_dir ||= begin
119
+ dir = File.join(root_dir,binary_json_dir_name)
120
+ Dir.mkdir(dir) unless File.exist?dir
121
+ Pathname.new(dir)
122
+ end
123
+ end
124
+
125
+
126
+
127
+ #编译target名,如 seeyou
128
+ def target_name
129
+ @target_name ||= begin
130
+ target_name_str = Pod::Config.instance.podfile.root_target_definitions.first.children.first.to_s
131
+ target_name_str[5,target_name_str.length]
132
+ end
133
+ end
134
+
135
+ #编译缓存文件目录,如Xcodebuild的编译缓存目录
136
+ # 如果有配置, 配置完整路径,会使用
137
+ def xcode_build_name
138
+ @xcode_build_name ||= begin
139
+ project_root = Pod::Config.instance.project_root
140
+ path = File.join(project_root.to_s, 'BinArchive.json')
141
+
142
+ if File.exist?(path)
143
+ config = JSON.parse(File.read(path))
144
+ @xcode_build_name = config['xcode_build_path']
145
+ end
146
+ #默认值,在美柚上使用默认
147
+ if @xcode_build_name.nil? || Dir.exist?(@xcode_build_name)
148
+ @xcode_build_name = "xcode-build/Build/Intermediates.noindex/ArchiveIntermediates/#{target_name}/IntermediateBuildFilesPath/UninstalledProducts/iphoneos/"
149
+ end
150
+ puts @xcode_build_name
151
+ @xcode_build_name
152
+ end
153
+ end
154
+
155
+
156
+ #完整的xcodebuild 输出路径
157
+ def xcode_build_dir
158
+ @xcode_build_dir ||= begin
159
+ temp_xcode_build_name = xcode_build_name
160
+ if File.exist?(temp_xcode_build_name)
161
+ Pathname.new(temp_xcode_build_name)
162
+ else
163
+ dir = File.join(root_dir,xcode_build_name)
164
+ Pathname.new(dir)
165
+ end
166
+ end
167
+ end
168
+ #完整的xcodebuild BuildProductsPath输出路径,
169
+ def xcode_BuildProductsPath_dir
170
+ @xcode_BuildProductsPath_dir ||= begin
171
+ temp_xcode_BuildProductsPath_dir = "xcode-build/Build/Intermediates.noindex/ArchiveIntermediates/#{target_name}/BuildProductsPath/"
172
+ full_path = File.join(root_dir, temp_xcode_BuildProductsPath_dir)
173
+
174
+ if (File.exist?(full_path))
175
+ Dir.chdir(full_path) do
176
+ iphoneos = Dir.glob('*-iphoneos')
177
+ if iphoneos.length > 0
178
+ full_path = File.join(full_path,iphoneos.first)
179
+ else
180
+ UI.warn "====== 找不到 *-iphoneos @xcode_BuildProductsPath_dir = #{@xcode_BuildProductsPath_dir}"
181
+ end
182
+ end
183
+ end
184
+ Pathname.new(full_path)
185
+ end
186
+ end
187
+
188
+
189
+ #处理编译产物后存储根目录,会存放spec、 json、zip的父目录,默认是工程的同级目录下,"#{basename}-build-temp"
190
+ def root_dir
191
+ @root_dir ||= begin
192
+ basename = File.basename(Pod::Config.instance.installation_root)
193
+ parent_dir = File.dirname(Pod::Config.instance.installation_root)
194
+ root_name = File.join(parent_dir,"#{basename}-build-temp")
195
+ Dir.mkdir(root_name) unless File.exist?root_name
196
+ Pathname.new(root_name)
197
+ end
198
+
199
+ end
200
+
201
+ #制作二进制 白名单
202
+ def white_pod_list
203
+ @white_pod_list
204
+ end
205
+ #忽略制作二进制组件的 git
206
+ def ignore_git_list
207
+ @ignore_git_list
208
+ end
209
+
210
+ def ignore_http_list
211
+ @ignore_http_list
212
+ end
213
+
214
+ end
215
+ end
216
+ end