cocoapods-imy-bin 0.2.7 → 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 +4 -4
- data/README.md +0 -453
- data/lib/cocoapods-imy-bin/command/bin/archive.rb +43 -5
- data/lib/cocoapods-imy-bin/command/bin/auto.rb +22 -15
- data/lib/cocoapods-imy-bin/command/bin/dup.rb +78 -0
- data/lib/cocoapods-imy-bin/config/config.rb +1 -1
- data/lib/cocoapods-imy-bin/config/config_builder.rb +39 -2
- data/lib/cocoapods-imy-bin/gem_version.rb +1 -1
- data/lib/cocoapods-imy-bin/helpers.rb +1 -0
- data/lib/cocoapods-imy-bin/helpers/Info.plist +0 -0
- data/lib/cocoapods-imy-bin/helpers/build_helper.rb +15 -7
- data/lib/cocoapods-imy-bin/helpers/build_utils.rb +63 -0
- data/lib/cocoapods-imy-bin/helpers/framework.rb +25 -2
- data/lib/cocoapods-imy-bin/helpers/framework_builder.rb +165 -54
- data/lib/cocoapods-imy-bin/helpers/library.rb +2 -2
- data/lib/cocoapods-imy-bin/helpers/sources_helper.rb +5 -2
- data/lib/cocoapods-imy-bin/helpers/spec_source_creator.rb +65 -8
- data/lib/cocoapods-imy-bin/helpers/upload_helper.rb +8 -3
- data/lib/cocoapods-imy-bin/native.rb +4 -0
- data/lib/cocoapods-imy-bin/native/analyzer.rb +2 -0
- data/lib/cocoapods-imy-bin/native/file_accessor.rb +28 -0
- data/lib/cocoapods-imy-bin/native/installer.rb +22 -2
- data/lib/cocoapods-imy-bin/native/pod_target_installer.rb +94 -0
- data/lib/cocoapods-imy-bin/native/podfile_generator.rb +11 -2
- data/lib/cocoapods-imy-bin/native/target_validator.rb +41 -0
- data/lib/cocoapods-imy-bin/native/validator.rb +1 -38
- data/lib/cocoapods-imy-bin/source_provider_hook.rb +35 -23
- metadata +12 -12
- data/lib/cocoapods-imy-bin/command/bin/local.rb +0 -156
- data/lib/cocoapods-imy-bin/helpers/local/loca_llibrary.rb +0 -57
- data/lib/cocoapods-imy-bin/helpers/local/local_build_helper.rb +0 -146
- data/lib/cocoapods-imy-bin/helpers/local/local_framework.rb +0 -65
- data/lib/cocoapods-imy-bin/helpers/local/local_framework_builder.rb +0 -174
- data/lib/cocoapods-imy-bin/helpers/local/local_library_builder.rb +0 -92
@@ -7,6 +7,8 @@ module CBin
|
|
7
7
|
attr_reader :resources_path
|
8
8
|
attr_reader :root_path
|
9
9
|
attr_reader :versions_path
|
10
|
+
attr_reader :swift_module_path
|
11
|
+
attr_reader :fwk_path
|
10
12
|
|
11
13
|
def initialize(name, platform)
|
12
14
|
@name = name
|
@@ -22,8 +24,24 @@ module CBin
|
|
22
24
|
end
|
23
25
|
|
24
26
|
def delete_resources
|
25
|
-
Pathname.new(@resources_path).rmtree
|
26
|
-
(Pathname.new(@fwk_path) + Pathname.new('Resources')).delete
|
27
|
+
Pathname.new(@resources_path).rmtree if File.exist? (@resources_path)
|
28
|
+
(Pathname.new(@fwk_path) + Pathname.new('Resources')).delete if File.exist?(Pathname.new(@fwk_path) + Pathname.new('Resources'))
|
29
|
+
end
|
30
|
+
|
31
|
+
def remove_current_version
|
32
|
+
FileUtils.rm_f(File.join(@fwk_path,@name))
|
33
|
+
FileUtils.rm_f(File.join(@fwk_path,"Headers"))
|
34
|
+
FileUtils.rm_f(File.join(@fwk_path,"Resources"))
|
35
|
+
|
36
|
+
FileUtils.cp_r("#{@versions_path}/.", @fwk_path)
|
37
|
+
# FileUtils.remove_dir(@versions_path)
|
38
|
+
FileUtils.remove_dir("#{@fwk_path}/Versions")
|
39
|
+
|
40
|
+
# current_version_path = @versions_path + Pathname.new('../Current')
|
41
|
+
# `ln -sf A #{current_version_path}`
|
42
|
+
# `ln -sf Versions/Current/Headers #{@fwk_path}/`
|
43
|
+
# `ln -sf Versions/Current/Resources #{@fwk_path}/`
|
44
|
+
# `ln -sf Versions/Current/#{@name} #{@fwk_path}/`
|
27
45
|
end
|
28
46
|
|
29
47
|
private
|
@@ -36,11 +54,16 @@ module CBin
|
|
36
54
|
`ln -sf Versions/Current/#{@name} #{@fwk_path}/`
|
37
55
|
end
|
38
56
|
|
57
|
+
|
58
|
+
|
39
59
|
def make_framework
|
40
60
|
@fwk_path = @root_path + Pathname.new(@name + '.framework')
|
41
61
|
@fwk_path.mkdir unless @fwk_path.exist?
|
42
62
|
|
43
63
|
@module_map_path = @fwk_path + Pathname.new('Modules')
|
64
|
+
@swift_module_path = @module_map_path + Pathname.new(@name + '.swiftmodule')
|
65
|
+
|
66
|
+
|
44
67
|
@versions_path = @fwk_path + Pathname.new('Versions/A')
|
45
68
|
end
|
46
69
|
|
@@ -4,13 +4,14 @@ require 'cocoapods-imy-bin/helpers/framework.rb'
|
|
4
4
|
require 'English'
|
5
5
|
require 'cocoapods-imy-bin/config/config_builder'
|
6
6
|
require 'shellwords'
|
7
|
+
require 'cocoapods-imy-bin/helpers/build_utils'
|
7
8
|
|
8
9
|
module CBin
|
9
10
|
class Framework
|
10
11
|
class Builder
|
11
12
|
include Pod
|
12
13
|
#Debug下还待完成
|
13
|
-
def initialize(spec, file_accessor, platform, source_dir, isRootSpec = true, build_model="
|
14
|
+
def initialize(spec, file_accessor, platform, source_dir, isRootSpec = true, build_model="Debug")
|
14
15
|
@spec = spec
|
15
16
|
@source_dir = source_dir
|
16
17
|
@file_accessor = file_accessor
|
@@ -38,26 +39,54 @@ module CBin
|
|
38
39
|
end
|
39
40
|
|
40
41
|
def lipo_build(defines)
|
41
|
-
UI.section("Building static Library #{@spec}") do
|
42
|
-
# defines = compile
|
43
42
|
|
44
|
-
|
45
|
-
|
43
|
+
if CBin::Build::Utils.is_swift_module(@spec) || !CBin::Build::Utils.uses_frameworks?
|
44
|
+
UI.section("Building static Library #{@spec}") do
|
45
|
+
# defines = compile
|
46
46
|
|
47
|
-
|
47
|
+
# build_sim_libraries(defines)
|
48
|
+
output = framework.versions_path + Pathname.new(@spec.name)
|
48
49
|
|
49
|
-
|
50
|
-
copy_license
|
51
|
-
copy_resources
|
50
|
+
build_static_library_for_ios(output)
|
52
51
|
|
53
|
-
|
52
|
+
copy_headers
|
53
|
+
copy_license
|
54
|
+
copy_resources
|
55
|
+
|
56
|
+
cp_to_source_dir
|
57
|
+
end
|
58
|
+
else
|
59
|
+
# begin
|
60
|
+
UI.section("Building framework #{@spec}") do
|
61
|
+
# defines = compile
|
62
|
+
|
63
|
+
# build_sim_libraries(defines)
|
64
|
+
output = framework.fwk_path + Pathname.new(@spec.name)
|
65
|
+
|
66
|
+
copy_static_framework_dir_for_ios
|
67
|
+
|
68
|
+
build_static_framework_machO_for_ios(output)
|
69
|
+
|
70
|
+
# copy_license
|
71
|
+
copy_framework_resources
|
72
|
+
|
73
|
+
#cp_to_source_dir#
|
74
|
+
|
75
|
+
# rescue Object => exception
|
76
|
+
# UI.puts exception
|
77
|
+
# end
|
78
|
+
end
|
54
79
|
end
|
80
|
+
|
55
81
|
framework
|
56
82
|
end
|
57
83
|
|
58
84
|
private
|
59
85
|
|
60
86
|
def cp_to_source_dir
|
87
|
+
# 删除Versions 软链接
|
88
|
+
framework.remove_current_version if CBin::Build::Utils.is_swift_module(@spec)
|
89
|
+
|
61
90
|
framework_name = "#{@spec.name}.framework"
|
62
91
|
target_dir = File.join(CBin::Config::Builder.instance.zip_dir,framework_name)
|
63
92
|
FileUtils.rm_rf(target_dir) if File.exist?(target_dir)
|
@@ -72,14 +101,10 @@ module CBin
|
|
72
101
|
def build_sim_libraries(defines)
|
73
102
|
UI.message 'Building simulator libraries'
|
74
103
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
xcodebuild(defines, "-sdk iphonesimulator ARCHS=\'#{arch}\' ", "build-#{arch}","Debug")
|
80
|
-
end
|
81
|
-
else
|
82
|
-
xcodebuild(defines, "-sdk iphonesimulator ", 'build-simulator', "Release")
|
104
|
+
# archs = %w[i386 x86_64]
|
105
|
+
archs = ios_architectures_sim
|
106
|
+
archs.map do |arch|
|
107
|
+
xcodebuild(defines, "-sdk iphonesimulator ARCHS=\'#{arch}\' ", "build-#{arch}",@build_model)
|
83
108
|
end
|
84
109
|
|
85
110
|
end
|
@@ -96,32 +121,20 @@ module CBin
|
|
96
121
|
def build_static_library_for_ios(output)
|
97
122
|
UI.message "Building ios libraries with archs #{ios_architectures}"
|
98
123
|
static_libs = static_libs_in_sandbox('build') + static_libs_in_sandbox('build-simulator') + @vendored_libraries
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
end
|
124
|
+
|
125
|
+
ios_architectures.map do |arch|
|
126
|
+
static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
|
127
|
+
end
|
128
|
+
ios_architectures_sim do |arch|
|
129
|
+
static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
|
106
130
|
end
|
107
131
|
|
108
132
|
build_path = Pathname("build")
|
109
133
|
build_path.mkpath unless build_path.exist?
|
110
134
|
|
111
|
-
|
112
|
-
|
113
|
-
|
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
|
135
|
+
libs = (ios_architectures + ios_architectures_sim) .map do |arch|
|
136
|
+
library = "build-#{arch}/lib#{@spec.name}.a"
|
137
|
+
library
|
125
138
|
end
|
126
139
|
|
127
140
|
UI.message "lipo -create -output #{output} #{libs.join(' ')}"
|
@@ -166,15 +179,15 @@ module CBin
|
|
166
179
|
defines += @spec.consumer(@platform).compiler_flags.join(' ')
|
167
180
|
|
168
181
|
options = ios_build_options
|
169
|
-
if is_debug_model
|
182
|
+
# if is_debug_model
|
170
183
|
archs = ios_architectures
|
171
184
|
# archs = %w[arm64 armv7 armv7s]
|
172
185
|
archs.map do |arch|
|
173
186
|
xcodebuild(defines, "ARCHS=\'#{arch}\' OTHER_CFLAGS=\'-fembed-bitcode -Qunused-arguments\'","build-#{arch}",@build_model)
|
174
187
|
end
|
175
|
-
else
|
176
|
-
xcodebuild(defines,options)
|
177
|
-
end
|
188
|
+
# else
|
189
|
+
# xcodebuild(defines,options)
|
190
|
+
# end
|
178
191
|
|
179
192
|
defines
|
180
193
|
end
|
@@ -186,14 +199,14 @@ module CBin
|
|
186
199
|
def target_name
|
187
200
|
#区分多平台,如配置了多平台,会带上平台的名字
|
188
201
|
# 如libwebp-iOS
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
202
|
+
if @spec.available_platforms.count > 1
|
203
|
+
"#{@spec.name}-#{Platform.string_name(@spec.consumer(@platform).platform_name)}"
|
204
|
+
else
|
205
|
+
@spec.name
|
206
|
+
end
|
194
207
|
end
|
195
208
|
|
196
|
-
def xcodebuild(defines = '', args = '', build_dir = 'build',build_model = 'Debug')
|
209
|
+
def xcodebuild(defines = '', args = '', build_dir = 'build', build_model = 'Debug')
|
197
210
|
|
198
211
|
unless File.exist?("Pods.xcodeproj") #cocoapods-generate v2.0.0
|
199
212
|
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"
|
@@ -221,7 +234,12 @@ module CBin
|
|
221
234
|
|
222
235
|
#by slj 如果没有头文件,去 "Headers/Public"拿
|
223
236
|
# if public_headers.empty?
|
224
|
-
|
237
|
+
spec_header_dir = "./Headers/Public/#{@spec.name}"
|
238
|
+
unless File.exist?(spec_header_dir)
|
239
|
+
spec_header_dir = "./Pods/Headers/Public/#{@spec.name}"
|
240
|
+
end
|
241
|
+
raise "copy_headers #{spec_header_dir} no exist " unless File.exist?(spec_header_dir)
|
242
|
+
Dir.chdir(spec_header_dir) do
|
225
243
|
headers = Dir.glob('*.h')
|
226
244
|
headers.each do |h|
|
227
245
|
public_headers << Pathname.new(File.join(Dir.pwd,h))
|
@@ -243,10 +261,10 @@ module CBin
|
|
243
261
|
if Pathname(module_map_file).exist?
|
244
262
|
module_map = File.read(module_map_file)
|
245
263
|
end
|
246
|
-
elsif public_headers.map(&:basename).map(&:to_s).include?("#{@spec.name}.h")
|
264
|
+
elsif public_headers.map(&:basename).map(&:to_s).include?("#{@spec.name}-umbrella.h")
|
247
265
|
module_map = <<-MAP
|
248
266
|
framework module #{@spec.name} {
|
249
|
-
umbrella header "#{@spec.name}.h"
|
267
|
+
umbrella header "#{@spec.name}-umbrella.h"
|
250
268
|
|
251
269
|
export *
|
252
270
|
module * { export * }
|
@@ -260,9 +278,29 @@ module CBin
|
|
260
278
|
framework.module_map_path.mkpath
|
261
279
|
end
|
262
280
|
File.write("#{framework.module_map_path}/module.modulemap", module_map)
|
281
|
+
|
282
|
+
# unless framework.swift_module_path.exist?
|
283
|
+
# framework.swift_module_path.mkpath
|
284
|
+
# end
|
285
|
+
# todo 所有架构的swiftModule拷贝到 framework.swift_module_path
|
286
|
+
archs = ios_architectures + ios_architectures_sim
|
287
|
+
archs.map do |arch|
|
288
|
+
swift_module = "build-#{arch}/#{@spec.name}.swiftmodule"
|
289
|
+
if File.directory?(swift_module)
|
290
|
+
FileUtils.cp_r("#{swift_module}/.", framework.swift_module_path)
|
291
|
+
end
|
292
|
+
end
|
293
|
+
swift_Compatibility_Header = "build-#{archs.first}/Swift\ Compatibility\ Header/#{@spec.name}-Swift.h"
|
294
|
+
FileUtils.cp(swift_Compatibility_Header,framework.headers_path) if File.exist?(swift_Compatibility_Header)
|
295
|
+
info_plist_file = File.join(File.dirname(__FILE__),"info.plist")
|
296
|
+
FileUtils.cp(info_plist_file,framework.fwk_path)
|
263
297
|
end
|
264
298
|
end
|
265
299
|
|
300
|
+
def copy_swift_header
|
301
|
+
|
302
|
+
end
|
303
|
+
|
266
304
|
def copy_license
|
267
305
|
UI.message 'Copying license'
|
268
306
|
license_file = @spec.license[:file] || 'LICENSE'
|
@@ -270,8 +308,11 @@ module CBin
|
|
270
308
|
end
|
271
309
|
|
272
310
|
def copy_resources
|
311
|
+
resource_dir = './build/*.bundle'
|
312
|
+
resource_dir = './build-armv7/*.bundle' if File.exist?('./build-armv7')
|
313
|
+
resource_dir = './build-arm64/*.bundle' if File.exist?('./build-arm64')
|
273
314
|
|
274
|
-
bundles = Dir.glob(
|
315
|
+
bundles = Dir.glob(resource_dir)
|
275
316
|
|
276
317
|
bundle_names = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
|
277
318
|
consumer = spec.consumer(@platform)
|
@@ -292,7 +333,18 @@ module CBin
|
|
292
333
|
`cp -rp #{bundle_files} #{framework.resources_path} 2>&1`
|
293
334
|
end
|
294
335
|
|
295
|
-
real_source_dir = @
|
336
|
+
real_source_dir = @source_dir
|
337
|
+
unless @isRootSpec
|
338
|
+
spec_source_dir = File.join(Dir.pwd,"#{@spec.name}")
|
339
|
+
unless File.exist?(spec_source_dir)
|
340
|
+
spec_source_dir = File.join(Dir.pwd,"Pods/#{@spec.name}")
|
341
|
+
end
|
342
|
+
raise "copy_resources #{spec_source_dir} no exist " unless File.exist?(spec_source_dir)
|
343
|
+
|
344
|
+
spec_source_dir = File.join(Dir.pwd,"#{@spec.name}")
|
345
|
+
real_source_dir = spec_source_dir
|
346
|
+
end
|
347
|
+
|
296
348
|
resources = [@spec, *@spec.recursive_subspecs].flat_map do |spec|
|
297
349
|
expand_paths(real_source_dir, spec.consumer(@platform).resources)
|
298
350
|
end.compact.uniq
|
@@ -319,6 +371,65 @@ module CBin
|
|
319
371
|
end
|
320
372
|
end
|
321
373
|
|
374
|
+
#---------------------------------swift--------------------------------------#
|
375
|
+
# lipo -create .a
|
376
|
+
def build_static_framework_machO_for_ios(output)
|
377
|
+
UI.message "Building ios framework with archs #{ios_architectures}"
|
378
|
+
|
379
|
+
static_libs = static_libs_in_sandbox('build') + @vendored_libraries
|
380
|
+
ios_architectures.map do |arch|
|
381
|
+
static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
|
382
|
+
end
|
383
|
+
|
384
|
+
ios_architectures_sim do |arch|
|
385
|
+
static_libs += static_libs_in_sandbox("build-#{arch}") + @vendored_libraries
|
386
|
+
end
|
387
|
+
|
388
|
+
build_path = Pathname("build")
|
389
|
+
build_path.mkpath unless build_path.exist?
|
390
|
+
|
391
|
+
libs = (ios_architectures + ios_architectures_sim) .map do |arch|
|
392
|
+
library = "build-#{arch}/#{@spec.name}.framework/#{@spec.name}"
|
393
|
+
library
|
394
|
+
end
|
395
|
+
|
396
|
+
UI.message "lipo -create -output #{output} #{libs.join(' ')}"
|
397
|
+
`lipo -create -output #{output} #{libs.join(' ')}`
|
398
|
+
end
|
399
|
+
|
400
|
+
def copy_static_framework_dir_for_ios
|
401
|
+
|
402
|
+
archs = ios_architectures + ios_architectures_sim
|
403
|
+
framework_dir = "build-#{ios_architectures_sim.first}/#{@spec.name}.framework"
|
404
|
+
framework_dir = "build-#{ios_architectures.first}/#{@spec.name}.framework" unless File.exist?(framework_dir)
|
405
|
+
unless File.exist?(framework_dir)
|
406
|
+
raise "#{framework_dir} path no exist"
|
407
|
+
end
|
408
|
+
File.join(Dir.pwd, "build-#{ios_architectures_sim.first}/#{@spec.name}.framework")
|
409
|
+
FileUtils.cp_r(framework_dir, framework.root_path)
|
410
|
+
|
411
|
+
# todo 所有架构的swiftModule拷贝到 framework.swift_module_path
|
412
|
+
archs.map do |arch|
|
413
|
+
swift_module = "build-#{arch}/#{@spec.name}.framework/Modules/#{@spec.name}.swiftmodule"
|
414
|
+
if File.directory?(swift_module)
|
415
|
+
FileUtils.cp_r("#{swift_module}/.", framework.swift_module_path)
|
416
|
+
end
|
417
|
+
end
|
418
|
+
|
419
|
+
# 删除Versions 软链接
|
420
|
+
framework.remove_current_version
|
421
|
+
end
|
422
|
+
|
423
|
+
def copy_framework_resources
|
424
|
+
resources = Dir.glob("#{framework.fwk_path + Pathname.new('Resources')}/*")
|
425
|
+
if resources.count == 0
|
426
|
+
framework.delete_resources
|
427
|
+
end
|
428
|
+
end
|
429
|
+
|
430
|
+
|
431
|
+
#---------------------------------getter and setter--------------------------------------#
|
432
|
+
|
322
433
|
def framework
|
323
434
|
@framework ||= begin
|
324
435
|
framework = Framework.new(@spec.name, @platform.name.to_s)
|
@@ -38,12 +38,12 @@ module CBin
|
|
38
38
|
|
39
39
|
def make_headers
|
40
40
|
@headers_path = @versions_path + Pathname.new('Headers')
|
41
|
-
|
41
|
+
@headers_path.mkpath unless @headers_path.exist?
|
42
42
|
end
|
43
43
|
|
44
44
|
def make_resources
|
45
45
|
@resources_path = @versions_path + Pathname.new('Resources')
|
46
|
-
|
46
|
+
@resources_path.mkpath unless @resources_path.exist?
|
47
47
|
end
|
48
48
|
|
49
49
|
def make_root
|
@@ -21,8 +21,11 @@ module CBin
|
|
21
21
|
# 只允许二进制的 specification subspec 比源码的 specification subspec 多
|
22
22
|
#
|
23
23
|
def valid_sources(code_dependencies = false)
|
24
|
-
sources = [
|
25
|
-
|
24
|
+
sources = [code_source]
|
25
|
+
unless code_dependencies
|
26
|
+
sources << binary_source
|
27
|
+
sources.reverse!
|
28
|
+
end
|
26
29
|
sources
|
27
30
|
end
|
28
31
|
|
@@ -20,12 +20,12 @@ module CBin
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def create
|
23
|
-
spec =
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
# spec = nil
|
24
|
+
if CBin::Build::Utils.is_framework(@code_spec)
|
25
|
+
spec = create_framework_from_code_spec
|
26
|
+
else
|
27
|
+
spec = create_from_code_spec
|
28
|
+
end
|
29
29
|
|
30
30
|
spec
|
31
31
|
end
|
@@ -121,12 +121,69 @@ module CBin
|
|
121
121
|
@spec.vendored_libraries = binary_vendored_libraries
|
122
122
|
@spec.resources = binary_resources if @spec.attributes_hash.keys.include?("resources")
|
123
123
|
@spec.description = <<-EOF
|
124
|
-
「 converted automatically by plugin cocoapods-imy-bin
|
124
|
+
「 converted automatically by plugin cocoapods-imy-bin @厦门美柚 - slj 」
|
125
|
+
#{@spec.description}
|
126
|
+
EOF
|
127
|
+
@spec
|
128
|
+
end
|
129
|
+
|
130
|
+
def create_framework_from_code_spec
|
131
|
+
@spec = code_spec.dup
|
132
|
+
# vendored_frameworks | resources | source | source_files | public_header_files
|
133
|
+
# license | resource_bundles | vendored_libraries
|
134
|
+
|
135
|
+
# Project Linkin
|
136
|
+
@spec.vendored_frameworks = "#{code_spec.root.name}.framework"
|
137
|
+
|
138
|
+
# Resources
|
139
|
+
extnames = []
|
140
|
+
extnames << '*.bundle' if code_spec_consumer.resource_bundles.any?
|
141
|
+
if code_spec_consumer.resources.any?
|
142
|
+
extnames += code_spec_consumer.resources.map { |r| File.basename(r) }
|
143
|
+
end
|
144
|
+
if extnames.any?
|
145
|
+
@spec.resources = framework_contents('Resources').flat_map { |r| extnames.map { |e| "#{r}/#{e}" } }
|
146
|
+
end
|
147
|
+
|
148
|
+
# Source Location
|
149
|
+
@spec.source = binary_source
|
150
|
+
|
151
|
+
# Source Code
|
152
|
+
# @spec.source_files = framework_contents('Headers/*')
|
153
|
+
# @spec.public_header_files = framework_contents('Headers/*')
|
154
|
+
|
155
|
+
# Unused for binary
|
156
|
+
spec_hash = @spec.to_hash
|
157
|
+
# spec_hash.delete('license')
|
158
|
+
spec_hash.delete('resource_bundles')
|
159
|
+
spec_hash.delete('exclude_files')
|
160
|
+
spec_hash.delete('preserve_paths')
|
161
|
+
# 这里不确定 vendored_libraries 指定的时动态/静态库
|
162
|
+
# 如果是静态库的话,需要移除,否则就不移除
|
163
|
+
# 最好是静态库都独立成 Pod ,cocoapods-package 打静态库去 collect 目标文件时好做过滤
|
164
|
+
# 这里统一只对命名后缀 .a 文件做处理
|
165
|
+
# spec_hash.delete('vendored_libraries')
|
166
|
+
# libraries 只能假设为动态库不做处理了,如果有例外,需要开发者自行处理
|
167
|
+
vendored_libraries = spec_hash.delete('vendored_libraries')
|
168
|
+
vendored_libraries = Array(vendored_libraries).reject { |l| l.end_with?('.a') }
|
169
|
+
if vendored_libraries.any?
|
170
|
+
spec_hash['vendored_libraries'] = vendored_libraries
|
171
|
+
end
|
172
|
+
|
173
|
+
# Filter platforms
|
174
|
+
platforms = spec_hash['platforms']
|
175
|
+
selected_platforms = platforms.select { |k, _v| @platforms.include?(k) }
|
176
|
+
spec_hash['platforms'] = selected_platforms.empty? ? platforms : selected_platforms
|
177
|
+
|
178
|
+
@spec = Pod::Specification.from_hash(spec_hash)
|
179
|
+
@spec.description = <<-EOF
|
180
|
+
「 converted automatically by plugin cocoapods-imy-bin @厦门美柚 - slj 」
|
125
181
|
#{@spec.description}
|
126
|
-
EOF
|
182
|
+
EOF
|
127
183
|
@spec
|
128
184
|
end
|
129
185
|
|
186
|
+
|
130
187
|
def binary_source
|
131
188
|
{ http: format(CBin.config.binary_download_url, code_spec.root.name, code_spec.version), type: CBin.config.download_file_type }
|
132
189
|
end
|