cocoapods-imy-bin 0.2.1 → 0.2.7
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/README.md +256 -343
- data/lib/cocoapods-imy-bin/command/bin/archive.rb +9 -2
- data/lib/cocoapods-imy-bin/command/bin/auto.rb +5 -1
- data/lib/cocoapods-imy-bin/command/bin/code.rb +1 -6
- data/lib/cocoapods-imy-bin/command/bin/update.rb +15 -9
- data/lib/cocoapods-imy-bin/gem_version.rb +1 -1
- data/lib/cocoapods-imy-bin/helpers/build_helper.rb +1 -1
- data/lib/cocoapods-imy-bin/helpers/framework_builder.rb +143 -117
- metadata +7 -8
@@ -29,6 +29,7 @@ module Pod
|
|
29
29
|
['--sources', '私有源地址,多个用分号区分'],
|
30
30
|
['--framework-output', '输出framework文件'],
|
31
31
|
['--no-zip', '不压缩静态库 为 zip'],
|
32
|
+
['--configuration', 'Build the specified configuration (e.g. Debug). Defaults to Release'],
|
32
33
|
['--env', "该组件上传的环境 %w[dev debug_iphoneos release_iphoneos]"]
|
33
34
|
].concat(Pod::Command::Gen.options).concat(super).uniq
|
34
35
|
end
|
@@ -51,6 +52,8 @@ module Pod
|
|
51
52
|
@sources = argv.option('sources') || []
|
52
53
|
@platform = Platform.new(:ios)
|
53
54
|
|
55
|
+
@config = argv.option('configuration', 'Release')
|
56
|
+
|
54
57
|
@framework_path
|
55
58
|
super
|
56
59
|
|
@@ -81,7 +84,8 @@ module Pod
|
|
81
84
|
@framework_output,
|
82
85
|
@zip,
|
83
86
|
@spec,
|
84
|
-
CBin::Config::Builder.instance.white_pod_list.include?(@spec.name)
|
87
|
+
CBin::Config::Builder.instance.white_pod_list.include?(@spec.name),
|
88
|
+
@config)
|
85
89
|
builder.build
|
86
90
|
builder.clean_workspace if @clean && !@all_make
|
87
91
|
end
|
@@ -119,7 +123,9 @@ module Pod
|
|
119
123
|
@platform,
|
120
124
|
@framework_output,
|
121
125
|
@zip,
|
122
|
-
@spec
|
126
|
+
@spec,
|
127
|
+
false ,
|
128
|
+
@config)
|
123
129
|
builder.build
|
124
130
|
rescue
|
125
131
|
fail_build_specs << spec
|
@@ -148,6 +154,7 @@ module Pod
|
|
148
154
|
"--sources=#{sources_option(@code_dependencies, @sources)}",
|
149
155
|
"--gen-directory=#{CBin::Config::Builder.instance.gen_dir}",
|
150
156
|
'--clean',
|
157
|
+
'--use-podfile',
|
151
158
|
*@additional_args
|
152
159
|
]
|
153
160
|
|
@@ -19,6 +19,7 @@ module Pod
|
|
19
19
|
['--framework-output', '输出framework文件'],
|
20
20
|
['--no-zip', '不压缩静态 framework 为 zip'],
|
21
21
|
['--all-make', '对该组件的依赖库,全部制作为二进制组件'],
|
22
|
+
['--configuration', 'Build the specified configuration (e.g. Debug). Defaults to Release'],
|
22
23
|
['--env', "该组件上传的环境 %w[dev debug_iphoneos release_iphoneos]"]
|
23
24
|
]
|
24
25
|
end
|
@@ -38,6 +39,9 @@ module Pod
|
|
38
39
|
@zip = argv.flag?('zip', true)
|
39
40
|
@all_make = argv.flag?('all-make', false )
|
40
41
|
@verbose = argv.flag?('verbose',true)
|
42
|
+
|
43
|
+
@config = argv.option('configuration', 'Release')
|
44
|
+
|
41
45
|
super
|
42
46
|
end
|
43
47
|
|
@@ -113,7 +117,7 @@ module Pod
|
|
113
117
|
if @env
|
114
118
|
argvs += ["--env=#{@env}"]
|
115
119
|
end
|
116
|
-
|
120
|
+
argvs += ["--configuration=#{@config}"]
|
117
121
|
|
118
122
|
archive = Pod::Command::Bin::Archive.new(CLAide::ARGV.new(argvs))
|
119
123
|
archive.validate!
|
@@ -83,11 +83,6 @@ module Pod
|
|
83
83
|
FileUtils.rm_rf(target_path)
|
84
84
|
|
85
85
|
find_dependency = find_dependency(name)
|
86
|
-
# 意义不大,需要可以使用--source参数 对 github-ios 仓库对做特殊处理
|
87
|
-
# if find_dependency && find_dependency.external_source[:podspec].include?(http_gitlib_GitHub_iOS_path)
|
88
|
-
# github_ios = find_dependency.external_source[:podspec]
|
89
|
-
# find_dependency.external_source[:podspec] = github_ios.gsub(http_gitlib_GitHub_iOS_path,http_gitlib_iOS_path)
|
90
|
-
# end
|
91
86
|
|
92
87
|
spec = fetch_external_source(find_dependency, @config.podfile,@config.lockfile, @config.sandbox,true )
|
93
88
|
|
@@ -106,7 +101,6 @@ module Pod
|
|
106
101
|
break
|
107
102
|
end
|
108
103
|
end
|
109
|
-
|
110
104
|
find_dependency
|
111
105
|
end
|
112
106
|
|
@@ -150,6 +144,7 @@ module Pod
|
|
150
144
|
FileUtils.rm_rf(File.join(dir,basename))
|
151
145
|
`ln -s #{target_path} #{dir}/#{basename}`
|
152
146
|
end
|
147
|
+
|
153
148
|
check(lib_file,dir,basename)
|
154
149
|
end
|
155
150
|
|
@@ -73,26 +73,31 @@ module Pod
|
|
73
73
|
|
74
74
|
podfile.instance_eval do
|
75
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
|
+
|
76
88
|
# 在target把local-target中到dependencies值删除了,再设置
|
77
89
|
# 把本地和原始到dependencies 合并,设置dependencies
|
78
90
|
local_podfile&.target_definition_list&.each do |local_target|
|
79
91
|
next if local_target.name == 'Pods'
|
80
92
|
|
81
93
|
target_definition_list.each do |target|
|
94
|
+
|
82
95
|
unless target.name == local_target.name &&
|
83
96
|
(local_target.to_hash['dependencies'] &&local_target.to_hash['dependencies'].any?)
|
84
97
|
next
|
85
98
|
end
|
86
99
|
|
87
|
-
|
88
|
-
if local_podfile.plugins.any?
|
89
|
-
hash_plugins = podfile.plugins || {}
|
90
|
-
hash_plugins = hash_plugins.merge(local_podfile.plugins)
|
91
|
-
set_hash_value(%w[plugins].first, hash_plugins)
|
92
|
-
end
|
93
|
-
# 加入源码白名单,避免本地库被二进制了
|
94
|
-
podfile.set_use_source_pods(local_podfile.use_source_pods) if local_podfile.use_source_pods
|
95
|
-
podfile.use_binaries!(local_podfile.use_binaries?)
|
100
|
+
|
96
101
|
|
97
102
|
target.instance_exec do
|
98
103
|
# 在target把local-target中到dependencies值删除了,再设置
|
@@ -126,6 +131,7 @@ module Pod
|
|
126
131
|
|
127
132
|
end
|
128
133
|
end
|
134
|
+
|
129
135
|
end
|
130
136
|
|
131
137
|
if local_pre_install_callback
|
@@ -51,7 +51,7 @@ module CBin
|
|
51
51
|
source_dir = Dir.pwd
|
52
52
|
file_accessor = Sandbox::FileAccessor.new(Pathname.new('.').expand_path, @spec.consumer(@platform))
|
53
53
|
Dir.chdir(workspace_directory) do
|
54
|
-
builder = CBin::Framework::Builder.new(@spec, file_accessor, @platform, source_dir
|
54
|
+
builder = CBin::Framework::Builder.new(@spec, file_accessor, @platform, source_dir, @isRootSpec, @build_model )
|
55
55
|
@@build_defines = builder.build if @isRootSpec
|
56
56
|
begin
|
57
57
|
@framework_path = builder.lipo_build(@@build_defines) unless @skip_archive
|
@@ -38,7 +38,7 @@ module CBin
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def lipo_build(defines)
|
41
|
-
UI.section("Building static
|
41
|
+
UI.section("Building static Library #{@spec}") do
|
42
42
|
# defines = compile
|
43
43
|
|
44
44
|
# build_sim_libraries(defines)
|
@@ -68,118 +68,22 @@ module CBin
|
|
68
68
|
`cp -fa #{@platform}/#{framework_name} #{target_dir}`
|
69
69
|
end
|
70
70
|
|
71
|
+
#模拟器,目前只支持 debug x86-64
|
71
72
|
def build_sim_libraries(defines)
|
72
73
|
UI.message 'Building simulator libraries'
|
73
74
|
|
74
75
|
if is_debug_model
|
75
76
|
# archs = %w[i386 x86_64]
|
76
|
-
archs =
|
77
|
+
archs = ios_architectures_sim
|
77
78
|
archs.map do |arch|
|
78
79
|
xcodebuild(defines, "-sdk iphonesimulator ARCHS=\'#{arch}\' ", "build-#{arch}","Debug")
|
79
80
|
end
|
80
81
|
else
|
81
|
-
xcodebuild(defines, "-sdk iphonesimulator ", 'build-simulator')
|
82
|
+
xcodebuild(defines, "-sdk iphonesimulator ", 'build-simulator', "Release")
|
82
83
|
end
|
83
84
|
|
84
85
|
end
|
85
86
|
|
86
|
-
def copy_headers
|
87
|
-
#走 podsepc中的public_headers
|
88
|
-
public_headers = Array.new
|
89
|
-
|
90
|
-
#by slj 如果没有头文件,去 "Headers/Public"拿
|
91
|
-
# if public_headers.empty?
|
92
|
-
Dir.chdir("./Headers/Public/#{@spec.name}") do
|
93
|
-
headers = Dir.glob('*.h')
|
94
|
-
headers.each do |h|
|
95
|
-
public_headers << Pathname.new(File.join(Dir.pwd,h))
|
96
|
-
end
|
97
|
-
end
|
98
|
-
# end
|
99
|
-
|
100
|
-
# UI.message "Copying public headers #{public_headers.map(&:basename).map(&:to_s)}"
|
101
|
-
|
102
|
-
public_headers.each do |h|
|
103
|
-
`ditto #{h} #{framework.headers_path}/#{h.basename}`
|
104
|
-
end
|
105
|
-
|
106
|
-
# If custom 'module_map' is specified add it to the framework distribution
|
107
|
-
# otherwise check if a header exists that is equal to 'spec.name', if so
|
108
|
-
# create a default 'module_map' one using it.
|
109
|
-
if !@spec.module_map.nil?
|
110
|
-
module_map_file = @file_accessor.module_map
|
111
|
-
if Pathname(module_map_file).exist?
|
112
|
-
module_map = File.read(module_map_file)
|
113
|
-
end
|
114
|
-
elsif public_headers.map(&:basename).map(&:to_s).include?("#{@spec.name}.h")
|
115
|
-
module_map = <<-MAP
|
116
|
-
framework module #{@spec.name} {
|
117
|
-
umbrella header "#{@spec.name}.h"
|
118
|
-
|
119
|
-
export *
|
120
|
-
module * { export * }
|
121
|
-
}
|
122
|
-
MAP
|
123
|
-
end
|
124
|
-
|
125
|
-
unless module_map.nil?
|
126
|
-
UI.message "Writing module map #{module_map}"
|
127
|
-
unless framework.module_map_path.exist?
|
128
|
-
framework.module_map_path.mkpath
|
129
|
-
end
|
130
|
-
File.write("#{framework.module_map_path}/module.modulemap", module_map)
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
def copy_license
|
135
|
-
UI.message 'Copying license'
|
136
|
-
license_file = @spec.license[:file] || 'LICENSE'
|
137
|
-
`cp "#{license_file}" .` if Pathname(license_file).exist?
|
138
|
-
end
|
139
|
-
|
140
|
-
def copy_resources
|
141
|
-
|
142
|
-
bundles = Dir.glob('./build/*.bundle')
|
143
|
-
|
144
|
-
bundle_names = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
|
145
|
-
consumer = spec.consumer(@platform)
|
146
|
-
consumer.resource_bundles.keys +
|
147
|
-
consumer.resources.map do |r|
|
148
|
-
File.basename(r, '.bundle') if File.extname(r) == 'bundle'
|
149
|
-
end
|
150
|
-
end.compact.uniq
|
151
|
-
|
152
|
-
bundles.select! do |bundle|
|
153
|
-
bundle_name = File.basename(bundle, '.bundle')
|
154
|
-
bundle_names.include?(bundle_name)
|
155
|
-
end
|
156
|
-
|
157
|
-
if bundles.count > 0
|
158
|
-
UI.message "Copying bundle files #{bundles}"
|
159
|
-
bundle_files = bundles.join(' ')
|
160
|
-
`cp -rp #{bundle_files} #{framework.resources_path} 2>&1`
|
161
|
-
end
|
162
|
-
|
163
|
-
real_source_dir = @isRootSpec ? @source_dir : Pathname.new(File.join(Dir.pwd,"#{@spec.name}"))
|
164
|
-
resources = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
|
165
|
-
expand_paths(real_source_dir, spec.consumer(@platform).resources)
|
166
|
-
end.compact.uniq
|
167
|
-
|
168
|
-
if resources.count == 0 && bundles.count == 0
|
169
|
-
framework.delete_resources
|
170
|
-
return
|
171
|
-
end
|
172
|
-
|
173
|
-
if resources.count > 0
|
174
|
-
#把 路径转义。 避免空格情况下拷贝失败
|
175
|
-
escape_resource = []
|
176
|
-
resources.each do |source|
|
177
|
-
escape_resource << Shellwords.join(source)
|
178
|
-
end
|
179
|
-
UI.message "Copying resources #{escape_resource}"
|
180
|
-
`cp -rp #{escape_resource.join(' ')} #{framework.resources_path}`
|
181
|
-
end
|
182
|
-
end
|
183
87
|
|
184
88
|
def static_libs_in_sandbox(build_dir = 'build')
|
185
89
|
file = Dir.glob("#{build_dir}/lib#{target_name}.a")
|
@@ -194,21 +98,32 @@ module CBin
|
|
194
98
|
static_libs = static_libs_in_sandbox('build') + static_libs_in_sandbox('build-simulator') + @vendored_libraries
|
195
99
|
if is_debug_model
|
196
100
|
ios_architectures.map do |arch|
|
197
|
-
static_libs += static_libs_in_sandbox("build-#{arch}") +
|
101
|
+
static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
|
102
|
+
end
|
103
|
+
ios_architectures_sim do |arch|
|
104
|
+
static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
|
198
105
|
end
|
199
106
|
end
|
200
107
|
|
201
108
|
build_path = Pathname("build")
|
202
109
|
build_path.mkpath unless build_path.exist?
|
203
110
|
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
111
|
+
if is_debug_model
|
112
|
+
libs = (ios_architectures + ios_architectures_sim) .map do |arch|
|
113
|
+
library = "build-#{arch}/lib#{@spec.name}.a"
|
114
|
+
library
|
115
|
+
end
|
116
|
+
else
|
117
|
+
libs = ios_architectures.map do |arch|
|
118
|
+
library = "build/package-#{@spec.name}-#{arch}.a"
|
119
|
+
# libtool -arch_only arm64 -static -o build/package-armv64.a build/libIMYFoundation.a build-simulator/libIMYFoundation.a
|
120
|
+
# 从liBFoundation.a 文件中,提取出 arm64 架构的文件,命名为build/package-armv64.a
|
121
|
+
UI.message "libtool -arch_only #{arch} -static -o #{library} #{static_libs.join(' ')}"
|
122
|
+
`libtool -arch_only #{arch} -static -o #{library} #{static_libs.join(' ')}`
|
123
|
+
library
|
124
|
+
end
|
211
125
|
end
|
126
|
+
|
212
127
|
UI.message "lipo -create -output #{output} #{libs.join(' ')}"
|
213
128
|
`lipo -create -output #{output} #{libs.join(' ')}`
|
214
129
|
end
|
@@ -230,11 +145,18 @@ module CBin
|
|
230
145
|
# iphone5,iphone5s以下的模拟器
|
231
146
|
# >x86_64
|
232
147
|
# iphone6以上的模拟器
|
233
|
-
archs = %w[
|
148
|
+
archs = %w[arm64 armv7]
|
234
149
|
# archs = %w[x86_64 arm64 armv7s i386]
|
235
|
-
@vendored_libraries.each do |library|
|
236
|
-
|
237
|
-
end
|
150
|
+
# @vendored_libraries.each do |library|
|
151
|
+
# archs = `lipo -info #{library}`.split & archs
|
152
|
+
# end
|
153
|
+
archs
|
154
|
+
end
|
155
|
+
|
156
|
+
def ios_architectures_sim
|
157
|
+
|
158
|
+
archs = %w[x86_64]
|
159
|
+
# TODO 处理是否需要 i386
|
238
160
|
archs
|
239
161
|
end
|
240
162
|
|
@@ -245,7 +167,7 @@ module CBin
|
|
245
167
|
|
246
168
|
options = ios_build_options
|
247
169
|
if is_debug_model
|
248
|
-
archs =
|
170
|
+
archs = ios_architectures
|
249
171
|
# archs = %w[arm64 armv7 armv7s]
|
250
172
|
archs.map do |arch|
|
251
173
|
xcodebuild(defines, "ARCHS=\'#{arch}\' OTHER_CFLAGS=\'-fembed-bitcode -Qunused-arguments\'","build-#{arch}",@build_model)
|
@@ -271,10 +193,14 @@ module CBin
|
|
271
193
|
# end
|
272
194
|
end
|
273
195
|
|
274
|
-
def xcodebuild(defines = '', args = '', build_dir = 'build',build_model = '
|
275
|
-
|
276
|
-
|
277
|
-
|
196
|
+
def xcodebuild(defines = '', args = '', build_dir = 'build',build_model = 'Debug')
|
197
|
+
|
198
|
+
unless File.exist?("Pods.xcodeproj") #cocoapods-generate v2.0.0
|
199
|
+
command = "xcodebuild #{defines} #{args} CONFIGURATION_BUILD_DIR=#{File.join(File.expand_path("..", build_dir), File.basename(build_dir))} clean build -configuration #{build_model} -target #{target_name} -project ./Pods/Pods.xcodeproj 2>&1"
|
200
|
+
else
|
201
|
+
command = "xcodebuild #{defines} #{args} CONFIGURATION_BUILD_DIR=#{build_dir} clean build -configuration #{build_model} -target #{target_name} -project ./Pods.xcodeproj 2>&1"
|
202
|
+
end
|
203
|
+
|
278
204
|
UI.message "command = #{command}"
|
279
205
|
output = `#{command}`.lines.to_a
|
280
206
|
|
@@ -289,6 +215,104 @@ module CBin
|
|
289
215
|
end
|
290
216
|
end
|
291
217
|
|
218
|
+
def copy_headers
|
219
|
+
#走 podsepc中的public_headers
|
220
|
+
public_headers = Array.new
|
221
|
+
|
222
|
+
#by slj 如果没有头文件,去 "Headers/Public"拿
|
223
|
+
# if public_headers.empty?
|
224
|
+
Dir.chdir("./Headers/Public/#{@spec.name}") do
|
225
|
+
headers = Dir.glob('*.h')
|
226
|
+
headers.each do |h|
|
227
|
+
public_headers << Pathname.new(File.join(Dir.pwd,h))
|
228
|
+
end
|
229
|
+
end
|
230
|
+
# end
|
231
|
+
|
232
|
+
# UI.message "Copying public headers #{public_headers.map(&:basename).map(&:to_s)}"
|
233
|
+
|
234
|
+
public_headers.each do |h|
|
235
|
+
`ditto #{h} #{framework.headers_path}/#{h.basename}`
|
236
|
+
end
|
237
|
+
|
238
|
+
# If custom 'module_map' is specified add it to the framework distribution
|
239
|
+
# otherwise check if a header exists that is equal to 'spec.name', if so
|
240
|
+
# create a default 'module_map' one using it.
|
241
|
+
if !@spec.module_map.nil?
|
242
|
+
module_map_file = @file_accessor.module_map
|
243
|
+
if Pathname(module_map_file).exist?
|
244
|
+
module_map = File.read(module_map_file)
|
245
|
+
end
|
246
|
+
elsif public_headers.map(&:basename).map(&:to_s).include?("#{@spec.name}.h")
|
247
|
+
module_map = <<-MAP
|
248
|
+
framework module #{@spec.name} {
|
249
|
+
umbrella header "#{@spec.name}.h"
|
250
|
+
|
251
|
+
export *
|
252
|
+
module * { export * }
|
253
|
+
}
|
254
|
+
MAP
|
255
|
+
end
|
256
|
+
|
257
|
+
unless module_map.nil?
|
258
|
+
UI.message "Writing module map #{module_map}"
|
259
|
+
unless framework.module_map_path.exist?
|
260
|
+
framework.module_map_path.mkpath
|
261
|
+
end
|
262
|
+
File.write("#{framework.module_map_path}/module.modulemap", module_map)
|
263
|
+
end
|
264
|
+
end
|
265
|
+
|
266
|
+
def copy_license
|
267
|
+
UI.message 'Copying license'
|
268
|
+
license_file = @spec.license[:file] || 'LICENSE'
|
269
|
+
`cp "#{license_file}" .` if Pathname(license_file).exist?
|
270
|
+
end
|
271
|
+
|
272
|
+
def copy_resources
|
273
|
+
|
274
|
+
bundles = Dir.glob('./build/*.bundle')
|
275
|
+
|
276
|
+
bundle_names = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
|
277
|
+
consumer = spec.consumer(@platform)
|
278
|
+
consumer.resource_bundles.keys +
|
279
|
+
consumer.resources.map do |r|
|
280
|
+
File.basename(r, '.bundle') if File.extname(r) == 'bundle'
|
281
|
+
end
|
282
|
+
end.compact.uniq
|
283
|
+
|
284
|
+
bundles.select! do |bundle|
|
285
|
+
bundle_name = File.basename(bundle, '.bundle')
|
286
|
+
bundle_names.include?(bundle_name)
|
287
|
+
end
|
288
|
+
|
289
|
+
if bundles.count > 0
|
290
|
+
UI.message "Copying bundle files #{bundles}"
|
291
|
+
bundle_files = bundles.join(' ')
|
292
|
+
`cp -rp #{bundle_files} #{framework.resources_path} 2>&1`
|
293
|
+
end
|
294
|
+
|
295
|
+
real_source_dir = @isRootSpec ? @source_dir : Pathname.new(File.join(Dir.pwd,"#{@spec.name}"))
|
296
|
+
resources = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
|
297
|
+
expand_paths(real_source_dir, spec.consumer(@platform).resources)
|
298
|
+
end.compact.uniq
|
299
|
+
|
300
|
+
if resources.count == 0 && bundles.count == 0
|
301
|
+
framework.delete_resources
|
302
|
+
return
|
303
|
+
end
|
304
|
+
|
305
|
+
if resources.count > 0
|
306
|
+
#把 路径转义。 避免空格情况下拷贝失败
|
307
|
+
escape_resource = []
|
308
|
+
resources.each do |source|
|
309
|
+
escape_resource << Shellwords.join(source)
|
310
|
+
end
|
311
|
+
UI.message "Copying resources #{escape_resource}"
|
312
|
+
`cp -rp #{escape_resource.join(' ')} #{framework.resources_path}`
|
313
|
+
end
|
314
|
+
end
|
315
|
+
|
292
316
|
def expand_paths(source_dir, path_specs)
|
293
317
|
path_specs.map do |path_spec|
|
294
318
|
Dir.glob(File.join(source_dir, path_spec))
|
@@ -302,6 +326,8 @@ module CBin
|
|
302
326
|
framework
|
303
327
|
end
|
304
328
|
end
|
329
|
+
|
330
|
+
|
305
331
|
end
|
306
332
|
end
|
307
333
|
end
|