cocoapods-imy-bin 0.3.1.3 → 0.3.1.21

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -0
  3. data/lib/cocoapods-imy-bin/command/bin/archive.rb +18 -20
  4. data/lib/cocoapods-imy-bin/command/bin/auto.rb +12 -9
  5. data/lib/cocoapods-imy-bin/command/bin/clean.rb +126 -0
  6. data/lib/cocoapods-imy-bin/command/bin/local.rb +169 -0
  7. data/lib/cocoapods-imy-bin/command/bin/update.rb +14 -3
  8. data/lib/cocoapods-imy-bin/command/bin.rb +2 -0
  9. data/lib/cocoapods-imy-bin/config/config.rb +8 -0
  10. data/lib/cocoapods-imy-bin/gem_version.rb +1 -1
  11. data/lib/cocoapods-imy-bin/helpers/build_utils.rb +40 -9
  12. data/lib/cocoapods-imy-bin/helpers/framework_builder.rb +1 -1
  13. data/lib/cocoapods-imy-bin/helpers/local/loca_llibrary.rb +57 -0
  14. data/lib/cocoapods-imy-bin/helpers/local/local_build_helper.rb +183 -0
  15. data/lib/cocoapods-imy-bin/helpers/local/local_framework.rb +85 -0
  16. data/lib/cocoapods-imy-bin/helpers/local/local_framework_builder.rb +227 -0
  17. data/lib/cocoapods-imy-bin/helpers/local/local_library_builder.rb +96 -0
  18. data/lib/cocoapods-imy-bin/helpers/spec_source_creator.rb +10 -4
  19. data/lib/cocoapods-imy-bin/helpers/upload_helper.rb +5 -3
  20. data/lib/cocoapods-imy-bin/native/Downloader.rb +68 -0
  21. data/lib/cocoapods-imy-bin/native/Lockfile.rb +36 -0
  22. data/lib/cocoapods-imy-bin/native/installer.rb +6 -0
  23. data/lib/cocoapods-imy-bin/native/podfile.rb +7 -0
  24. data/lib/cocoapods-imy-bin/native/podfile_env.rb +5 -0
  25. data/lib/cocoapods-imy-bin/native/resolver.rb +10 -5
  26. data/lib/cocoapods-imy-bin/native.rb +3 -1
  27. data/lib/cocoapods-imy-bin/post_install_hook.rb +110 -0
  28. data/lib/cocoapods-imy-bin/source_provider_hook.rb +3 -0
  29. data/lib/cocoapods_plugin.rb +1 -0
  30. metadata +16 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81383fa8d08be932b1ed68004d45af11fd39a692379a8f4c56e8b4a3ff7f6c1c
4
- data.tar.gz: 0e05d990c1c50e6367045115daca97cbe8dc8e463fcdd51099d7944396a53610
3
+ metadata.gz: 8437b35eb1e2e055b25903d650608ff5efded69cdcb33f31d511ed8c5c5779c7
4
+ data.tar.gz: ab134be81f4b228d7d6456f8afb15171170c99797aabfc4fbdb90eb645bb3db3
5
5
  SHA512:
6
- metadata.gz: 8590a4e21b0a8423b48dae44334dea6862a78261e07e273bfc50d5334c0523ea73d538d317ed5bfd9b9e109b14d49e2b269db5d3da163e47bfe23336a0478216
7
- data.tar.gz: e0e0f49bc52ace2f2afa4a7608537747c9aeb9868fbb789607b63601d1dba0816893a0bc4493aea2262c4cfd960ddec8379042f117e264db0b12ea8409d75a34
6
+ metadata.gz: e4a3e25504e6d3c2083c0ff460e2d4ab05016124655df9ee293abd08ecd2097ec0b6704cb299d71138458521237b560795efb64a7beb75288b4812567115f7fa
7
+ data.tar.gz: 634b5f9bfa23d62d1d201429dc117c115edeaa3d9d80cb21f69c838d8078db41eed61382809e0ebd8a1464a935bf3a7dca8084d892a24d1b59b4836c23882c43
data/README.md CHANGED
@@ -1 +1,4 @@
1
1
 
2
+ 指定本地路径
3
+ specifications gem 仓库文件夹,类似podspec仓库
4
+ gem "cocoapods-imy-bin",'0.3.1.15',:path => '/Library/Ruby/Gems/2.6.0/specifications'
@@ -63,24 +63,23 @@ module Pod
63
63
  end
64
64
 
65
65
  def run
66
- # 清除之前的缓存
67
- CBin::Config::Builder.instance.clean
66
+ #清除之前的缓存
67
+ zip_dir = CBin::Config::Builder.instance.zip_dir
68
+ FileUtils.rm_rf(zip_dir) if File.exist?(zip_dir)
68
69
 
69
70
  @spec = Specification.from_file(spec_file)
70
71
  generate_project
71
72
 
72
73
  swift_pods_buildsetting
74
+ source_specs = Array.new
75
+ source_specs.concat(build_root_spec)
76
+ source_specs.concat(build_dependencies) if @all_make
73
77
 
74
- build_root_spec
75
-
76
- sources_sepc = Array.new
77
- sources_sepc << @spec
78
- sources_sepc.concat(build_dependencies) if @all_make
79
-
80
- sources_sepc
78
+ source_specs
81
79
  end
82
80
 
83
81
  def build_root_spec
82
+ source_specs = []
84
83
  builder = CBin::Build::Helper.new(@spec,
85
84
  @platform,
86
85
  @framework_output,
@@ -90,12 +89,15 @@ module Pod
90
89
  @config)
91
90
  builder.build
92
91
  builder.clean_workspace if @clean && !@all_make
92
+ source_specs << @spec unless CBin::Config::Builder.instance.white_pod_list.include?(@spec.name)
93
+
94
+ source_specs
93
95
  end
94
96
 
95
97
  def build_dependencies
96
98
  @build_finshed = true
97
99
  #如果没要求,就清空依赖库数据
98
- sources_sepc = []
100
+ source_specs = []
99
101
  @@missing_binary_specs.uniq.each do |spec|
100
102
  next if spec.name.include?('/')
101
103
  next if spec.name == @spec.name
@@ -115,11 +117,11 @@ module Pod
115
117
  next if spec.attributes_hash['vendored_frameworks'] && @spec.name != spec.name #过滤带有vendored_frameworks的
116
118
  next if spec.attributes_hash['ios.vendored_frameworks'] && @spec.name != spec.name #过滤带有vendored_frameworks的
117
119
  #获取没有制作二进制版本的spec集合
118
- sources_sepc << spec
120
+ source_specs << spec
119
121
  end
120
122
 
121
123
  fail_build_specs = []
122
- sources_sepc.uniq.each do |spec|
124
+ source_specs.uniq.each do |spec|
123
125
  begin
124
126
  builder = CBin::Build::Helper.new(spec,
125
127
  @platform,
@@ -140,7 +142,7 @@ module Pod
140
142
  UI.warn "【#{spec.name} | #{spec.version}】组件二进制版本编译失败 ."
141
143
  end
142
144
  end
143
- sources_sepc - fail_build_specs
145
+ source_specs - fail_build_specs
144
146
  end
145
147
 
146
148
  # 解析器传过来的
@@ -157,18 +159,14 @@ module Pod
157
159
  "--sources=#{sources_option(@code_dependencies, @sources)}",
158
160
  "--gen-directory=#{CBin::Config::Builder.instance.gen_dir}",
159
161
  '--clean',
160
- "--verbose",
161
162
  *@additional_args
162
163
  ]
163
164
 
164
- if File.exist?(Pod::Config.instance.podfile_path)
165
+ podfile= File.join(Pathname.pwd, "Podfile")
166
+ if File.exist?(podfile)
165
167
  argvs += ['--use-podfile']
166
168
  end
167
-
168
- unless CBin::Build::Utils.uses_frameworks?
169
- argvs += ['--use-libraries']
170
- end
171
-
169
+
172
170
  argvs << spec_file if spec_file
173
171
 
174
172
  gen = Pod::Command::Gen.new(CLAide::ARGV.new(argvs))
@@ -54,10 +54,13 @@ module Pod
54
54
  def run
55
55
  @specification = Specification.from_file(@podspec)
56
56
 
57
+ unless @podspec
58
+ raise Informative, "未找到 podspec文件"
59
+ end
57
60
  sources_sepc = run_archive
58
61
 
59
62
  fail_push_specs = []
60
- sources_sepc.uniq.each do |spec|
63
+ source_specs.uniq.each do |spec|
61
64
  begin
62
65
  fail_push_specs << spec unless CBin::Upload::Helper.new(spec,@code_dependencies,@sources).upload
63
66
  rescue Object => exception
@@ -72,7 +75,7 @@ module Pod
72
75
  end
73
76
  end
74
77
 
75
- success_specs = sources_sepc - fail_push_specs
78
+ success_specs = source_specs - fail_push_specs
76
79
  if success_specs.any?
77
80
  auto_success = ""
78
81
  success_specs.uniq.each do |spec|
@@ -123,11 +126,11 @@ module Pod
123
126
  argvs += ["--env=#{@env}"]
124
127
  end
125
128
  argvs += ["--configuration=#{@config}"]
126
-
129
+
127
130
  archive = Pod::Command::Bin::Archive.new(CLAide::ARGV.new(argvs))
128
131
  archive.validate!
129
- sources_sepc = archive.run
130
- sources_sepc
132
+ source_specs = archive.run
133
+ source_specs
131
134
  end
132
135
 
133
136
 
@@ -183,10 +186,10 @@ module Pod
183
186
  puts child
184
187
  if File.file?(child)
185
188
  if child.extname == '.podspec'
186
- name = File.basename(child)
187
- unless name.include?("binary-template")
188
- return name
189
- end
189
+ name = File.basename(child)
190
+ unless name.include?("binary-template")
191
+ return name
192
+ end
190
193
  end
191
194
  end
192
195
  end
@@ -0,0 +1,126 @@
1
+ require 'cocoapods-imy-bin/config/config_hot_key_asker'
2
+ require 'tmpdir'
3
+
4
+ module Pod
5
+ class Command
6
+ class Bin < Command
7
+ class Clean < Bin
8
+ self.summary = '清除缓存'
9
+ self.description = <<-DESC
10
+ 清除缓存
11
+ 1、清除私有源spec仓库缓存
12
+ 2、清除二进制仓库编译产物
13
+ DESC
14
+
15
+ def self.options
16
+ [
17
+ ['--env=configuration_env', '清除哪个环境,在.cocoapods下的 bin_dev.yml的配置项,dev'],
18
+ ['--list=[module,module,...]', '清除某个仓库下的模块 TODO'],
19
+ ['--all', '清除所有 TODO'],
20
+ ].concat(Pod::Command::Gen.options).concat(super).uniq
21
+ end
22
+
23
+
24
+ def initialize(argv)
25
+ @env = argv.option('env') || nil
26
+ @list = argv.flag?('list', [] )
27
+ @all_clean = argv.flag?('all', false )
28
+
29
+ @config = Pod::Config.instance
30
+
31
+ super
32
+ end
33
+
34
+
35
+ def run
36
+ #清除所有仓库缓存
37
+ if @all_clean
38
+
39
+ elsif @env #是否存在spec仓库
40
+ #获取对应环境地址
41
+ CBin.config.set_configuration_env(@env)
42
+ @config = CBin.config
43
+ unless @config
44
+ raise "请检查 env = #{@env} 私有源仓库是否设置正常"
45
+ end
46
+
47
+ # #1、清除git
48
+ reset_binary_repo
49
+ # #2、更新本地仓库源
50
+ update_cocoapods_repo
51
+ #3、删除二进制私有源存储二进制文件
52
+ update_cocoapods_repo
53
+
54
+ delete_build_binary
55
+ #4、清除cocoapods pods cache
56
+ update_cocopods_pods_cache
57
+
58
+ # @config.clean_binary_url
59
+ else #不存在spec仓库、就抛异常
60
+ raise "未设置 spec 私有源仓库"
61
+ end
62
+
63
+ end
64
+
65
+ #一、清除git上的仓库
66
+ # 1、拿到仓库地址 CBin.config.binary_repo_url
67
+ # 2、clone仓库
68
+ # 3、删除仓库下所有可见目录,除了.git
69
+ # 4、提交删除记录
70
+ def reset_binary_repo
71
+ work_dir = Dir.tmpdir + '/cocoapods-imy-bin-' + Array.new(8) { rand(36).to_s(36) }.join
72
+ UI.puts "临时目录 work_dir = #{work_dir}"
73
+ Pathname.new(work_dir).mkdir
74
+
75
+ `git clone #{@config.binary_repo_url} #{work_dir}`
76
+
77
+ deleteDirectory(work_dir)
78
+ UI.puts "binary_repo_url = #{@config.binary_repo_url}"
79
+
80
+ #在当前目录下 做git操作,才能提交成功
81
+ Dir.chdir(work_dir) do
82
+ UI.puts "当前目录 = #{Dir.pwd}"
83
+ `git add .`
84
+ `git commit -m "cocopods-imy-bin auto del"`
85
+ `/usr/bin/git push`
86
+ end
87
+
88
+ end
89
+
90
+ #二、更新本地仓库源,
91
+ # pod repo update xxx
92
+ def update_cocoapods_repo
93
+ `pod repo update`
94
+ UI.puts "完成pod repo update"
95
+ end
96
+
97
+ #三、删除二进制私有源存储二进制文件,
98
+ def delete_build_binary
99
+ `curl #{@config.delete_binary_url}`
100
+ UI.puts "完成删除服务器二进制包"
101
+ end
102
+
103
+ #四、清除cocoapods pods cache
104
+ def update_cocopods_pods_cache
105
+ `pod cache clean --all --verbose`
106
+ UI.puts "完成清除本地pod cache"
107
+ end
108
+
109
+
110
+ #遍历文件夹
111
+ def deleteDirectory(dirPath)
112
+ if File.directory?(dirPath)
113
+ puts "是文件夹";
114
+ Dir.foreach(dirPath) do |subFile|
115
+ if subFile != '.' and subFile != '..' and subFile != ".git"
116
+ FileUtils.remove_entry(File.join(dirPath, subFile))
117
+ end
118
+ end
119
+ end
120
+ end
121
+
122
+
123
+ end
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,169 @@
1
+
2
+ require 'cocoapods-imy-bin/native/podfile'
3
+ require 'cocoapods/command/gen'
4
+ require 'cocoapods/generate'
5
+ require 'cocoapods-imy-bin/helpers/local/local_framework_builder'
6
+ require 'cocoapods-imy-bin/helpers/local/local_library_builder'
7
+ require 'cocoapods-imy-bin/helpers/local/local_build_helper'
8
+ require 'cocoapods-imy-bin/helpers/spec_source_creator'
9
+ require 'cocoapods-imy-bin/config/config_builder'
10
+
11
+ module Pod
12
+ class Command
13
+ class Bin < Command
14
+ class Local < Bin
15
+ self.summary = '根据podfile中信息 将本地已存在的组件静态包 归档,需要归档的组件由外部传入'
16
+ self.description = <<-DESC
17
+ 根据podfile中信息 将本地已存在的组件静态包 归档,需要归档的组件由外部传入
18
+ 仅支持 iOS 平台
19
+ 此静态 framework/.a 不包含依赖组件的 symbol
20
+
21
+ 一个用ccache,一个是cocoapods-imy-bin插件支持下的,
22
+ 拿xcodebuild生成的中间构建产物,如生成的 libIMYYQHome.a,利用cocoapods-imy-bin 制作成二进制静态库,保存起来。
23
+ 下次pod update 工程时,在pod update时去捞已经生成的二进制组件打包。这样可以大大减少编译时间
24
+
25
+ 制作流程:
26
+ 每次pod update 时记录无二进制组件的库,build完后,自动制作缺失二进制组件库。
27
+ 如果pod update 时无二进制组件的库,采用源码编译,源码编译同时有ccache缓存支持,也能加快速度
28
+ DESC
29
+
30
+ def self.options
31
+ [
32
+ ['--no-clean', '保留构建中间产物'],
33
+ ['--framework-output', '输出framework文件'],
34
+ ['--no-zip', '不压缩静态 framework 为 zip'],
35
+ ['--make-binary-specs', '需要制作spec集合'],
36
+ ['--env', "该组件上传的环境 %w[dev debug_iphoneos release_iphoneos]"]
37
+ ].concat(Pod::Command::Gen.options).concat(super).uniq
38
+ end
39
+
40
+ def initialize(argv)
41
+ @env = argv.option('env') || 'dev'
42
+ CBin.config.set_configuration_env(@env)
43
+ UI.warn "====== cocoapods-imy-bin #{CBin::VERSION} 版本 ======== \n "
44
+ UI.warn "====== #{@env} 环境 ======== "
45
+
46
+
47
+ @make_binary_specs = argv.option('make-binary-specs') || []
48
+ @framework_output = argv.flag?('framework-output', false)
49
+ @clean = argv.flag?('no-clean', true)
50
+ @zip = argv.flag?('zip', true)
51
+ @sources = argv.option('sources') || []
52
+ @platform = Platform.new(:ios)
53
+
54
+ @target_name = CBin::Config::Builder.instance.target_name
55
+ @local_build_dir_name = CBin::Config::Builder.instance.xcode_build_name
56
+ @local_build_dir = CBin::Config::Builder.instance.xcode_build_dir
57
+
58
+ @framework_path
59
+ super
60
+ end
61
+
62
+ def run
63
+ # 清除之前的缓存
64
+ # temp = File.join(@local_build_dir, @platform.to_s)
65
+ # FileUtils.rm_r(temp) if File.exist? temp
66
+ # if File.exist?(CBin::Config::Builder.instance.zip_dir)
67
+ # FileUtils.rm_rf(Dir.glob("#{CBin::Config::Builder.instance.zip_dir}/*"))
68
+ # end
69
+
70
+ sources_spec = []
71
+ Dir.chdir(CBin::Config::Builder.instance.local_psec_dir) do
72
+ spec_files = Dir.glob(%w[*.json *.podspec])
73
+ spec_files.each do |file|
74
+ spec = Pod::Specification.from_file(file)
75
+ sources_spec << spec
76
+ end
77
+ end
78
+
79
+ build(sources_spec)
80
+ end
81
+
82
+ def build(make_binary_specs)
83
+ # 如果没要求,就清空依赖库数据
84
+ sources_sepc = []
85
+ make_binary_specs.uniq.each do |spec|
86
+ next if spec.name.include?('/')
87
+ next if spec.name == @target_name
88
+ #过滤白名单
89
+ next if CBin::Config::Builder.instance.white_pod_list.include?(spec.name)
90
+ #过滤 git
91
+ ignore_git_list = CBin::Config::Builder.instance.ignore_git_list
92
+ if spec.source[:git] && spec.source[:git] && ignore_git_list
93
+ spec_git = spec.source[:git]
94
+ spec_git_res = false
95
+ ignore_git_list.each do |ignore_git|
96
+ spec_git_res = spec_git.include?(ignore_git)
97
+ break if spec_git_res
98
+ end
99
+ next if spec_git_res
100
+ end
101
+ UI.warn "#{spec.name}.podspec 带有 vendored_frameworks 字段,请检查是否有效!!!" if spec.attributes_hash['vendored_frameworks']
102
+ next if spec.attributes_hash['vendored_frameworks'] && @target_name != spec.name #过滤带有vendored_frameworks的
103
+ next if (spec.attributes_hash['ios'] && spec.attributes_hash['ios']['vendored_frameworks']) #过滤带有vendored_frameworks的
104
+ #获取没有制作二进制版本的spec集合
105
+
106
+ next unless library_exist(spec)
107
+
108
+ # 获取没有制作二进制版本的spec集合
109
+ sources_sepc << spec
110
+ end
111
+
112
+ fail_build_specs = []
113
+ sources_sepc.uniq.each do |spec|
114
+ begin
115
+ builder = CBin::LocalBuild::Helper.new(spec,
116
+ @platform,
117
+ @framework_output,
118
+ @zip,
119
+ @clean,
120
+ @target_name,
121
+ @local_build_dir_name,
122
+ @local_build_dir)
123
+ if builder.build
124
+ CBin::Upload::Helper.new(spec, @code_dependencies, @sources).upload
125
+ else
126
+ fail_build_specs << spec
127
+ end
128
+ rescue StandardError
129
+ fail_build_specs << spec
130
+ end
131
+ end
132
+
133
+ if fail_build_specs.any?
134
+ fail_build_specs.uniq.each do |spec|
135
+ UI.warn "【#{spec.name} | #{spec.version}】组件二进制版本编译失败 ."
136
+ end
137
+ end
138
+
139
+ success_specs = sources_sepc - fail_build_specs
140
+ if success_specs.any?
141
+ success_specs.uniq.each do |spec|
142
+ UI.warn " =======【 #{spec.name} | #{spec.version} 】二进制组件制作完成 !!!"
143
+ end
144
+ end
145
+ # pod repo update
146
+ UI.section("\nUpdating Spec Repositories\n".yellow) do
147
+ Pod::Command::Bin::Repo::Update.new(CLAide::ARGV.new([])).run
148
+ end
149
+ end
150
+
151
+ private
152
+
153
+ def library_exist(spec)
154
+ File.exist?(File.join(@local_build_dir, "lib#{spec.name}.a")) || is_framework(spec)
155
+ end
156
+ # 使用了user_framework 会有#{@spec.name}.framework
157
+ # 未使用的 需要判断文件
158
+ def is_framework(spec)
159
+ res = File.exist?(File.join(@local_build_dir, "#{spec.name}.framework"))
160
+ unless res
161
+ res = File.exist?(File.join(CBin::Config::Builder.instance.xcode_BuildProductsPath_dir, "#{spec.name}","Swift Compatibility Header"))
162
+ end
163
+ res
164
+ end
165
+
166
+ end
167
+ end
168
+ end
169
+ end
@@ -70,9 +70,17 @@ module Pod
70
70
  local_post_install_callback = @post_install_callback
71
71
  end
72
72
  end
73
+ local_podfile_internal_hash = nil
74
+ local_podfile.instance_eval do
75
+ begin
76
+ local_podfile_internal_hash = internal_hash
77
+ end
78
+ end
79
+
73
80
 
74
81
  podfile.instance_eval do
75
82
  begin
83
+ internal_hash.merge!(local_podfile_internal_hash)
76
84
 
77
85
  # podfile HASH_KEYS才有plugins字段,否则会被限制
78
86
  if local_podfile.plugins.any?
@@ -111,9 +119,12 @@ module Pod
111
119
  end
112
120
 
113
121
  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
122
+ dp_hash_equal = target_dependency.is_a?(Hash) &&
123
+ target_dependency.keys.first &&
124
+ target_dependency.keys.first == local_dependency.keys.first
125
+ dp_str_equal = target_dependency.is_a?(String) &&
126
+ target_dependency == local_dependency.keys.first
127
+ next unless dp_hash_equal || dp_str_equal
117
128
 
118
129
  target_dependencies.delete target_dependency
119
130
  break
@@ -4,9 +4,11 @@ require 'cocoapods-imy-bin/command/bin/init'
4
4
  require 'cocoapods-imy-bin/command/bin/archive'
5
5
  require 'cocoapods-imy-bin/command/bin/auto'
6
6
  require 'cocoapods-imy-bin/command/bin/code'
7
+ require 'cocoapods-imy-bin/command/bin/local'
7
8
  require 'cocoapods-imy-bin/command/bin/update'
8
9
  require 'cocoapods-imy-bin/command/bin/install'
9
10
  require 'cocoapods-imy-bin/command/bin/imy'
11
+ require 'cocoapods-imy-bin/command/bin/clean'
10
12
 
11
13
  require 'cocoapods-imy-bin/helpers'
12
14
 
@@ -55,6 +55,14 @@ module CBin
55
55
  binary_download_url[0,binary_download_url.length - cut_string.length]
56
56
  end
57
57
 
58
+ #清除接口 http://ci.meiyou.im:10240/frameworks_del
59
+ def delete_binary_url
60
+ cut_string = "/%s/%s/zip"
61
+ url = binary_download_url[0,binary_download_url.length - cut_string.length]
62
+ url += "_del"
63
+ url
64
+ end
65
+
58
66
  def set_configuration_env(env)
59
67
  @configuration_env = env
60
68
  end
@@ -1,6 +1,6 @@
1
1
 
2
2
  module CBin
3
- VERSION = '0.3.1.3'
3
+ VERSION = '0.3.1.21'
4
4
  end
5
5
 
6
6
  module Pod
@@ -14,6 +14,43 @@ module CBin
14
14
  return Utils.is_swift_module(spec)
15
15
  end
16
16
 
17
+ def Utils.spec_header_dir(spec)
18
+
19
+ header_dir = "./Headers/Public/#{spec.name}"
20
+ header_dir = "./Pods/Headers/Public/#{spec.name}" unless File.exist?(header_dir)
21
+
22
+ unless File.exist?(header_dir)
23
+ # 一些库名称中使用了中划线如AAA-BBB,public header中库名称会默认处理成下划线AAA_BBB
24
+ module_name = spec.name.gsub("-", "_")
25
+ header_dir = "./Pods/Headers/Public/#{module_name}"
26
+ end
27
+
28
+ # 暂时只支持:ios
29
+ consumer = Pod::Specification::Consumer.new(spec, :ios)
30
+ unless consumer.header_dir.nil?
31
+ header_dir = File.join(header_dir, consumer.header_dir)
32
+ end
33
+
34
+ header_dir
35
+ end
36
+
37
+ def Utils.spec_module_dir(spec)
38
+ if spec.module_name.nil?
39
+ module_dir = "./Headers/Public/#{spec.name}"
40
+ module_dir = "./Pods/Headers/Public/#{spec.name}" unless File.exist?(module_dir)
41
+ unless File.exist?(module_dir)
42
+ # 一些库名称中使用了中划线如AAA-BBB,public header中库名称会默认处理成下划线AAA_BBB
43
+ module_name = spec.name.gsub("-", "_")
44
+ module_dir = "./Pods/Headers/Public/#{module_name}"
45
+ end
46
+ else
47
+ module_dir = "./Headers/Public/#{spec.module_name}"
48
+ module_dir = "./Pods/Headers/Public/#{spec.module_name}" unless File.exist?(module_dir)
49
+ end
50
+
51
+ module_dir
52
+ end
53
+
17
54
  def Utils.is_swift_module(spec)
18
55
 
19
56
  is_framework = false
@@ -21,15 +58,9 @@ module CBin
21
58
  #auto 走这里
22
59
  if File.exist?(dir)
23
60
  Dir.chdir(dir) do
24
- public_headers = Array.new
25
- spec_header_dir = "./Headers/Public/#{spec.name}"
26
-
27
- unless File.exist?(spec_header_dir)
28
- spec_header_dir = "./Pods/Headers/Public/#{spec.name}"
29
- end
30
- return false unless File.exist?(spec_header_dir)
31
-
32
- is_framework = File.exist?(File.join(spec_header_dir, "#{spec.name}-umbrella.h"))
61
+ spec_module_dir = Utils.spec_module_dir(spec)
62
+ return false unless File.exist?(spec_module_dir)
63
+ is_framework = File.exist?(File.join(spec_module_dir, "#{spec.name}-umbrella.h"))
33
64
  end
34
65
  end
35
66
 
@@ -240,7 +240,7 @@ module CBin
240
240
  end
241
241
  raise "copy_headers #{spec_header_dir} no exist " unless File.exist?(spec_header_dir)
242
242
  Dir.chdir(spec_header_dir) do
243
- headers = Dir.glob('*.h')
243
+ headers = Dir.glob('**/*.h')
244
244
  headers.each do |h|
245
245
  public_headers << Pathname.new(File.join(Dir.pwd,h))
246
246
  end
@@ -0,0 +1,57 @@
1
+
2
+
3
+ # copy from https://github.com/CocoaPods/cocoapods-packager
4
+ require 'cocoapods-imy-bin/config/config_builder'
5
+
6
+ module CBin
7
+ class LocalLibrary
8
+ attr_reader :headers_path
9
+ attr_reader :resources_path
10
+ attr_reader :root_path
11
+ attr_reader :versions_path
12
+ attr_reader :name_path
13
+
14
+ def initialize(name, platform, version)
15
+ @name = name
16
+ @platform = platform
17
+ @version = version
18
+ end
19
+
20
+ def make
21
+ make_root
22
+ make_library
23
+ make_headers
24
+ make_resources
25
+ end
26
+
27
+ def delete_resources
28
+ Pathname.new(@resources_path).rmtree
29
+ (Pathname.new(@fwk_path) + Pathname.new('Resources')).delete
30
+ end
31
+
32
+ private
33
+
34
+ def make_library
35
+ @name_path = CBin::Config::Builder.instance.library_name_version(@name, @version)
36
+ @fwk_path = @root_path + Pathname.new(@name_path)
37
+ @fwk_path.mkdir unless @fwk_path.exist?
38
+
39
+ @versions_path = @fwk_path
40
+ end
41
+
42
+ def make_headers
43
+ @headers_path = @versions_path + Pathname.new('Headers')
44
+ # @headers_path.mkpath unless @headers_path.exist?
45
+ end
46
+
47
+ def make_resources
48
+ @resources_path = @versions_path + Pathname.new('Resources')
49
+ # @resources_path.mkpath unless @resources_path.exist?
50
+ end
51
+
52
+ def make_root
53
+ @root_path = Pathname.new(@platform)
54
+ @root_path.mkpath unless @root_path.exist?
55
+ end
56
+ end
57
+ end