pod-pipeline 0.5.6 → 0.5.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pod-pipeline/command/build.rb +55 -31
- data/lib/pod-pipeline/util/binary.rb +28 -13
- data/lib/pod-pipeline/util/bundle.rb +27 -12
- data/lib/pod-pipeline/util/header.rb +58 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16980dad637c15796234c1cdb4e559152e1136397d6cf860d9cc9a3d1aaecca9
|
4
|
+
data.tar.gz: 1340eb923bc0856d793cecf302e64bc34e2e3fb59dd254b0e93130bc309fa96c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1955fd51720cb745dbfcd234dbd983ce0df51a0ebcad4366f8fd61ab8a792f8cf4b51f2ddde773252820378df4347011510d9282bc5917583d94902370649aee
|
7
|
+
data.tar.gz: 16ac4680004b7ebab8e0067037d2c67df4d44fc6f0b5ba0c1d08d184a56cd781b2eac5c54d65a5f64c6bb1dcc5fae8ffacf7c720e6a0efc3bae887103dba6104
|
@@ -4,6 +4,7 @@ require 'pod-pipeline/util/scanner'
|
|
4
4
|
require 'pod-pipeline/util/xcodebuild'
|
5
5
|
require 'pod-pipeline/util/binary'
|
6
6
|
require 'pod-pipeline/util/bundle'
|
7
|
+
require 'pod-pipeline/util/header'
|
7
8
|
|
8
9
|
require 'pod-pipeline/extension/dir-ppl'
|
9
10
|
|
@@ -23,7 +24,9 @@ module PPL
|
|
23
24
|
['--configuration=Release', '项目构建的环境。(默认为Release)'],
|
24
25
|
['--arch=arm64,armv7,x86_64', '项目构建的架构。(默认为 arm64,armv7,x86_64)'],
|
25
26
|
['--combine=local,pod', '项目构建后合并依赖库的二进制文件,local为本地依赖库,pod为CocoaPods依赖库。(默认为 不合并)'],
|
26
|
-
['--combine-
|
27
|
+
['--combine-headers=false', '项目构建后合并依赖库的头文件。(默认为 不合并)'],
|
28
|
+
['--combine-include=name1,name2', '项目构建后合并依赖库的二进制文件,标注想合并的内容,执行顺序在exclude前。'],
|
29
|
+
['--combine-exclude=name1,name2', '项目构建后合并依赖库的二进制文件,标注不想合并的内容,执行顺序在include后。'],
|
27
30
|
['--bundle-merge=merge', '是否合并所有资源包,参数为合并后的资源包名。(默认为 不合并)'],
|
28
31
|
].concat(super)
|
29
32
|
end
|
@@ -34,7 +37,9 @@ module PPL
|
|
34
37
|
@configuration = argv.option('configuration', '').split(',').first
|
35
38
|
@archs = argv.option('arch', '').split(',')
|
36
39
|
@combines = argv.option('combine', '').split(',')
|
37
|
-
@
|
40
|
+
@combine_headers = argv.option('combine-headers', false)
|
41
|
+
@combine_include = argv.option('combine-include', '').split(',')
|
42
|
+
@combine_exclude = argv.option('combine-exclude', '').split(',')
|
38
43
|
@bundle_merge = argv.option('bundle-merge', '').split(',').first
|
39
44
|
|
40
45
|
@projectPath = @path.count.zero? ? Pathname.pwd.to_s : @path.first
|
@@ -65,9 +70,9 @@ module PPL
|
|
65
70
|
XCodebuild.build(@workspace.path, @podspec.name, arch, @configuration, @build_path)
|
66
71
|
end
|
67
72
|
|
68
|
-
|
69
|
-
puts "\n[
|
70
|
-
|
73
|
+
#合并头文件
|
74
|
+
puts "\n[合并 #{@combines.join(", ")} 的头文件]"
|
75
|
+
combine_headers(@combines.include?('local'), @combines.include?('pod'))
|
71
76
|
|
72
77
|
#合并二进制文件
|
73
78
|
puts "\n[合并 #{@combines.join(", ")} 的二进制文件]"
|
@@ -96,31 +101,50 @@ module PPL
|
|
96
101
|
end
|
97
102
|
|
98
103
|
def add_headers
|
99
|
-
header_stands = "#{@output}/Example/Pods/Headers/Public/#{@podspec.name}/*.h"
|
100
|
-
Dir[header_stands].each do |header_stand|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
104
|
+
# header_stands = "#{@output}/Example/Pods/Headers/Public/#{@podspec.name}/*.h"
|
105
|
+
# Dir[header_stands].each do |header_stand|
|
106
|
+
# if File.ftype(header_stand).eql? 'link'
|
107
|
+
# header_file = "#{File.dirname(header_stand)}/#{File.readlink(header_stand)}"
|
108
|
+
# if File.ftype(header_file).eql? 'file'
|
109
|
+
# header_file_basename = File.basename(header_file)
|
110
|
+
# if !(File.exist? "#{@framework_headers_path}/#{header_file_basename}")
|
111
|
+
# puts header_file_basename
|
112
|
+
# FileUtils.cp(header_file, @framework_headers_path)
|
113
|
+
# end
|
114
|
+
# end
|
115
|
+
# end
|
116
|
+
# end
|
117
|
+
# header_files = "#{@build_path}/**/#{@podspec.name}.framework/Headers/*.h"
|
118
|
+
# Dir[header_files].each do |header_file|
|
119
|
+
# if File.ftype(header_file).eql? 'file'
|
120
|
+
# header_file_basename = File.basename(header_file)
|
121
|
+
# if !(File.exist? "#{@framework_headers_path}/#{header_file_basename}")
|
122
|
+
# puts header_file_basename
|
123
|
+
# FileUtils.cp(header_file, @framework_headers_path)
|
124
|
+
# end
|
125
|
+
# end
|
126
|
+
# end
|
127
|
+
end
|
128
|
+
|
129
|
+
def combine_headers(local_dependency, pod_dependency)
|
130
|
+
headers = "#{@framework_path}/Headers"
|
131
|
+
#添加 构建生成的二进制文件
|
132
|
+
inputs = []
|
133
|
+
inputs << "#{@build_path}/*/**/#{@podspec.name}.framework"
|
134
|
+
if local_dependency
|
135
|
+
#添加 本地依赖的二进制文件
|
136
|
+
inputs << "#{@output}/#{@podspec.name}/Frameworks/**/*.framework"
|
111
137
|
end
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
puts header_file_basename
|
118
|
-
FileUtils.cp(header_file, @framework_headers_path)
|
119
|
-
end
|
120
|
-
end
|
138
|
+
if pod_dependency
|
139
|
+
#添加 Pod依赖库构建生成的二进制文件
|
140
|
+
inputs << "#{@build_path}/*/**/*.framework"
|
141
|
+
#添加 Pod依赖库本地依赖的二进制文件
|
142
|
+
inputs << "#{@output}/Example/Pods/**/Frameworks/**/*.framework"
|
121
143
|
end
|
122
|
-
end
|
123
144
|
|
145
|
+
Header.combine(headers, inputs, @combine_include, @combine_exclude)
|
146
|
+
end
|
147
|
+
|
124
148
|
def combine_binarys(local_dependency, pod_dependency)
|
125
149
|
binary = "#{@framework_path}/#{@podspec.name}"
|
126
150
|
#添加 构建生成的二进制文件
|
@@ -134,8 +158,8 @@ module PPL
|
|
134
158
|
end
|
135
159
|
if pod_dependency
|
136
160
|
#添加 Pod依赖库构建生成的二进制文件
|
137
|
-
inputs << "#{@build_path}/*/**/lib*.a"
|
138
|
-
inputs << "#{@build_path}/*/**/*.framework/*"
|
161
|
+
inputs << "#{@build_path}/*/**/lib*.a"
|
162
|
+
inputs << "#{@build_path}/*/**/*.framework/*"
|
139
163
|
#添加 Pod依赖库预先构建的二进制文件
|
140
164
|
inputs << "#{@output}/Example/Pods/**/*SDK/*.framework/*"
|
141
165
|
#添加 Pod依赖库本地依赖的二进制文件
|
@@ -143,7 +167,7 @@ module PPL
|
|
143
167
|
inputs << "#{@output}/Example/Pods/**/Frameworks/**/*.framework/*"
|
144
168
|
end
|
145
169
|
|
146
|
-
Binary.combine(binary, inputs, @
|
170
|
+
Binary.combine(binary, inputs, @combine_include, @combine_exclude)
|
147
171
|
Binary.thin(binary, @archs)
|
148
172
|
end
|
149
173
|
|
@@ -165,7 +189,7 @@ module PPL
|
|
165
189
|
inputs << "#{@output}/Example/Pods/**/Frameworks/**/*.bundle"
|
166
190
|
end
|
167
191
|
|
168
|
-
Bundle.
|
192
|
+
Bundle.combine(inputs, @build_path, @combine_include, @combine_exclude)
|
169
193
|
end
|
170
194
|
|
171
195
|
def merge_bundles
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module PPL
|
2
2
|
class Binary
|
3
|
-
def self.combine(output, inputs,
|
3
|
+
def self.combine(output, inputs, include_list=[], exclude_list=[])
|
4
4
|
puts "\n目标文件:#{output}\n"
|
5
5
|
|
6
6
|
#获取合并文件的路径序列
|
@@ -15,17 +15,32 @@ module PPL
|
|
15
15
|
info_log = `lipo -info "#{input_file}" > /dev/null 2>&1
|
16
16
|
echo result:$?`
|
17
17
|
next unless info_log.include? 'result:0'
|
18
|
-
#若 input_file
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
18
|
+
#若 input_file 非被include标记的文件 则跳过
|
19
|
+
unless include_list.empty?
|
20
|
+
is_include = false
|
21
|
+
include_list.each { |include|
|
22
|
+
input_file_basename = File.basename(input_file)
|
23
|
+
include_basename = File.basename(include)
|
24
|
+
if input_file_basename == include_basename || input_file_basename == "lib#{include_basename}.a"
|
25
|
+
is_include = true
|
26
|
+
break
|
27
|
+
end
|
28
|
+
}
|
29
|
+
next unless is_include
|
30
|
+
end
|
31
|
+
#若 input_file 为被exclude标记的文件 则跳过
|
32
|
+
unless exclude_list.empty?
|
33
|
+
is_exclude = false
|
34
|
+
exclude_list.each { |exclude|
|
35
|
+
input_file_basename = File.basename(input_file)
|
36
|
+
exclude_basename = File.basename(exclude)
|
37
|
+
if input_file_basename == exclude_basename || input_file_basename == "lib#{exclude_basename}.a"
|
38
|
+
is_exclude = true
|
39
|
+
break
|
40
|
+
end
|
41
|
+
}
|
42
|
+
next if is_exclude
|
43
|
+
end
|
29
44
|
#若 input_file 为序列中已存在的文件 则跳过
|
30
45
|
next if input_file_queue.include? input_file
|
31
46
|
|
@@ -66,7 +81,7 @@ module PPL
|
|
66
81
|
return
|
67
82
|
end
|
68
83
|
end
|
69
|
-
File.delete(binary)
|
84
|
+
File.delete(binary) if File.exist? binary
|
70
85
|
|
71
86
|
binary_pieces = "#{binary}-*"
|
72
87
|
combine(binary, [binary_pieces])
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module PPL
|
2
2
|
class Bundle
|
3
|
-
def self.
|
3
|
+
def self.combine(inputs, output, include_list=[], exclude_list=[])
|
4
4
|
puts "\n目标文件:#{output}\n"
|
5
5
|
|
6
6
|
#获取合并文件的路径序列
|
@@ -10,17 +10,32 @@ module PPL
|
|
10
10
|
Dir[input].each do |input_bundle|;
|
11
11
|
#若 input_bundle 为输出目录 则跳过
|
12
12
|
next if input_bundle.eql? output
|
13
|
-
#若
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
13
|
+
#若 input_file 非被include标记的文件 则跳过
|
14
|
+
unless include_list.empty?
|
15
|
+
is_include = false
|
16
|
+
include_list.each { |include|
|
17
|
+
input_file_basename = File.basename(input_bundle)
|
18
|
+
include_basename = File.basename(include)
|
19
|
+
if input_file_basename == "#{include_basename}.bundle"
|
20
|
+
is_include = true
|
21
|
+
break
|
22
|
+
end
|
23
|
+
}
|
24
|
+
next unless is_include
|
25
|
+
end
|
26
|
+
#若 input_file 为被exclude标记的文件 则跳过
|
27
|
+
unless exclude_list.empty?
|
28
|
+
is_exclude = false
|
29
|
+
exclude_list.each { |exclude|
|
30
|
+
input_file_basename = File.basename(input_bundle)
|
31
|
+
exclude_basename = File.basename(exclude)
|
32
|
+
if input_file_basename == "#{exclude_basename}.bundle"
|
33
|
+
is_exclude = true
|
34
|
+
break
|
35
|
+
end
|
36
|
+
}
|
37
|
+
next if is_exclude
|
38
|
+
end
|
24
39
|
#合并
|
25
40
|
puts "合并资源包:" + input_bundle
|
26
41
|
FileUtils.cp_r(input_bundle, output, :preserve => true)
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module PPL
|
2
|
+
# PPL::Header
|
3
|
+
class Header
|
4
|
+
def self.combine_check(path, pattern_list = [])
|
5
|
+
return false if pattern_list.empty?
|
6
|
+
|
7
|
+
path_basename = File.basename(path)
|
8
|
+
pattern_list.each do |pattern|
|
9
|
+
pattern_basename = File.basename(pattern)
|
10
|
+
|
11
|
+
return true if path_basename == "#{pattern_basename}.framework"
|
12
|
+
end
|
13
|
+
|
14
|
+
false
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.combine_check_skip(path, queue, include_list = [], exclude_list = [])
|
18
|
+
# 若 path 非目录 则跳过
|
19
|
+
return true unless File.directory?(path)
|
20
|
+
# 若 path 非被include标记的文件 则跳过
|
21
|
+
return true unless combine_check(path, include_list)
|
22
|
+
# 若 path 为被exclude标记的文件 则跳过
|
23
|
+
return true if combine_check(path, exclude_list)
|
24
|
+
# 若 path 为序列中已存在的文件 则跳过
|
25
|
+
return true if queue.include? path
|
26
|
+
|
27
|
+
false
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.combine_collect(inputs, include_list = [], exclude_list = [])
|
31
|
+
# 获取合并文件的路径序列
|
32
|
+
input_queue = []
|
33
|
+
inputs.each do |input|
|
34
|
+
puts "\n合并路径:#{input}"
|
35
|
+
|
36
|
+
Dir[input].each do |input_path|
|
37
|
+
next if combine_check_skip(input_path, input_queue, include_list, exclude_list)
|
38
|
+
|
39
|
+
# 合并
|
40
|
+
puts "=> #{input_path}"
|
41
|
+
input_queue << input_path
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
input_queue
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.combine(output, inputs, include_list = [], exclude_list = [])
|
49
|
+
puts "\n目标文件:#{output}\n"
|
50
|
+
|
51
|
+
combine_collect(inputs, include_list, exclude_list).each do |input|
|
52
|
+
Dir["#{input}/Headers/*.h"].each do |header|
|
53
|
+
FileUtils.cp(header, output, 'preserve': true)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pod-pipeline
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- 郑贤达
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01-
|
11
|
+
date: 2023-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cocoapods-core
|
@@ -133,6 +133,7 @@ files:
|
|
133
133
|
- lib/pod-pipeline/extension/workspace-ppl.rb
|
134
134
|
- lib/pod-pipeline/util/binary.rb
|
135
135
|
- lib/pod-pipeline/util/bundle.rb
|
136
|
+
- lib/pod-pipeline/util/header.rb
|
136
137
|
- lib/pod-pipeline/util/scanner.rb
|
137
138
|
- lib/pod-pipeline/util/xcodebuild.rb
|
138
139
|
homepage: https://github.com/TokiGems/pod-pipeline
|