cocoapods-imy-bin 0.3.0.11 → 0.3.1.2
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.
- checksums.yaml +5 -5
- data/lib/cocoapods-imy-bin/command/bin/auto.rb +13 -8
- data/lib/cocoapods-imy-bin/command/bin/dup.rb +78 -0
- data/lib/cocoapods-imy-bin/gem_version.rb +1 -1
- data/lib/cocoapods-imy-bin/native/installer.rb +22 -2
- data/lib/cocoapods-imy-bin/source_provider_hook.rb +35 -23
- metadata +8 -14
- data/lib/cocoapods-imy-bin/command/bin/local.rb +0 -165
- data/lib/cocoapods-imy-bin/helpers/local/loca_llibrary.rb +0 -57
- data/lib/cocoapods-imy-bin/helpers/local/local_build_helper.rb +0 -178
- data/lib/cocoapods-imy-bin/helpers/local/local_framework.rb +0 -85
- data/lib/cocoapods-imy-bin/helpers/local/local_framework_builder.rb +0 -227
- data/lib/cocoapods-imy-bin/helpers/local/local_library_builder.rb +0 -92
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9615d9bdb0593016773bd1eef955f538a514f95df8e3448857e56b6a08c9a9e7
|
4
|
+
data.tar.gz: 3e17dae46e3bd0342915a98867ec14f4e1884810bb6e650d4cefa6d96038ad39
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 44987c514c588474b9b6ef7fe1559eaf0aee3a0c60c5423f247d889342cdba4880f3fa02e488aa50f68acf3dbf697f4631bae9f83f9cf0431caf22da25134e33
|
7
|
+
data.tar.gz: ca023cae9c83faa5ae8a6d8e811e55cffa39483204ebb4fc12c62a475fe01c50caf7a99269e366aea4bf0bad2ca568fd77065c61576163227db0f2557b34afcc
|
@@ -46,11 +46,14 @@ module Pod
|
|
46
46
|
super
|
47
47
|
end
|
48
48
|
|
49
|
+
def validate!
|
50
|
+
help! "未找到 podspec文件" unless @podspec
|
51
|
+
super
|
52
|
+
end
|
53
|
+
|
49
54
|
def run
|
55
|
+
@specification = Specification.from_file(@podspec)
|
50
56
|
|
51
|
-
unless @podspec
|
52
|
-
raise Informative, "未找到 podspec文件"
|
53
|
-
end
|
54
57
|
sources_sepc = run_archive
|
55
58
|
|
56
59
|
fail_push_specs = []
|
@@ -120,7 +123,7 @@ module Pod
|
|
120
123
|
argvs += ["--env=#{@env}"]
|
121
124
|
end
|
122
125
|
argvs += ["--configuration=#{@config}"]
|
123
|
-
|
126
|
+
|
124
127
|
archive = Pod::Command::Bin::Archive.new(CLAide::ARGV.new(argvs))
|
125
128
|
archive.validate!
|
126
129
|
sources_sepc = archive.run
|
@@ -175,17 +178,19 @@ module Pod
|
|
175
178
|
|
176
179
|
#Dir.glob 可替代
|
177
180
|
def find_podspec
|
181
|
+
name = nil
|
178
182
|
Pathname.pwd.children.each do |child|
|
179
183
|
puts child
|
180
184
|
if File.file?(child)
|
181
185
|
if child.extname == '.podspec'
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
+
name = File.basename(child)
|
187
|
+
unless name.include?("binary-template")
|
188
|
+
return name
|
189
|
+
end
|
186
190
|
end
|
187
191
|
end
|
188
192
|
end
|
193
|
+
return name
|
189
194
|
end
|
190
195
|
|
191
196
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'cocoapods'
|
2
|
+
require 'cocoapods/target/pod_target'
|
3
|
+
|
4
|
+
module Pod
|
5
|
+
class Command
|
6
|
+
class Bin < Command
|
7
|
+
class Dup < Bin
|
8
|
+
self.summary = '在Podfile目录下,查找Pods下同名资源名'
|
9
|
+
|
10
|
+
self.description = <<-DESC
|
11
|
+
在Podfile目录下,查找Pods下同名资源名
|
12
|
+
DESC
|
13
|
+
|
14
|
+
self.arguments = [
|
15
|
+
CLAide::Argument.new('NAME', false)
|
16
|
+
]
|
17
|
+
def self.options
|
18
|
+
[
|
19
|
+
['--all-clean', '删除所有已经下载的源码'],
|
20
|
+
['--clean', '删除所有指定下载的源码'],
|
21
|
+
['--list', '展示所有一级下载的源码以及其大小'],
|
22
|
+
['--source', '源码路径,本地路径,会去自动链接本地源码']
|
23
|
+
]
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize(argv)
|
27
|
+
@codeSource = argv.option('source') || nil
|
28
|
+
|
29
|
+
@config = Pod::Config.instance
|
30
|
+
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
def run
|
36
|
+
target_definition = Pod::Config.instance.podfile.target_definition_list[1]
|
37
|
+
|
38
|
+
user_build_configurations = target_definition.build_configurations || Target::DEFAULT_BUILD_CONFIGURATIONS
|
39
|
+
aggregateTarget = AggregateTarget.new(Pod::Config.instance.sandbox,
|
40
|
+
target_definition.uses_frameworks?,
|
41
|
+
user_build_configurations ,
|
42
|
+
nil,
|
43
|
+
target_definition.platform,
|
44
|
+
target_definition,
|
45
|
+
Pod::Config.instance.installation_root,
|
46
|
+
nil,
|
47
|
+
nil ,
|
48
|
+
user_build_configurations)
|
49
|
+
input_file = aggregateTarget.copy_resources_script_path
|
50
|
+
output_pods_suffix_txt = File.join(Pod::Config.instance.project_root,"output_pods_suffix.txt")
|
51
|
+
output_pods_uniq_txt = File.join(Pod::Config.instance.project_root,"output_pods_uniq.txt")
|
52
|
+
ignore_array = ["bundle","mp3"]
|
53
|
+
resources_path = File.join(File.dirname(File.dirname(File.dirname(__FILE__))),"resources")
|
54
|
+
shell_file = File.join(resources_path,"Pods-check-deduplication-resources.sh")
|
55
|
+
#ruby 调用shell 文件、命令传入
|
56
|
+
# stdout shell 脚本输出的文本
|
57
|
+
# status 退出的状态
|
58
|
+
stdout, status = Open3.capture2('/bin/sh',
|
59
|
+
"#{shell_file}",
|
60
|
+
"#{input_file}",
|
61
|
+
"#{output_pods_suffix_txt}",
|
62
|
+
"#{output_pods_uniq_txt}",
|
63
|
+
"#{ignore_array}")
|
64
|
+
|
65
|
+
#重复资源 抛出异常
|
66
|
+
if status.to_i != 0
|
67
|
+
raise "由于权限不足,请手动创建 后重试"
|
68
|
+
else #重复资源,警告
|
69
|
+
raise "由于权限不足,请手动创建 后重试"
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'cocoapods/installer/project_cache/target_metadata.rb'
|
3
2
|
require 'parallel'
|
4
3
|
require 'cocoapods'
|
4
|
+
require 'xcodeproj'
|
5
5
|
require 'cocoapods-imy-bin/native/pod_source_installer'
|
6
6
|
|
7
7
|
module Pod
|
@@ -93,6 +93,26 @@ module Pod
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
end
|
96
|
+
|
97
|
+
alias old_write_lockfiles write_lockfiles
|
98
|
+
def write_lockfiles
|
99
|
+
old_write_lockfiles
|
100
|
+
if File.exist?('Podfile_local')
|
101
|
+
|
102
|
+
project = Xcodeproj::Project.open(config.sandbox.project_path)
|
103
|
+
#获取主group
|
104
|
+
group = project.main_group
|
105
|
+
group.set_source_tree('SOURCE_ROOT')
|
106
|
+
#向group中添加 文件引用
|
107
|
+
file_ref = group.new_reference(config.sandbox.root + '../Podfile_local')
|
108
|
+
#podfile_local排序
|
109
|
+
podfile_local_group = group.children.last
|
110
|
+
group.children.pop
|
111
|
+
group.children.unshift(podfile_local_group)
|
112
|
+
#保存
|
113
|
+
project.save
|
114
|
+
end
|
115
|
+
end
|
96
116
|
end
|
97
117
|
|
98
118
|
module Downloader
|
@@ -5,19 +5,25 @@ require 'cocoapods/user_interface'
|
|
5
5
|
Pod::HooksManager.register('cocoapods-imy-bin', :pre_install) do |_context, _|
|
6
6
|
require 'cocoapods-imy-bin/native'
|
7
7
|
|
8
|
-
#
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
8
|
+
#pod bin update || install 不走这里
|
9
|
+
if $ARGV[1] = 'update' || $ARGV[1] != 'install'
|
10
|
+
|
11
|
+
else
|
12
|
+
# pod bin repo update 更新二进制私有源
|
13
|
+
Pod::Command::Bin::Repo::Update.new(CLAide::ARGV.new([])).run
|
14
|
+
|
15
|
+
# 有插件/本地库 且是dev环境下,默认进入源码白名单 过滤 archive命令
|
16
|
+
if _context.podfile.plugins.keys.include?('cocoapods-imy-bin') && _context.podfile.configuration_env == 'dev'
|
17
|
+
dependencies = _context.podfile.dependencies
|
18
|
+
dependencies.each do |d|
|
19
|
+
next unless d.respond_to?(:external_source) &&
|
20
|
+
d.external_source.is_a?(Hash) &&
|
21
|
+
!d.external_source[:path].nil? &&
|
22
|
+
$ARGV[1] != 'archive'
|
23
|
+
_context.podfile.set_use_source_pods d.name
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
21
27
|
end
|
22
28
|
|
23
29
|
# 同步 BinPodfile 文件
|
@@ -39,16 +45,22 @@ Pod::HooksManager.register('cocoapods-imy-bin', :pre_install) do |_context, _|
|
|
39
45
|
end
|
40
46
|
|
41
47
|
Pod::HooksManager.register('cocoapods-imy-bin', :source_provider) do |context, _|
|
42
|
-
|
43
|
-
|
48
|
+
#pod bin update || install 不走这里
|
49
|
+
if $ARGV[1] == 'update' || $ARGV[1] != 'install'
|
50
|
+
|
51
|
+
else
|
52
|
+
sources_manager = Pod::Config.instance.sources_manager
|
53
|
+
podfile = Pod::Config.instance.podfile
|
44
54
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
55
|
+
if podfile
|
56
|
+
# 添加源码私有源 && 二进制私有源
|
57
|
+
added_sources = [sources_manager.code_source]
|
58
|
+
if podfile.use_binaries? || podfile.use_binaries_selector
|
59
|
+
added_sources << sources_manager.binary_source
|
60
|
+
added_sources.reverse!
|
61
|
+
end
|
62
|
+
added_sources.each { |source| context.add_source(source) }
|
63
|
+
end
|
53
64
|
end
|
65
|
+
|
54
66
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-imy-bin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 苏良锦
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: parallel
|
@@ -42,16 +42,16 @@ dependencies:
|
|
42
42
|
name: cocoapods-generate
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 2.0.1
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.0.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -96,12 +96,12 @@ files:
|
|
96
96
|
- lib/cocoapods-imy-bin/command/bin/archive.rb
|
97
97
|
- lib/cocoapods-imy-bin/command/bin/auto.rb
|
98
98
|
- lib/cocoapods-imy-bin/command/bin/code.rb
|
99
|
+
- lib/cocoapods-imy-bin/command/bin/dup.rb
|
99
100
|
- lib/cocoapods-imy-bin/command/bin/imy.rb
|
100
101
|
- lib/cocoapods-imy-bin/command/bin/init.rb
|
101
102
|
- lib/cocoapods-imy-bin/command/bin/initHotKey.rb
|
102
103
|
- lib/cocoapods-imy-bin/command/bin/install.rb
|
103
104
|
- lib/cocoapods-imy-bin/command/bin/lib/lint.rb
|
104
|
-
- lib/cocoapods-imy-bin/command/bin/local.rb
|
105
105
|
- lib/cocoapods-imy-bin/command/bin/repo/update.rb
|
106
106
|
- lib/cocoapods-imy-bin/command/bin/spec/create.rb
|
107
107
|
- lib/cocoapods-imy-bin/command/bin/spec/push.rb
|
@@ -120,11 +120,6 @@ files:
|
|
120
120
|
- lib/cocoapods-imy-bin/helpers/framework_builder.rb
|
121
121
|
- lib/cocoapods-imy-bin/helpers/library.rb
|
122
122
|
- lib/cocoapods-imy-bin/helpers/library_builder.rb
|
123
|
-
- lib/cocoapods-imy-bin/helpers/local/loca_llibrary.rb
|
124
|
-
- lib/cocoapods-imy-bin/helpers/local/local_build_helper.rb
|
125
|
-
- lib/cocoapods-imy-bin/helpers/local/local_framework.rb
|
126
|
-
- lib/cocoapods-imy-bin/helpers/local/local_framework_builder.rb
|
127
|
-
- lib/cocoapods-imy-bin/helpers/local/local_library_builder.rb
|
128
123
|
- lib/cocoapods-imy-bin/helpers/sources_helper.rb
|
129
124
|
- lib/cocoapods-imy-bin/helpers/spec_creator.rb
|
130
125
|
- lib/cocoapods-imy-bin/helpers/spec_files_helper.rb
|
@@ -174,8 +169,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
174
169
|
- !ruby/object:Gem::Version
|
175
170
|
version: '0'
|
176
171
|
requirements: []
|
177
|
-
|
178
|
-
rubygems_version: 2.5.2.3
|
172
|
+
rubygems_version: 3.0.1
|
179
173
|
signing_key:
|
180
174
|
specification_version: 4
|
181
175
|
summary: cocoapods-imy-bin is a plugin which helps develpers switching pods between
|
@@ -1,165 +0,0 @@
|
|
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
|
-
if spec.source[:git] && spec.source[:git]
|
92
|
-
spec_git = spec.source[:git]
|
93
|
-
spec_git_res = false
|
94
|
-
CBin::Config::Builder.instance.ignore_git_list.each do |ignore_git|
|
95
|
-
spec_git_res = spec_git.include?(ignore_git)
|
96
|
-
break if spec_git_res
|
97
|
-
end
|
98
|
-
next if spec_git_res
|
99
|
-
end
|
100
|
-
UI.warn "#{spec.name}.podspec 带有 vendored_frameworks 字段,请检查是否有效!!!" if spec.attributes_hash['vendored_frameworks']
|
101
|
-
next if spec.attributes_hash['vendored_frameworks'] && @target_name != spec.name #过滤带有vendored_frameworks的
|
102
|
-
next if (spec.attributes_hash['ios'] && spec.attributes_hash['ios']['vendored_frameworks']) #过滤带有vendored_frameworks的
|
103
|
-
#获取没有制作二进制版本的spec集合
|
104
|
-
|
105
|
-
next unless library_exist(spec)
|
106
|
-
|
107
|
-
# 获取没有制作二进制版本的spec集合
|
108
|
-
sources_sepc << spec
|
109
|
-
end
|
110
|
-
|
111
|
-
fail_build_specs = []
|
112
|
-
sources_sepc.uniq.each do |spec|
|
113
|
-
begin
|
114
|
-
builder = CBin::LocalBuild::Helper.new(spec,
|
115
|
-
@platform,
|
116
|
-
@framework_output,
|
117
|
-
@zip,
|
118
|
-
@clean,
|
119
|
-
@target_name,
|
120
|
-
@local_build_dir_name,
|
121
|
-
@local_build_dir)
|
122
|
-
builder.build
|
123
|
-
CBin::Upload::Helper.new(spec, @code_dependencies, @sources).upload
|
124
|
-
rescue StandardError
|
125
|
-
fail_build_specs << spec
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
if fail_build_specs.any?
|
130
|
-
fail_build_specs.uniq.each do |spec|
|
131
|
-
UI.warn "【#{spec.name} | #{spec.version}】组件二进制版本编译失败 ."
|
132
|
-
end
|
133
|
-
end
|
134
|
-
|
135
|
-
success_specs = sources_sepc - fail_build_specs
|
136
|
-
if success_specs.any?
|
137
|
-
success_specs.uniq.each do |spec|
|
138
|
-
UI.warn " =======【 #{spec.name} | #{spec.version} 】二进制组件制作完成 !!!"
|
139
|
-
end
|
140
|
-
end
|
141
|
-
# pod repo update
|
142
|
-
UI.section("\nUpdating Spec Repositories\n".yellow) do
|
143
|
-
Pod::Command::Bin::Repo::Update.new(CLAide::ARGV.new([])).run
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
private
|
148
|
-
|
149
|
-
def library_exist(spec)
|
150
|
-
File.exist?(File.join(@local_build_dir, "lib#{spec.name}.a")) || is_framework(spec)
|
151
|
-
end
|
152
|
-
# 使用了user_framework 会有#{@spec.name}.framework
|
153
|
-
# 未使用的 需要判断文件
|
154
|
-
def is_framework(spec)
|
155
|
-
res = File.exist?(File.join(@local_build_dir, "#{spec.name}.framework"))
|
156
|
-
unless res
|
157
|
-
res = File.exist?(File.join(CBin::Config::Builder.instance.xcode_BuildProductsPath_dir, "#{spec.name}","Swift Compatibility Header"))
|
158
|
-
end
|
159
|
-
res
|
160
|
-
end
|
161
|
-
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
@@ -1,57 +0,0 @@
|
|
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
|
@@ -1,178 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# copy from https://github.com/CocoaPods/cocoapods-packager
|
4
|
-
|
5
|
-
require 'cocoapods-imy-bin/native/podfile'
|
6
|
-
require 'cocoapods/command/gen'
|
7
|
-
require 'cocoapods/generate'
|
8
|
-
require 'cocoapods-imy-bin/helpers/framework_builder'
|
9
|
-
require 'cocoapods-imy-bin/helpers/library_builder'
|
10
|
-
require 'cocoapods-imy-bin/config/config_builder'
|
11
|
-
|
12
|
-
module CBin
|
13
|
-
class LocalBuild
|
14
|
-
class Helper
|
15
|
-
include Pod
|
16
|
-
#class var
|
17
|
-
@@build_defines = ""
|
18
|
-
#Debug下还待完成
|
19
|
-
def initialize(spec,
|
20
|
-
platform,
|
21
|
-
framework_output,
|
22
|
-
zip,
|
23
|
-
clean,
|
24
|
-
target_name,
|
25
|
-
local_build_dir_name,
|
26
|
-
local_build_dir)
|
27
|
-
@spec = spec
|
28
|
-
@target_name = target_name
|
29
|
-
@platform = platform
|
30
|
-
|
31
|
-
@framework_output = framework_output
|
32
|
-
@zip = zip
|
33
|
-
@local_build_dir_name = local_build_dir_name
|
34
|
-
@local_build_dir = local_build_dir
|
35
|
-
@clean = clean
|
36
|
-
@framework_path
|
37
|
-
@is_library = !is_framework
|
38
|
-
end
|
39
|
-
|
40
|
-
def build
|
41
|
-
UI.section("Building static framework #{@spec}") do
|
42
|
-
|
43
|
-
build_static_framework
|
44
|
-
if @is_library
|
45
|
-
build_static_library
|
46
|
-
zip_static_framework if @zip &&= @framework_output
|
47
|
-
zip_static_library
|
48
|
-
else
|
49
|
-
zip_static_framework
|
50
|
-
end
|
51
|
-
|
52
|
-
clean_workspace if @clean
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
def build_static_framework
|
58
|
-
file_accessor = Sandbox::FileAccessor.new(Pathname.new('.').expand_path, @spec.consumer(@platform))
|
59
|
-
Dir.chdir(workspace_directory) do
|
60
|
-
builder = CBin::LocalFramework::Builder.new(@spec, file_accessor, @platform, @local_build_dir_name,@local_build_dir, @is_library, frameWork_dir)
|
61
|
-
@framework_path = builder.create
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
def build_static_library
|
66
|
-
source_dir = zip_dir
|
67
|
-
file_accessor = Sandbox::FileAccessor.new(Pathname.new('.').expand_path, @spec.consumer(@platform))
|
68
|
-
Dir.chdir(workspace_directory) do
|
69
|
-
builder = CBin::LocalLibrary::Builder.new(@spec, file_accessor, @platform, source_dir,@framework_path)
|
70
|
-
builder.build
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def zip_static_framework
|
75
|
-
Dir.chdir(zip_dir) do
|
76
|
-
# output_name = "#{framework_name}.zip"
|
77
|
-
output_name = File.join(zip_dir, framework_name_zip)
|
78
|
-
unless File.exist?(framework_name)
|
79
|
-
UI.warn "没有需要压缩的 framework 文件:#{framework_name}"
|
80
|
-
end
|
81
|
-
|
82
|
-
UI.puts "Compressing #{framework_name} into #{output_name}"
|
83
|
-
`zip --symlinks -r #{output_name} #{framework_name}`
|
84
|
-
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def zip_static_library
|
89
|
-
Dir.chdir(zip_dir) do
|
90
|
-
output_library = "#{library_name}.zip"
|
91
|
-
unless File.exist?(library_name)
|
92
|
-
raise Informative, "没有需要压缩的 library 文件:#{library_name}"
|
93
|
-
end
|
94
|
-
|
95
|
-
UI.puts "Compressing #{library_name} into #{output_library}"
|
96
|
-
|
97
|
-
`zip --symlinks -r #{output_library} #{library_name}`
|
98
|
-
end
|
99
|
-
|
100
|
-
end
|
101
|
-
|
102
|
-
|
103
|
-
def clean_workspace
|
104
|
-
UI.puts 'Cleaning workspace'
|
105
|
-
|
106
|
-
FileUtils.rm_rf(gen_name)
|
107
|
-
Dir.chdir(zip_dir) do
|
108
|
-
FileUtils.rm_rf(framework_name) if @zip
|
109
|
-
FileUtils.rm_rf(library_name)
|
110
|
-
FileUtils.rm_rf(framework_name) unless @framework_output
|
111
|
-
FileUtils.rm_rf("#{framework_name}.zip") unless @framework_output
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def framework_name
|
116
|
-
CBin::Config::Builder.instance.framework_name(@spec)
|
117
|
-
end
|
118
|
-
|
119
|
-
def framework_name_zip
|
120
|
-
CBin::Config::Builder.instance.framework_name_version(@spec) + ".zip"
|
121
|
-
end
|
122
|
-
|
123
|
-
def library_name
|
124
|
-
CBin::Config::Builder.instance.library_name(@spec)
|
125
|
-
end
|
126
|
-
|
127
|
-
def workspace_directory
|
128
|
-
@local_build_dir
|
129
|
-
end
|
130
|
-
|
131
|
-
def zip_dir
|
132
|
-
CBin::Config::Builder.instance.zip_dir
|
133
|
-
end
|
134
|
-
|
135
|
-
def gen_name
|
136
|
-
CBin::Config::Builder.instance.gen_name
|
137
|
-
end
|
138
|
-
|
139
|
-
def is_library
|
140
|
-
File.exist?(File.join(@local_build_dir, "lib#{@spec.name}.a"))
|
141
|
-
end
|
142
|
-
|
143
|
-
# 使用了user_framework 会有#{@spec.name}.framework
|
144
|
-
# 未使用的 需要判断文件
|
145
|
-
def is_framework
|
146
|
-
res = File.exist?(File.join(@local_build_dir, "#{@spec.name}.framework"))
|
147
|
-
unless res
|
148
|
-
res = File.exist?(File.join(CBin::Config::Builder.instance.xcode_BuildProductsPath_dir, "#{@spec.name}","Swift Compatibility Header"))
|
149
|
-
end
|
150
|
-
res
|
151
|
-
end
|
152
|
-
|
153
|
-
def frameWork_dir
|
154
|
-
dir = File.join(@local_build_dir, "#{@spec.name}.framework")
|
155
|
-
unless File.exist?(dir)
|
156
|
-
dir = File.join(CBin::Config::Builder.instance.xcode_BuildProductsPath_dir, "#{@spec.name}")
|
157
|
-
end
|
158
|
-
dir
|
159
|
-
end
|
160
|
-
|
161
|
-
def spec_file
|
162
|
-
@spec_file ||= begin
|
163
|
-
if @podspec
|
164
|
-
find_spec_file(@podspec)
|
165
|
-
else
|
166
|
-
if code_spec_files.empty?
|
167
|
-
raise Informative, '当前目录下没有找到可用源码 podspec.'
|
168
|
-
end
|
169
|
-
|
170
|
-
spec_file = code_spec_files.first
|
171
|
-
spec_file
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
@@ -1,85 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# copy from https://github.com/CocoaPods/cocoapods-packager
|
4
|
-
|
5
|
-
module CBin
|
6
|
-
class LocalFramework
|
7
|
-
attr_reader :headers_path
|
8
|
-
attr_reader :module_map_path
|
9
|
-
attr_reader :resources_path
|
10
|
-
attr_reader :root_path
|
11
|
-
attr_reader :versions_path
|
12
|
-
attr_reader :swift_module_path
|
13
|
-
attr_reader :fwk_path
|
14
|
-
|
15
|
-
def initialize(name, platform, local_build_dir)
|
16
|
-
@name = name
|
17
|
-
@platform = platform
|
18
|
-
@local_build_dir = local_build_dir
|
19
|
-
end
|
20
|
-
|
21
|
-
def make
|
22
|
-
make_root
|
23
|
-
make_framework
|
24
|
-
make_headers
|
25
|
-
make_resources
|
26
|
-
make_current_version
|
27
|
-
end
|
28
|
-
|
29
|
-
def delete_resources
|
30
|
-
Pathname.new(@resources_path).rmtree
|
31
|
-
(Pathname.new(@fwk_path) + Pathname.new('Resources')).delete
|
32
|
-
end
|
33
|
-
|
34
|
-
def remove_current_version
|
35
|
-
FileUtils.rm_f(File.join(@fwk_path,@name))
|
36
|
-
FileUtils.rm_f(File.join(@fwk_path,"Headers"))
|
37
|
-
FileUtils.rm_f(File.join(@fwk_path,"Resources"))
|
38
|
-
|
39
|
-
FileUtils.cp_r("#{@versions_path}/.", @fwk_path)
|
40
|
-
# FileUtils.remove_dir(@versions_path)
|
41
|
-
FileUtils.remove_dir("#{@fwk_path}/Versions")
|
42
|
-
|
43
|
-
# current_version_path = @versions_path + Pathname.new('../Current')
|
44
|
-
# `ln -sf A #{current_version_path}`
|
45
|
-
# `ln -sf Versions/Current/Headers #{@fwk_path}/`
|
46
|
-
# `ln -sf Versions/Current/Resources #{@fwk_path}/`
|
47
|
-
# `ln -sf Versions/Current/#{@name} #{@fwk_path}/`
|
48
|
-
end
|
49
|
-
private
|
50
|
-
|
51
|
-
def make_current_version
|
52
|
-
current_version_path = @versions_path + Pathname.new('../Current')
|
53
|
-
`ln -sf A #{current_version_path}`
|
54
|
-
`ln -sf Versions/Current/Headers #{@fwk_path}/`
|
55
|
-
`ln -sf Versions/Current/Resources #{@fwk_path}/`
|
56
|
-
`ln -sf Versions/Current/#{@name} #{@fwk_path}/`
|
57
|
-
end
|
58
|
-
|
59
|
-
def make_framework
|
60
|
-
@fwk_path = @root_path + Pathname.new(@name + '.framework')
|
61
|
-
FileUtils.remove_dir(@fwk_path) if @fwk_path.exist?
|
62
|
-
@fwk_path.mkdir unless @fwk_path.exist?
|
63
|
-
|
64
|
-
@module_map_path = @fwk_path + Pathname.new('Modules')
|
65
|
-
@versions_path = @fwk_path + Pathname.new('Versions/A')
|
66
|
-
@fwk_path.exist?
|
67
|
-
@swift_module_path = @module_map_path + Pathname.new(@name + '.swiftmodule')
|
68
|
-
end
|
69
|
-
|
70
|
-
def make_headers
|
71
|
-
@headers_path = @versions_path + Pathname.new('Headers')
|
72
|
-
@headers_path.mkpath unless @headers_path.exist?
|
73
|
-
end
|
74
|
-
|
75
|
-
def make_resources
|
76
|
-
@resources_path = @versions_path + Pathname.new('Resources')
|
77
|
-
@resources_path.mkpath unless @resources_path.exist?
|
78
|
-
end
|
79
|
-
|
80
|
-
def make_root
|
81
|
-
@root_path = Pathname.new(File.join(@local_build_dir, @platform))
|
82
|
-
@root_path.mkpath unless @root_path.exist?
|
83
|
-
end
|
84
|
-
end
|
85
|
-
end
|
@@ -1,227 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# copy from https://github.com/CocoaPods/cocoapods-packager
|
4
|
-
|
5
|
-
require 'cocoapods-imy-bin/helpers/local/local_framework'
|
6
|
-
require 'English'
|
7
|
-
require 'cocoapods-imy-bin/config/config_builder'
|
8
|
-
require 'shellwords'
|
9
|
-
|
10
|
-
module CBin
|
11
|
-
class LocalFramework
|
12
|
-
class Builder
|
13
|
-
include Pod
|
14
|
-
#Debug下还待完成
|
15
|
-
def initialize(spec, file_accessor, platform, local_build_dir_name, local_build_dir, is_library = true, framework_BuildProductsPath = "")
|
16
|
-
@spec = spec
|
17
|
-
@file_accessor = file_accessor
|
18
|
-
@platform = platform
|
19
|
-
@local_build_dir_name = local_build_dir_name
|
20
|
-
@local_build_dir = local_build_dir
|
21
|
-
@is_library = is_library
|
22
|
-
@framework_BuildProductsPath = framework_BuildProductsPath
|
23
|
-
end
|
24
|
-
|
25
|
-
def create
|
26
|
-
begin
|
27
|
-
#如果是.a 文件, 或者 swift下,是.a文件的
|
28
|
-
if @is_library || (!@is_library && @framework_BuildProductsPath != framework_name)
|
29
|
-
|
30
|
-
UI.section("Building static library #{@spec}") do
|
31
|
-
output = framework.versions_path + Pathname.new(@spec.name)
|
32
|
-
build_static_library_for_ios(output)
|
33
|
-
res = copy_headers
|
34
|
-
# maybe fails for copy_headers
|
35
|
-
if res
|
36
|
-
copy_resources
|
37
|
-
cp_to_source_dir
|
38
|
-
else
|
39
|
-
FileUtils.remove_dir(framework.fwk_path) if File.exist?(framework.fwk_path)
|
40
|
-
return nil
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
else
|
45
|
-
UI.section("Building static framework #{@spec}") do
|
46
|
-
output = File.join(CBin::Config::Builder.instance.zip_dir,"#{@spec.name}.framework")
|
47
|
-
build_static_framework_for_ios(output)
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
rescue StandardError
|
52
|
-
UI.warn "【#{spec.name} | #{spec.version}】组件二进制版本组装失败 ."
|
53
|
-
end
|
54
|
-
|
55
|
-
framework
|
56
|
-
end
|
57
|
-
|
58
|
-
private
|
59
|
-
|
60
|
-
def cp_to_source_dir
|
61
|
-
# 删除Versions 软链接
|
62
|
-
framework.remove_current_version if CBin::Build::Utils.is_swift_module(@spec)
|
63
|
-
|
64
|
-
target_dir = File.join(CBin::Config::Builder.instance.root_dir,CBin::Config::Builder.instance.framework_file(@spec))
|
65
|
-
FileUtils.rm_rf(target_dir) if File.exist?(target_dir)
|
66
|
-
|
67
|
-
zip_dir = CBin::Config::Builder.instance.zip_dir
|
68
|
-
FileUtils.mkdir_p(zip_dir) unless File.exist?(zip_dir)
|
69
|
-
|
70
|
-
`cp -fa #{@platform}/#{CBin::Config::Builder.instance.framework_name(@spec)} #{target_dir}`
|
71
|
-
end
|
72
|
-
|
73
|
-
|
74
|
-
def copy_headers
|
75
|
-
#by slj 如果没有头文件,去 "Headers/Public"拿
|
76
|
-
# if public_headers.empty?
|
77
|
-
Dir.chdir(File.join(Pod::Config.instance.installation_root,'Pods')) do
|
78
|
-
|
79
|
-
if File.exist?("./Headers/Public/#{@spec.name}")
|
80
|
-
#走 podsepc中的public_headers
|
81
|
-
public_headers = Array.new
|
82
|
-
|
83
|
-
Dir.chdir("./Headers/Public/#{@spec.name}") do
|
84
|
-
headers = Dir.glob('*.h')
|
85
|
-
headers.each do |h|
|
86
|
-
public_headers << Pathname.new(File.join(Dir.pwd,h))
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
UI.message "Copying public headers #{public_headers.map(&:basename).map(&:to_s)}"
|
91
|
-
|
92
|
-
public_headers.each do |h|
|
93
|
-
`ditto #{h} #{framework.headers_path}/#{h.basename}`
|
94
|
-
end
|
95
|
-
|
96
|
-
# If custom 'module_map' is specified add it to the framework distribution
|
97
|
-
# otherwise check if a header exists that is equal to 'spec.name', if so
|
98
|
-
# create a default 'module_map' one using it.
|
99
|
-
if !@spec.module_map.nil?
|
100
|
-
module_map_file = @file_accessor.module_map
|
101
|
-
if Pathname(module_map_file).exist?
|
102
|
-
module_map = File.read(module_map_file)
|
103
|
-
end
|
104
|
-
elsif public_headers.map(&:basename).map(&:to_s).include?("#{@spec.name}-umbrella.h")
|
105
|
-
module_map = <<-MAP
|
106
|
-
framework module #{@spec.name} {
|
107
|
-
umbrella header "#{@spec.name}-umbrella.h"
|
108
|
-
|
109
|
-
export *
|
110
|
-
module * { export * }
|
111
|
-
}
|
112
|
-
MAP
|
113
|
-
end
|
114
|
-
|
115
|
-
unless module_map.nil?
|
116
|
-
UI.message "Writing module map #{module_map}"
|
117
|
-
unless framework.module_map_path.exist?
|
118
|
-
framework.module_map_path.mkpath
|
119
|
-
end
|
120
|
-
File.write("#{framework.module_map_path}/module.modulemap", module_map)
|
121
|
-
|
122
|
-
# unless framework.swift_module_path.exist?
|
123
|
-
# framework.swift_module_path.mkpath
|
124
|
-
# end
|
125
|
-
# DO BuildProductsPath swiftModule拷贝到 framework.swift_module_path
|
126
|
-
swiftmodule_path = File.join(@framework_BuildProductsPath, "#{@spec.name}.swiftmodule")
|
127
|
-
if File.directory?(swiftmodule_path)
|
128
|
-
FileUtils.cp_r("#{swiftmodule_path}/.", framework.swift_module_path)
|
129
|
-
end
|
130
|
-
swift_Compatibility_Header = "#{@framework_BuildProductsPath}/Swift\ Compatibility\ Header/#{@spec.name}-Swift.h"
|
131
|
-
FileUtils.cp(swift_Compatibility_Header,framework.headers_path) if File.exist?(swift_Compatibility_Header)
|
132
|
-
info_plist_file = File.join(File.dirname(File.dirname(__FILE__)),"info.plist")
|
133
|
-
FileUtils.cp(info_plist_file,framework.fwk_path)
|
134
|
-
end
|
135
|
-
else
|
136
|
-
UI.warn "== Headers/Public/#{@spec.name} no exist"
|
137
|
-
return false
|
138
|
-
end
|
139
|
-
|
140
|
-
end
|
141
|
-
return true
|
142
|
-
end
|
143
|
-
|
144
|
-
def copy_resources
|
145
|
-
|
146
|
-
|
147
|
-
Dir.chdir(Pod::Config.instance.sandbox_root) do
|
148
|
-
|
149
|
-
bundles = Dir.glob('./build/*.bundle')
|
150
|
-
|
151
|
-
bundle_names = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
|
152
|
-
consumer = spec.consumer(@platform)
|
153
|
-
consumer.resource_bundles.keys +
|
154
|
-
consumer.resources.map do |r|
|
155
|
-
File.basename(r, '.bundle') if File.extname(r) == 'bundle'
|
156
|
-
end
|
157
|
-
end.compact.uniq
|
158
|
-
|
159
|
-
bundles.select! do |bundle|
|
160
|
-
bundle_name = File.basename(bundle, '.bundle')
|
161
|
-
bundle_names.include?(bundle_name)
|
162
|
-
end
|
163
|
-
|
164
|
-
if bundles.count > 0
|
165
|
-
UI.message "Copying bundle files #{bundles}"
|
166
|
-
bundle_files = bundles.join(' ')
|
167
|
-
`cp -rp #{bundle_files} #{framework.resources_path} 2>&1`
|
168
|
-
end
|
169
|
-
|
170
|
-
real_source_dir = @spec.name
|
171
|
-
resources = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
|
172
|
-
expand_paths(real_source_dir, spec.consumer(@platform).resources)
|
173
|
-
end.compact.uniq
|
174
|
-
|
175
|
-
if (resources.count == 0 || (resources.count == 1 && resources[0].count == 0)) && bundles.count == 0
|
176
|
-
framework.delete_resources
|
177
|
-
return
|
178
|
-
end
|
179
|
-
|
180
|
-
if resources.count > 0
|
181
|
-
#把 路径转义。 避免空格情况下拷贝失败
|
182
|
-
escape_resource = []
|
183
|
-
resources.each do |source|
|
184
|
-
escape_resource << Shellwords.join(source)
|
185
|
-
end
|
186
|
-
UI.message "Copying resources #{escape_resource}"
|
187
|
-
`cp -rp #{escape_resource.join(' ')} #{framework.resources_path}`
|
188
|
-
end
|
189
|
-
|
190
|
-
end
|
191
|
-
|
192
|
-
end
|
193
|
-
|
194
|
-
|
195
|
-
def build_static_library_for_ios(output)
|
196
|
-
`cp -rp #{library_name} #{output}`
|
197
|
-
end
|
198
|
-
|
199
|
-
def build_static_framework_for_ios(output)
|
200
|
-
FileUtils.cp_r(framework_name, output)
|
201
|
-
end
|
202
|
-
|
203
|
-
def library_name
|
204
|
-
File.join(@local_build_dir, "lib#{@spec.name}.a")
|
205
|
-
end
|
206
|
-
|
207
|
-
def framework_name
|
208
|
-
File.join(@local_build_dir, "#{@spec.name}.framework")
|
209
|
-
end
|
210
|
-
|
211
|
-
def expand_paths(source_dir, path_specs)
|
212
|
-
path_specs.map do |path_spec|
|
213
|
-
Dir.glob(File.join(source_dir, path_spec))
|
214
|
-
end
|
215
|
-
end
|
216
|
-
|
217
|
-
def framework
|
218
|
-
@framework ||= begin
|
219
|
-
framework = CBin::LocalFramework.new(@spec.name, @platform.name.to_s,@local_build_dir)
|
220
|
-
framework.make
|
221
|
-
framework
|
222
|
-
end
|
223
|
-
end
|
224
|
-
|
225
|
-
end
|
226
|
-
end
|
227
|
-
end
|
@@ -1,92 +0,0 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
# copy from https://github.com/CocoaPods/cocoapods-packager
|
5
|
-
|
6
|
-
require 'cocoapods-imy-bin/helpers/framework.rb'
|
7
|
-
require 'cocoapods-imy-bin/helpers/library.rb'
|
8
|
-
|
9
|
-
require 'English'
|
10
|
-
|
11
|
-
module CBin
|
12
|
-
class LocalLibrary
|
13
|
-
class Builder
|
14
|
-
include Pod
|
15
|
-
|
16
|
-
def initialize(spec, file_accessor, platform, source_dir,framework_path)
|
17
|
-
@spec = spec
|
18
|
-
@source_dir = source_dir
|
19
|
-
@file_accessor = file_accessor
|
20
|
-
@platform = platform
|
21
|
-
@framework = framework_path
|
22
|
-
@source_files = "#{@source_dir}/#{library.name_path}"
|
23
|
-
@source_zip_file = "#{@source_files}.zip"
|
24
|
-
end
|
25
|
-
|
26
|
-
def build
|
27
|
-
UI.section("Building static library #{@spec}") do
|
28
|
-
|
29
|
-
clean_source_dir
|
30
|
-
|
31
|
-
copy_headers
|
32
|
-
copy_library
|
33
|
-
copy_resources
|
34
|
-
|
35
|
-
cp_to_source_dir
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def clean_source_dir
|
42
|
-
FileUtils.rm_rf(@source_files) if File.exist?(@source_files)
|
43
|
-
FileUtils.rm_rf(@source_zip_file) if File.exist?(@source_zip_file)
|
44
|
-
end
|
45
|
-
|
46
|
-
def cp_to_source_dir
|
47
|
-
target_dir = library.versions_path
|
48
|
-
dest_file = "#{@source_dir}/#{library.name_path}"
|
49
|
-
FileUtils.rm_rf(dest_file) if File.exist?(dest_file)
|
50
|
-
|
51
|
-
`cp -fa #{target_dir} #{dest_file}/`
|
52
|
-
end
|
53
|
-
|
54
|
-
def copy_headers
|
55
|
-
FileUtils.cp_r(framework.headers_path,library.versions_path) if File.exist?(framework.headers_path)
|
56
|
-
end
|
57
|
-
|
58
|
-
def copy_library
|
59
|
-
src_file = "#{framework.versions_path}/#{@spec.name}"
|
60
|
-
unless File.exist?(src_file)
|
61
|
-
raise Informative, "framework没有文件:#{src_file}"
|
62
|
-
end
|
63
|
-
|
64
|
-
dest_file = "#{library.versions_path}/#{@spec.name}"
|
65
|
-
rename_dest_file = "#{library.versions_path}/lib#{@spec.name}.a"
|
66
|
-
FileUtils.cp_r(src_file,dest_file)
|
67
|
-
File.rename(dest_file, rename_dest_file ) if File.exist?(dest_file)
|
68
|
-
end
|
69
|
-
|
70
|
-
def copy_resources
|
71
|
-
FileUtils.cp_r(framework.resources_path,library.versions_path) if File.exist?(framework.resources_path)
|
72
|
-
end
|
73
|
-
|
74
|
-
|
75
|
-
def framework
|
76
|
-
@framework ||= begin
|
77
|
-
framework = Framework.new(@spec.name, @platform.name.to_s)
|
78
|
-
framework.make
|
79
|
-
framework
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def library
|
84
|
-
@library ||= begin
|
85
|
-
library = Library.new(@spec.name, @platform.name.to_s,@spec.version)
|
86
|
-
library.make
|
87
|
-
library
|
88
|
-
end
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|