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
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2ab57722083f35a7c6fb6b12987b7d84088d4c65cb431d8604f3d16a0126759a
4
+ data.tar.gz: 027cb025549caa0d801abf6f6f2215834e5ca300869315ce3b2c288582a7863a
5
+ SHA512:
6
+ metadata.gz: 833e4b77cbf4b231d3a08f69d46abb2f9119d06f7d7d39b5e4c0bce3a19290da7091307b177adb611844134551cb4544c79017432b7db7270d90bec3907cc950
7
+ data.tar.gz: a5e0253ed36d971578c898210404c6f8ac929dbe2ba7cf4037f4341928ab2bc3a3f17d8408da0b8b4755b27e4597661006f1e0503bdcd6e62450461e9bd329f1
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+
2
+ MIT License
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1 @@
1
+
@@ -0,0 +1,203 @@
1
+ require 'cocoapods-tj/native/podfile'
2
+ require 'cocoapods/command/gen'
3
+ require 'cocoapods/generate'
4
+ require 'cocoapods-tj/helpers/framework_builder'
5
+ require 'cocoapods-tj/helpers/library_builder'
6
+ require 'cocoapods-tj/helpers/build_helper'
7
+ require 'cocoapods-tj/helpers/spec_source_creator'
8
+ require 'cocoapods-tj/config/config_builder'
9
+ require 'cocoapods-tj/command/bin/lib/lint'
10
+ require 'xcodeproj'
11
+
12
+ module Pod
13
+ class Command
14
+ class Bin < Command
15
+ class Archive < Bin
16
+
17
+ @@missing_binary_specs = []
18
+
19
+ self.summary = ''
20
+ self.description = <<-DESC
21
+
22
+ DESC
23
+
24
+ def self.options
25
+ [
26
+ ['--all-make', '对该组件的依赖库,全部制作为二进制组件'],
27
+ ['--code-dependencies', '使用源码依赖'],
28
+ ['--no-clean', '保留构建中间产物'],
29
+ ['--sources', '私有源地址,多个用分号区分'],
30
+ ['--framework-output', '输出framework文件'],
31
+ ['--no-zip', '不压缩静态库 为 zip'],
32
+ ['--configuration', 'Build the specified configuration (e.g. Debug). Defaults to Release'],
33
+ ['--env', "该组件上传的环境 %w[dev debug_iphoneos release_iphoneos]"]
34
+ ].concat(Pod::Command::Gen.options).concat(super).uniq
35
+ end
36
+
37
+ self.arguments = [
38
+ CLAide::Argument.new('NAME.podspec', false)
39
+ ]
40
+
41
+ def initialize(argv)
42
+ @env = argv.option('env') || 'dev'
43
+ CBin.config.set_configuration_env(@env)
44
+ @code_dependencies = argv.flag?('code-dependencies')
45
+ @framework_output = argv.flag?('framework-output', false )
46
+ @clean = argv.flag?('no-clean', false)
47
+ @zip = argv.flag?('zip', true)
48
+ @all_make = argv.flag?('all-make', false )
49
+ @sources = argv.option('sources') || []
50
+ @platform = Platform.new(:ios)
51
+
52
+ @config = argv.option('configuration', 'Release')
53
+
54
+ @framework_path
55
+ super
56
+
57
+ @additional_args = argv.remainder!
58
+ @build_finshed = false
59
+ end
60
+
61
+ def run
62
+ CBin::Config::Builder.instance.clean
63
+
64
+ @spec = Specification.from_file(spec_file)
65
+ generate_project
66
+
67
+ swift_pods_buildsetting
68
+
69
+ build_root_spec
70
+
71
+ sources_sepc = Array.new
72
+ sources_sepc << @spec
73
+ sources_sepc.concat(build_dependencies) if @all_make
74
+
75
+ sources_sepc
76
+ end
77
+
78
+ def build_root_spec
79
+ builder = CBin::Build::Helper.new(@spec,
80
+ @platform,
81
+ @framework_output,
82
+ @zip,
83
+ @spec,
84
+ CBin::Config::Builder.instance.white_pod_list.include?(@spec.name),
85
+ @config)
86
+ builder.build
87
+ builder.clean_workspace if @clean && !@all_make
88
+ end
89
+
90
+ def build_dependencies
91
+ @build_finshed = true
92
+ sources_sepc = []
93
+ @@missing_binary_specs.uniq.each do |spec|
94
+ next if spec.name.include?('/')
95
+ next if spec.name == @spec.name
96
+ next if CBin::Config::Builder.instance.white_pod_list.include?(spec.name)
97
+ if spec.source[:git] && spec.source[:git]
98
+ spec_git = spec.source[:git]
99
+ spec_git_res = false
100
+ CBin::Config::Builder.instance.ignore_git_list.each do |ignore_git|
101
+ spec_git_res = spec_git.include?(ignore_git)
102
+ break if spec_git_res
103
+ end
104
+ next if spec_git_res
105
+ end
106
+ next if spec.attributes_hash['vendored_frameworks'] && @spec.name != spec.name #过滤带有vendored_frameworks的
107
+ next if spec.attributes_hash['ios.vendored_frameworks'] && @spec.name != spec.name #过滤带有vendored_frameworks的
108
+ sources_sepc << spec
109
+ end
110
+
111
+ fail_build_specs = []
112
+ sources_sepc.uniq.each do |spec|
113
+ begin
114
+ builder = CBin::Build::Helper.new(spec,
115
+ @platform,
116
+ @framework_output,
117
+ @zip,
118
+ @spec,
119
+ false ,
120
+ @config)
121
+ builder.build
122
+ rescue Object => exception
123
+ UI.puts exception
124
+ fail_build_specs << spec
125
+ end
126
+ end
127
+
128
+ if fail_build_specs.any?
129
+ fail_build_specs.uniq.each do |spec|
130
+ UI.warn "【#{spec.name} | #{spec.version}】组件二进制版本编译失败 ."
131
+ end
132
+ end
133
+ sources_sepc - fail_build_specs
134
+ end
135
+
136
+ def Archive.missing_binary_specs(missing_binary_specs)
137
+ @@missing_binary_specs = missing_binary_specs unless @build_finshed
138
+ end
139
+
140
+ private
141
+
142
+ def generate_project
143
+ Podfile.execute_with_bin_plugin do
144
+ Podfile.execute_with_use_binaries(!@code_dependencies) do
145
+ argvs = [
146
+ "--sources=#{sources_option(@code_dependencies, @sources)}",
147
+ "--gen-directory=#{CBin::Config::Builder.instance.gen_dir}",
148
+ '--clean',
149
+ "--verbose",
150
+ *@additional_args
151
+ ]
152
+
153
+ if File.exist?(Pod::Config.instance.podfile_path)
154
+ argvs += ['--use-podfile']
155
+ end
156
+
157
+ unless CBin::Build::Utils.uses_frameworks?
158
+ argvs += ['--use-libraries']
159
+ end
160
+
161
+ argvs << spec_file if spec_file
162
+
163
+ gen = Pod::Command::Gen.new(CLAide::ARGV.new(argvs))
164
+ gen.validate!
165
+ gen.run
166
+ end
167
+ end
168
+ end
169
+
170
+ def swift_pods_buildsetting
171
+ worksppace_path = File.expand_path("#{CBin::Config::Builder.instance.gen_dir}/#{@spec.name}")
172
+ path = File.join(worksppace_path, "Pods.xcodeproj")
173
+ path = File.join(worksppace_path, "Pods/Pods.xcodeproj") unless File.exist?(path)
174
+ raise Informative, "#{path} File no exist, please check" unless File.exist?(path)
175
+ project = Xcodeproj::Project.open(path)
176
+ project.build_configurations.each do |x|
177
+ x.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = true #设置生成swift inter
178
+ end
179
+ project.save
180
+ end
181
+
182
+
183
+ def spec_file
184
+ @spec_file ||= begin
185
+ if @podspec
186
+ find_spec_file(@podspec)
187
+ else
188
+ if code_spec_files.empty?
189
+ raise Informative, '当前目录下没有找到可用源码 podspec.'
190
+ end
191
+
192
+ spec_file = code_spec_files.first
193
+ spec_file
194
+ end
195
+ end
196
+ end
197
+
198
+
199
+
200
+ end
201
+ end
202
+ end
203
+ end
@@ -0,0 +1,189 @@
1
+
2
+ require 'cocoapods-tj/command/bin/auto'
3
+ require 'cocoapods-tj/helpers/upload_helper'
4
+
5
+ module Pod
6
+ class Command
7
+ class Bin < Command
8
+ class Auto < Bin
9
+ self.summary = '打开 workspace 工程.'
10
+
11
+ self.arguments = [
12
+ CLAide::Argument.new('NAME.podspec', false)
13
+ ]
14
+ def self.options
15
+ [
16
+ ['--code-dependencies', '使用源码依赖'],
17
+ ['--allow-prerelease', '允许使用 prerelease 的版本'],
18
+ ['--no-clean', '保留构建中间产物'],
19
+ ['--framework-output', '输出framework文件'],
20
+ ['--no-zip', '不压缩静态 framework 为 zip'],
21
+ ['--all-make', '对该组件的依赖库,全部制作为二进制组件'],
22
+ ['--configuration', 'Build the specified configuration (e.g. Release ). Defaults to Debug'],
23
+ ['--env', "该组件上传的环境 %w[dev debug_iphoneos release_iphoneos]"]
24
+ ].concat(Pod::Command::Gen.options).concat(super).uniq
25
+ end
26
+
27
+ def initialize(argv)
28
+
29
+ @env = argv.option('env') || 'dev'
30
+ CBin.config.set_configuration_env(@env)
31
+
32
+ @podspec = argv.shift_argument || find_podspec
33
+ @specification = Specification.from_file(@podspec)
34
+
35
+ @code_dependencies = argv.flag?('code-dependencies')
36
+ @allow_prerelease = argv.flag?('allow-prerelease')
37
+ @framework_output = argv.flag?('framework-output', false )
38
+ @clean = argv.flag?('clean', true)
39
+ @zip = argv.flag?('zip', true)
40
+ @all_make = argv.flag?('all-make', false )
41
+ @verbose = argv.flag?('verbose',true)
42
+
43
+ @config = argv.option('configuration', 'Debug')
44
+ @additional_args = argv.remainder!
45
+
46
+ super
47
+ end
48
+
49
+ def run
50
+
51
+ unless @podspec
52
+ raise Informative, "未找到 podspec文件"
53
+ end
54
+ sources_sepc = run_archive
55
+
56
+ fail_push_specs = []
57
+ sources_sepc.uniq.each do |spec|
58
+ begin
59
+ fail_push_specs << spec unless CBin::Upload::Helper.new(spec,@code_dependencies,@sources).upload
60
+ rescue Object => exception
61
+ UI.puts exception
62
+ fail_push_specs << spec
63
+ end
64
+ end
65
+
66
+ if fail_push_specs.any?
67
+ fail_push_specs.uniq.each do |spec|
68
+ UI.warn "【#{spec.name} | #{spec.version}】组件spec push失败 ."
69
+ end
70
+ end
71
+
72
+ success_specs = sources_sepc - fail_push_specs
73
+ if success_specs.any?
74
+ auto_success = ""
75
+ success_specs.uniq.each do |spec|
76
+ auto_success += "#{spec.name} | #{spec.version}\n"
77
+ end
78
+ puts auto_success
79
+ ENV['auto_success'] = auto_success
80
+ end
81
+ UI.section("\nUpdating Spec Repositories\n".yellow) do
82
+ Pod::Command::Bin::Repo::Update.new(CLAide::ARGV.new([])).run
83
+ end
84
+
85
+ end
86
+
87
+
88
+ def run_archive
89
+ argvs = [
90
+ "--sources=#{sources_option(@code_dependencies, @sources)},https:\/\/cdn.cocoapods.org",
91
+ @additional_args
92
+ ]
93
+
94
+ argvs << spec_file if spec_file
95
+ argvs.delete(Array.new)
96
+
97
+ unless @clean
98
+ argvs += ['--no-clean']
99
+ end
100
+ if @code_dependencies
101
+ argvs += ['--code-dependencies']
102
+ end
103
+ if @verbose
104
+ argvs += ['--verbose']
105
+ end
106
+ if @allow_prerelease
107
+ argvs += ['--allow-prerelease']
108
+ end
109
+ if @framework_output
110
+ argvs += ['--framework-output']
111
+ end
112
+ if @all_make
113
+ argvs += ['--all-make']
114
+ end
115
+ if @env
116
+ argvs += ["--env=#{@env}"]
117
+ end
118
+ argvs += ["--configuration=#{@config}"]
119
+
120
+ archive = Pod::Command::Bin::Archive.new(CLAide::ARGV.new(argvs))
121
+ archive.validate!
122
+ sources_sepc = archive.run
123
+ sources_sepc
124
+ end
125
+
126
+
127
+ def code_podsepc_extname
128
+ '.podsepc'
129
+ end
130
+
131
+ def binary_podsepc_json
132
+ "#{@specification.name}.binary.podspec.json"
133
+ end
134
+
135
+ def binary_template_podsepc
136
+ "#{@specification.name}.binary-template.podspec"
137
+ end
138
+
139
+ def template_spec_file
140
+ @template_spec_file ||= begin
141
+ if @template_podspec
142
+ find_spec_file(@template_podspec)
143
+ else
144
+ binary_template_spec_file
145
+ end
146
+ end
147
+ end
148
+
149
+ def spec_file
150
+ @spec_file ||= begin
151
+ if @podspec
152
+ find_spec_file(@podspec) || @podspec
153
+ else
154
+ if code_spec_files.empty?
155
+ raise Informative, '当前目录下没有找到可用源码 podspec.'
156
+ end
157
+
158
+ spec_file = if @binary
159
+ code_spec = Pod::Specification.from_file(code_spec_files.first)
160
+ if template_spec_file
161
+ template_spec = Pod::Specification.from_file(template_spec_file)
162
+ end
163
+ create_binary_spec_file(code_spec, template_spec)
164
+ else
165
+ code_spec_files.first
166
+ end
167
+ spec_file
168
+ end
169
+ end
170
+ end
171
+
172
+ def find_podspec
173
+ Pathname.pwd.children.each do |child|
174
+ puts child
175
+ if File.file?(child)
176
+ if child.extname == '.podspec'
177
+ name = File.basename(child)
178
+ unless name.include?("binary-template")
179
+ return name
180
+ end
181
+ end
182
+ end
183
+ end
184
+ end
185
+
186
+ end
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,198 @@
1
+
2
+ module Pod
3
+ class Command
4
+ class Bin < Command
5
+ class Code < Bin
6
+ self.summary = ''
7
+
8
+ self.description = <<-DESC
9
+
10
+ DESC
11
+
12
+ self.arguments = [
13
+ CLAide::Argument.new('NAME', false)
14
+ ]
15
+ def self.options
16
+ [
17
+ ['--all-clean', '删除所有已经下载的源码'],
18
+ ['--clean', '删除所有指定下载的源码'],
19
+ ['--list', '展示所有一级下载的源码以及其大小'],
20
+ ['--source', '源码路径,本地路径,会去自动链接本地源码']
21
+ ]
22
+ end
23
+
24
+ def initialize(argv)
25
+ @codeSource = argv.option('source') || nil
26
+ @names = argv.arguments! unless argv.arguments.empty?
27
+ @list = argv.flag?('list', false )
28
+ @all_clean = argv.flag?('all-clean', false )
29
+ @clean = argv.flag?('clean', false )
30
+
31
+ @config = Pod::Config.instance
32
+
33
+ super
34
+ end
35
+
36
+
37
+ def run
38
+
39
+ podfile_lock = File.join(Pathname.pwd,"Podfile.lock")
40
+ raise "podfile.lock,不存在,请先pod install/update" unless File.exist?(podfile_lock)
41
+ @lockfile ||= Lockfile.from_file(Pathname.new(podfile_lock) )
42
+
43
+ if @list
44
+ list
45
+ elsif @clean
46
+ clean
47
+ elsif @all_clean
48
+ all_clean
49
+ elsif @names
50
+ add
51
+ end
52
+
53
+ if @list && @clean && @names
54
+ raise "请选择您要执行的命令。"
55
+ end
56
+ end
57
+
58
+
59
+ def add
60
+ if @names == nil
61
+ raise "请输入要调试组件名,多个组件名称用空格分隔"
62
+ end
63
+
64
+ @names.each do |name|
65
+ lib_file = get_lib_path(name)
66
+ unless File.exist?(lib_file)
67
+ raise "找不到 #{lib_file}"
68
+ end
69
+ UI.puts "#{lib_file}"
70
+
71
+ target_path = @codeSource || download_source(name)
72
+
73
+ link(lib_file,target_path,name)
74
+ end
75
+ end
76
+
77
+ def download_source(name)
78
+ target_path = File.join(source_root, name)
79
+ UI.puts target_path
80
+ FileUtils.rm_rf(target_path)
81
+
82
+ find_dependency = find_dependency(name)
83
+
84
+ spec = fetch_external_source(find_dependency, @config.podfile,@config.lockfile, @config.sandbox,true )
85
+
86
+ download_request = Pod::Downloader::Request.new(:name => name, :spec => spec)
87
+ Downloader.download(download_request, Pathname.new(target_path), :can_cache => true)
88
+
89
+ target_path
90
+ end
91
+
92
+ def find_dependency (name)
93
+ find_dependency = nil
94
+ @config.podfile.dependencies.each do |dependency|
95
+ if dependency.root_name.downcase == name.downcase
96
+ find_dependency = dependency
97
+ break
98
+ end
99
+ end
100
+ find_dependency
101
+ end
102
+
103
+
104
+ def fetch_external_source(dependency ,podfile , lockfile, sandbox,use_lockfile_options)
105
+ source = ExternalSources.from_dependency(dependency, podfile.defined_in_file, true)
106
+ source.fetch(sandbox)
107
+ end
108
+
109
+
110
+
111
+ def link(lib_file,target_path,basename)
112
+ dir = (`dwarfdump "#{lib_file}" | grep "AT_comp_dir" | head -1 | cut -d \\" -f2 `)
113
+ sub_path = "#{basename}/bin-archive/#{basename}"
114
+ dir = dir.gsub(sub_path, "").chomp
115
+
116
+ unless File.exist?(dir)
117
+ begin
118
+ FileUtils.mkdir_p(dir)
119
+ rescue SystemCallError
120
+ array = dir.split('/')
121
+ if array.length > 3
122
+ root_path = '/' + array[1] + '/' + array[2]
123
+ unless File.exist?(root_path)
124
+ raise "由于权限不足,请手动创建#{root_path} 后重试"
125
+ end
126
+ end
127
+ end
128
+ end
129
+
130
+ if Pathname.new(lib_file).extname == ".a"
131
+ FileUtils.rm_rf(File.join(dir,basename))
132
+ `ln -s #{target_path} #{dir}`
133
+ else
134
+ FileUtils.rm_rf(File.join(dir,basename))
135
+ `ln -s #{target_path} #{dir}/#{basename}`
136
+ end
137
+
138
+ check(lib_file,dir,basename)
139
+ end
140
+
141
+ def check(lib_file,dir,basename)
142
+ file = `dwarfdump "#{lib_file}" | grep -E "DW_AT_decl_file.*#{basename}.*\\.m|\\.c" | head -1 | cut -d \\" -f2`
143
+ if File.exist?(file)
144
+ raise "#{file} 不存在 请检测代码源是否正确~"
145
+ end
146
+ UI.puts "link successfully!"
147
+ UI.puts "view linked source at path: #{dir}"
148
+ end
149
+
150
+ def get_lib_path(name)
151
+ dir = Pathname.new(File.join(Pathname.pwd,"Pods",name))
152
+ lib_name = "lib#{name}.a"
153
+ lib_path = File.join(dir,lib_name)
154
+
155
+ unless File.exist?(lib_path)
156
+ lib_path = File.join(dir.children.first,lib_name)
157
+ end
158
+
159
+ lib_path
160
+ end
161
+
162
+ def list
163
+ Dir.entries(source_root).each do |sub|
164
+ UI.puts "- #{sub}" unless sub.include?('.')
165
+ end
166
+ UI.puts "加载完成"
167
+ end
168
+
169
+ def all_clean
170
+ FileUtils.rm_rf(source_root) if File.directory?(source_root)
171
+ UI.puts "清理完成 #{source_root}"
172
+ end
173
+
174
+ def clean
175
+ raise "请输入要删除的组件库" if @names.nil?
176
+ @names.each do |name|
177
+ full_path = File.join(source_root,name)
178
+ if File.directory?(full_path)
179
+ FileUtils.rm_rf(full_path)
180
+ else
181
+ UI.puts "找不到 #{full_path}".yellow
182
+ end
183
+ end
184
+ UI.puts "清理完成 #{@names.to_s}"
185
+ end
186
+
187
+ private
188
+
189
+ def source_root
190
+ dir = File.join(@config.cache_root,"Source")
191
+ FileUtils.mkdir_p(dir) unless File.exist? dir
192
+ dir
193
+ end
194
+
195
+ end
196
+ end
197
+ end
198
+ end
@@ -0,0 +1,45 @@
1
+ require 'cocoapods-tj/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
+ DESC
11
+
12
+ self.arguments = [
13
+ CLAide::Argument.new('1', false)
14
+ ]
15
+
16
+ def self.options
17
+ [
18
+ ].concat(super)
19
+ end
20
+
21
+ def initialize(argv)
22
+ @hot_key = argv.shift_argument || '1'
23
+ super
24
+ end
25
+
26
+ def run
27
+ CBin.config_hot_key.set_hot_key_index(@hot_key)
28
+ UI.puts "cd #{CBin.config_hot_key.hot_key_dir}".yellow
29
+
30
+ if Dir.exist?(CBin.config_hot_key.hot_key_dir)
31
+ Dir.chdir(CBin.config_hot_key.hot_key_dir) do
32
+ UI.puts " #{CBin.config_hot_key.hot_key_cmd}".yellow
33
+ system CBin.config_hot_key.hot_key_cmd
34
+ end
35
+ else
36
+ raise "配置项中文件目录不存在 #{CBin.config_hot_key.hot_key_dir}"
37
+ end
38
+
39
+
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+ end