cocoapods-mtxx-bin 0.0.13 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cocoapods-mtxx-bin/command/bin/buildAll.rb +45 -23
- data/lib/cocoapods-mtxx-bin/command/bin/init.rb +14 -36
- data/lib/cocoapods-mtxx-bin/command/bin/lock/dependency.rb +82 -0
- data/lib/cocoapods-mtxx-bin/command/bin/lock/spec_repo.rb +105 -0
- data/lib/cocoapods-mtxx-bin/command/bin/lock/version.rb +41 -0
- data/lib/cocoapods-mtxx-bin/command/bin/lock.rb +36 -0
- data/lib/cocoapods-mtxx-bin/command/bin/outputSource.rb +18 -11
- data/lib/cocoapods-mtxx-bin/command/bin/upload.rb +2 -2
- data/lib/cocoapods-mtxx-bin/command/bin.rb +11 -12
- data/lib/cocoapods-mtxx-bin/config/config.rb +24 -49
- data/lib/cocoapods-mtxx-bin/config/config_asker.rb +1 -4
- data/lib/cocoapods-mtxx-bin/gem_version.rb +1 -1
- data/lib/cocoapods-mtxx-bin/helpers/buildAll/bin_helper.rb +11 -0
- data/lib/cocoapods-mtxx-bin/helpers/buildAll/builder.rb +44 -39
- data/lib/cocoapods-mtxx-bin/helpers/buildAll/podspec_util.rb +11 -8
- data/lib/cocoapods-mtxx-bin/helpers/buildAll/zip_file_helper.rb +17 -13
- data/lib/cocoapods-mtxx-bin/helpers/pod_size_helper.rb +30 -12
- data/lib/cocoapods-mtxx-bin/native/installer.rb +8 -7
- data/lib/cocoapods-mtxx-bin/native/podfile.rb +8 -0
- data/lib/cocoapods-mtxx-bin/native/podfile_env.rb +1 -0
- data/lib/cocoapods-mtxx-bin/native/resolver.rb +31 -32
- data/lib/cocoapods-mtxx-bin/native/sources_manager.rb +2 -1
- data/lib/cocoapods-mtxx-bin/source_provider_hook.rb +4 -2
- metadata +6 -6
- data/lib/cocoapods-mtxx-bin/command/bin/imy.rb +0 -45
- data/lib/cocoapods-mtxx-bin/command/bin/initHotKey.rb +0 -70
- data/lib/cocoapods-mtxx-bin/config/config_hot_key.rb +0 -103
- data/lib/cocoapods-mtxx-bin/config/config_hot_key_asker.rb +0 -57
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 41f8002bb6e1aebd88af984e688177d9ac4821eb2c1d006da248c2f269712b70
|
4
|
+
data.tar.gz: aeaf21d40990fe819241aed0115990d258b624331767f30e0a8bb9d437896b3e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 947e653552621d2fd5d2798f672ab145d30b79f9f007fa0aea0c97137d8cc9018e1f03708b0c4685e844f298d8a48615fe521b8bf05dd2a4b9a490426b0ee230
|
7
|
+
data.tar.gz: 1c971b939a41dfe772bf233d9118ef83bf46672cd5421ba59a3211f4012c103cb17b7141888444b031397ff4a35f65ed7f9c4ae1e68501509054571a7cdb4d0c
|
@@ -24,22 +24,31 @@ module Pod
|
|
24
24
|
|
25
25
|
def self.options
|
26
26
|
[
|
27
|
-
%w[--clean
|
27
|
+
%w[--clean 全部二进制包制作完成后删除编译临时目录],
|
28
|
+
%w[--clean-single 每制作完一个二进制包就删除该编译临时目录],
|
28
29
|
%w[--repo-update 更新Podfile中指定的repo仓库],
|
29
|
-
%w[--full-build 是否全量打包]
|
30
|
+
%w[--full-build 是否全量打包],
|
31
|
+
%w[--skip-simulator 跳过模拟器编译],
|
32
|
+
%w[--configuration=configName 在构建每个目标时使用configName指定构建配置,如:'Debug'、'Release'等]
|
30
33
|
].concat(super).uniq
|
31
34
|
end
|
32
35
|
|
33
36
|
def initialize(argv)
|
34
37
|
@clean = argv.flag?('clean', false)
|
38
|
+
@clean_single = argv.flag?('clean-single', false)
|
35
39
|
@repo_update = argv.flag?('repo-update', false)
|
36
40
|
@full_build = argv.flag?('full-build', false)
|
41
|
+
@skip_simulator = argv.flag?('skip-simulator', false)
|
42
|
+
@configuration = argv.option('configuration', 'Debug')
|
37
43
|
@base_dir = "#{Pathname.pwd}/build_pods"
|
38
44
|
@version_helper = BinHelper.new
|
39
45
|
super
|
40
46
|
end
|
41
47
|
|
42
48
|
def run
|
49
|
+
CBin.config.config_file_exist?
|
50
|
+
# 打印提示
|
51
|
+
print_tip
|
43
52
|
# 开始时间
|
44
53
|
@start_time = Time.now.to_i
|
45
54
|
# 读取配置文件
|
@@ -64,6 +73,14 @@ module Pod
|
|
64
73
|
|
65
74
|
private
|
66
75
|
|
76
|
+
def print_tip
|
77
|
+
UI.info '——————————————————————————————————'.blue
|
78
|
+
UI.info "|#{' '.center(32)}|".blue
|
79
|
+
UI.info "|#{"Configuration:`#{@configuration}`".center(32)}|".blue
|
80
|
+
UI.info "|#{' '.center(32)}|".blue
|
81
|
+
UI.info '——————————————————————————————————'.blue
|
82
|
+
end
|
83
|
+
|
67
84
|
# 打印耗时
|
68
85
|
def show_cost_time
|
69
86
|
return if @start_time.nil?
|
@@ -73,7 +90,7 @@ module Pod
|
|
73
90
|
# 读取配置文件
|
74
91
|
def read_config
|
75
92
|
UI.title 'Read config from file `BinConfig.yaml`'.green do
|
76
|
-
config_file = File.join(
|
93
|
+
config_file = File.join(Pod::Config.instance.project_root, 'BinConfig.yaml')
|
77
94
|
return unless File.exist?(config_file)
|
78
95
|
config = YAML.safe_load(File.open(config_file))
|
79
96
|
return if config.nil?
|
@@ -125,7 +142,7 @@ module Pod
|
|
125
142
|
def podfile
|
126
143
|
@podfile ||= begin
|
127
144
|
podfile_path = File.join(Pathname.pwd, 'Podfile')
|
128
|
-
raise 'Podfile不存在' unless File.exist?(podfile_path)
|
145
|
+
raise Informative, 'Podfile不存在' unless File.exist?(podfile_path)
|
129
146
|
sources_manager = Pod::Config.instance.sources_manager
|
130
147
|
podfile = Podfile.from_file(Pathname.new(podfile_path))
|
131
148
|
podfile_hash = podfile.to_hash
|
@@ -140,7 +157,7 @@ module Pod
|
|
140
157
|
def lockfile
|
141
158
|
@lockfile ||= begin
|
142
159
|
lock_path = File.join(Pathname.pwd, 'Podfile.lock')
|
143
|
-
raise 'Podfile.lock不存在,请执行pod install' unless File.exist?(lock_path)
|
160
|
+
raise Informative, 'Podfile.lock不存在,请执行pod install' unless File.exist?(lock_path)
|
144
161
|
Lockfile.from_file(Pathname.new(lock_path))
|
145
162
|
end
|
146
163
|
end
|
@@ -149,7 +166,7 @@ module Pod
|
|
149
166
|
def sandbox
|
150
167
|
@sandbox ||= begin
|
151
168
|
sandbox_path = File.join(Pathname.pwd, 'Pods')
|
152
|
-
raise 'Pods文件夹不存在,请执行pod install' unless File.exist?(sandbox_path)
|
169
|
+
raise Informative, 'Pods文件夹不存在,请执行pod install' unless File.exist?(sandbox_path)
|
153
170
|
Pod::Sandbox.new(sandbox_path)
|
154
171
|
end
|
155
172
|
end
|
@@ -166,6 +183,14 @@ module Pod
|
|
166
183
|
end
|
167
184
|
end
|
168
185
|
|
186
|
+
# 删除单个Pod的编译中间产物
|
187
|
+
def clean_single_build_pod(pod_target)
|
188
|
+
UI.title "Clean build pod: `#{pod_target}`".green do
|
189
|
+
build_pod_path = File.join(Dir.pwd, 'build_pods', "#{pod_target}")
|
190
|
+
FileUtils.rm_rf(build_pod_path) if File.exist?(build_pod_path)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
169
194
|
# 删除编译产物
|
170
195
|
def clean_build_pods
|
171
196
|
UI.title 'Clean build pods'.green do
|
@@ -189,14 +214,10 @@ module Pod
|
|
189
214
|
pod_targets.map do |pod_target|
|
190
215
|
begin
|
191
216
|
version = @version_helper.version(pod_target.pod_name, pod_target.root_spec.version.to_s, @analyze_result.specifications)
|
192
|
-
#
|
193
|
-
if
|
194
|
-
|
195
|
-
|
196
|
-
else
|
197
|
-
# 白名单
|
198
|
-
next if !@write_list.nil? && !@write_list.empty? && !@write_list.include?(pod_target.pod_name)
|
199
|
-
end
|
217
|
+
# 黑名单(不分全量和非全量)
|
218
|
+
next if skip_build?(pod_target)
|
219
|
+
# 白名单(有白名单,只看白名单,不分全量和非全量)
|
220
|
+
next if !@write_list.nil? && !@write_list.empty? && !@write_list.include?(pod_target.pod_name)
|
200
221
|
# 本地库
|
201
222
|
if @sandbox.local?(pod_target.pod_name)
|
202
223
|
local_pods << pod_target.pod_name
|
@@ -215,22 +236,20 @@ module Pod
|
|
215
236
|
show_skip_tip("#{pod_target.pod_name} 无需编译")
|
216
237
|
next
|
217
238
|
end
|
218
|
-
#
|
239
|
+
# 非全量编译、不在白名单中且已经有相应的二进制版本
|
219
240
|
if has_created_binary?(pod_target.pod_name, version)
|
220
241
|
created_pods << pod_target.pod_name
|
221
242
|
show_skip_tip("#{pod_target.pod_name}(#{version}) 已经有二进制版本了")
|
222
243
|
next
|
223
244
|
end
|
224
|
-
# 是否跳过编译(黑名单)
|
225
|
-
next if skip_build?(pod_target)
|
226
245
|
# 构建产物
|
227
|
-
builder = Builder.new(pod_target, @sandbox.checkout_sources)
|
246
|
+
builder = Builder.new(pod_target, @sandbox.checkout_sources, @skip_simulator, @configuration)
|
228
247
|
result = builder.build
|
229
248
|
fail_pods << pod_target.pod_name unless result
|
230
249
|
next unless result
|
231
250
|
builder.create_binary
|
232
251
|
# 压缩并上传zip
|
233
|
-
zip_helper = ZipFileHelper.new(pod_target, version, builder.product_dir, builder.build_as_framework)
|
252
|
+
zip_helper = ZipFileHelper.new(pod_target, version, builder.product_dir, builder.build_as_framework?, @configuration)
|
234
253
|
result = zip_helper.zip_lib
|
235
254
|
fail_pods << pod_target.pod_name unless result
|
236
255
|
next unless result
|
@@ -238,15 +257,18 @@ module Pod
|
|
238
257
|
fail_pods << pod_target.pod_name unless result
|
239
258
|
next unless result
|
240
259
|
# 生成二进制podspec并上传
|
241
|
-
podspec_creator = PodspecUtil.new(pod_target, version, builder.build_as_framework)
|
260
|
+
podspec_creator = PodspecUtil.new(pod_target, version, builder.build_as_framework?, @configuration)
|
242
261
|
bin_spec = podspec_creator.create_binary_podspec
|
243
262
|
bin_spec_file = podspec_creator.write_binary_podspec(bin_spec)
|
244
|
-
podspec_creator.push_binary_podspec(bin_spec_file)
|
245
|
-
|
263
|
+
result = podspec_creator.push_binary_podspec(bin_spec_file)
|
264
|
+
fail_pods << pod_target.pod_name unless result
|
265
|
+
success_pods << pod_target.pod_name if result
|
246
266
|
rescue Pod::StandardError => e
|
247
|
-
UI.info "
|
267
|
+
UI.info "`#{pod_target}`编译失败,原因:#{e}".red
|
248
268
|
fail_pods << pod_target.pod_name
|
249
269
|
next
|
270
|
+
ensure
|
271
|
+
clean_single_build_pod(pod_target) if @clean_single
|
250
272
|
end
|
251
273
|
end
|
252
274
|
results = {
|
@@ -4,56 +4,53 @@ module Pod
|
|
4
4
|
class Command
|
5
5
|
class Bin < Command
|
6
6
|
class Init < Bin
|
7
|
-
self.summary = '
|
7
|
+
self.summary = '配置插件'
|
8
8
|
self.description = <<-DESC
|
9
|
-
创建yml
|
9
|
+
创建yml配置文件,保存插件需要的配置信息,如二进制podspec仓库、二进制下载地址等
|
10
10
|
DESC
|
11
11
|
|
12
12
|
def self.options
|
13
13
|
[
|
14
|
-
%w[--bin-url=URL 配置文件地址,直接从此地址下载配置文件]
|
15
|
-
['--update-sources', '更新源码私有源配置 bin_dev.yml 中的 code_repo_url_list 配置,支持多私有源,多个私有源用分号区分 example:git@techgit.meitu.com:iMeituPic/mtsourcespecs.git;git@techgit.meitu.com:iosmodules/specs.git;https://github.com/CocoaPods/Specs.git']
|
14
|
+
%w[--bin-url=URL 配置文件地址,直接从此地址下载配置文件]
|
16
15
|
].concat(super)
|
17
16
|
end
|
18
17
|
|
19
18
|
def initialize(argv)
|
20
19
|
@bin_url = argv.option('bin-url')
|
21
|
-
@update_sources = argv.flag?('update-sources')
|
22
20
|
super
|
23
21
|
end
|
24
22
|
|
25
23
|
def run
|
26
|
-
|
27
|
-
|
24
|
+
raise Informative, "当前目录下没有`Podfile`文件" unless File.exist?(File.join(Dir.pwd, "Podfile"))
|
25
|
+
raise Informative, "当前目录下已经存在配置文件" if File.exist?(CBin.config.config_file)
|
26
|
+
if @bin_url.nil?
|
27
|
+
config_with_asker
|
28
28
|
else
|
29
|
-
|
30
|
-
config_with_asker
|
31
|
-
else
|
32
|
-
config_with_url(@bin_url)
|
33
|
-
end
|
29
|
+
config_with_url(@bin_url)
|
34
30
|
end
|
35
|
-
|
36
31
|
end
|
37
32
|
|
38
33
|
private
|
39
34
|
|
35
|
+
# 从远端下载配置文件
|
40
36
|
def config_with_url(url)
|
41
37
|
require 'open-uri'
|
42
38
|
|
43
|
-
UI.puts "
|
39
|
+
UI.puts "开始下载配置文件..."
|
44
40
|
file = open(url)
|
45
41
|
contents = YAML.safe_load(file.read)
|
46
42
|
|
47
|
-
UI.puts "
|
43
|
+
UI.puts "开始同步配置文件..."
|
48
44
|
CBin.config.sync_config(contents.to_hash)
|
49
|
-
UI.puts "
|
45
|
+
UI.puts "设置完成.".green
|
50
46
|
rescue Errno::ENOENT => e
|
51
47
|
raise Informative, "配置文件路径 #{url} 无效,请确认后重试."
|
52
48
|
end
|
53
49
|
|
50
|
+
# 询问用户相关的配置
|
54
51
|
def config_with_asker
|
55
52
|
asker = CBin::Config::Asker.new
|
56
|
-
asker.
|
53
|
+
asker.welcome_message
|
57
54
|
|
58
55
|
config = {}
|
59
56
|
template_hash = CBin.config.template_hash
|
@@ -69,25 +66,6 @@ module Pod
|
|
69
66
|
CBin.config.sync_config(config)
|
70
67
|
asker.done_message
|
71
68
|
end
|
72
|
-
def update_code_repo_url_list
|
73
|
-
asker = CBin::Config::Asker.new
|
74
|
-
config = {}
|
75
|
-
template_hash = CBin.config.template_hash
|
76
|
-
template_hash.each do |k, v|
|
77
|
-
if k == "code_repo_url_list"
|
78
|
-
default = begin
|
79
|
-
CBin.config.send(k)
|
80
|
-
rescue StandardError
|
81
|
-
nil
|
82
|
-
end
|
83
|
-
config[k] = asker.ask_with_answer(v[:description], default, v[:selection])
|
84
|
-
else
|
85
|
-
config[k] = CBin.config.config_old[k]
|
86
|
-
end
|
87
|
-
end
|
88
|
-
CBin.config.sync_config_code_repo_url_list(config)
|
89
|
-
asker.done_message_update
|
90
|
-
end
|
91
69
|
end
|
92
70
|
end
|
93
71
|
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
|
2
|
+
module Pod
|
3
|
+
class Command
|
4
|
+
class Bin < Command
|
5
|
+
class Lock < Bin
|
6
|
+
class Dependency < Lock
|
7
|
+
include Pod
|
8
|
+
|
9
|
+
self.summary = '分析`POD_NAME`依赖的库'
|
10
|
+
self.description = <<-DESC
|
11
|
+
#{self.summary},如果加上`--reverse`,则分析依赖`POD_NAME`的库
|
12
|
+
DESC
|
13
|
+
|
14
|
+
self.arguments = [
|
15
|
+
CLAide::Argument.new('POD_NAME', true)
|
16
|
+
]
|
17
|
+
|
18
|
+
def self.options
|
19
|
+
[
|
20
|
+
%w[--reverse 分析依赖`POD_NAME`的库]
|
21
|
+
].concat(super).uniq
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize(argv)
|
25
|
+
super
|
26
|
+
@pod_name = argv.shift_argument
|
27
|
+
@reverse = argv.flag?('reverse', false)
|
28
|
+
end
|
29
|
+
|
30
|
+
def run
|
31
|
+
super
|
32
|
+
raise Informative, "请输入Pod库名称,如:AFNetworking" if @pod_name.nil?
|
33
|
+
if @reverse
|
34
|
+
reverse_dependencies
|
35
|
+
else
|
36
|
+
dependencies
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def dependencies
|
41
|
+
deps = []
|
42
|
+
@analyze_result.specifications.map do |spec|
|
43
|
+
if spec.name == @pod_name
|
44
|
+
deps.concat(spec.all_dependencies)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
deps.uniq!
|
48
|
+
UI.puts "\n"
|
49
|
+
if deps.empty?
|
50
|
+
UI.puts "`#{@pod_name}`无依赖的库".red
|
51
|
+
else
|
52
|
+
UI.puts "`#{@pod_name}`依赖的库如下:".yellow
|
53
|
+
deps.map { |dep| UI.puts "- #{dep}" }
|
54
|
+
UI.puts "total #{deps.size} deps".green
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def reverse_dependencies
|
59
|
+
pods = []
|
60
|
+
@analyze_result.specifications.map do |spec|
|
61
|
+
spec.all_dependencies.map do |dep|
|
62
|
+
if dep.name == @pod_name
|
63
|
+
pods << spec
|
64
|
+
break
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
pods.uniq!
|
69
|
+
UI.puts "\n"
|
70
|
+
if pods.empty?
|
71
|
+
UI.puts "没有依赖`#{@pod_name}`的库".red
|
72
|
+
else
|
73
|
+
UI.puts "依赖`#{@pod_name}`的库如下:".yellow
|
74
|
+
pods.map { |dep| UI.puts "- #{dep}" }
|
75
|
+
UI.puts "total #{pods.size} pods".green
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
|
2
|
+
module Pod
|
3
|
+
class Command
|
4
|
+
class Bin < Command
|
5
|
+
class Lock < Bin
|
6
|
+
class SpecRepo < Lock
|
7
|
+
include Pod
|
8
|
+
|
9
|
+
self.summary = '分析`podspec`源'
|
10
|
+
self.description = <<-DESC
|
11
|
+
#{self.summary},如果加`POD_NAME`,则分析该`POD_NAME`所属的repo仓库;如果不加,则打印项目中用到的repo仓库及每个仓库下Pod个数
|
12
|
+
DESC
|
13
|
+
|
14
|
+
self.arguments = [
|
15
|
+
CLAide::Argument.new('POD_NAME', false)
|
16
|
+
]
|
17
|
+
|
18
|
+
def initialize(argv)
|
19
|
+
super
|
20
|
+
@pod_name = argv.shift_argument
|
21
|
+
end
|
22
|
+
|
23
|
+
def run
|
24
|
+
super
|
25
|
+
if @pod_name.nil?
|
26
|
+
spec_repo_summary
|
27
|
+
else
|
28
|
+
pod_source
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def spec_repos
|
35
|
+
raise Informative, "依赖分析失败" if @analyze_result.nil?
|
36
|
+
result = Hash.new
|
37
|
+
@analyze_result.specs_by_source.map do |source, specs|
|
38
|
+
next unless source
|
39
|
+
next if specs.empty?
|
40
|
+
key = source.url || source.name
|
41
|
+
|
42
|
+
# save `trunk` as 'trunk' so that the URL itself can be changed without lockfile churn
|
43
|
+
key = Pod::TrunkSource::TRUNK_REPO_NAME if source.name == Pod::TrunkSource::TRUNK_REPO_NAME
|
44
|
+
|
45
|
+
value = specs.map { |s| s.root.name }.uniq
|
46
|
+
# 合并重复的source源,而不是替换
|
47
|
+
if result[key].nil?
|
48
|
+
result[key] = YAMLHelper.sorted_array(value)
|
49
|
+
else
|
50
|
+
result[key] = YAMLHelper.sorted_array(result[key].concat(value))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
result.compact
|
54
|
+
end
|
55
|
+
|
56
|
+
def external_sources
|
57
|
+
deps = config.podfile.dependencies.select(&:external?)
|
58
|
+
deps = deps.sort { |d, other| d.name <=> other.name }
|
59
|
+
sources = {}
|
60
|
+
deps.each { |d| sources[d.root_name] = d.external_source }
|
61
|
+
sources
|
62
|
+
end
|
63
|
+
|
64
|
+
# 打印所有source及其pods个数
|
65
|
+
def spec_repo_summary
|
66
|
+
pod_count = 0
|
67
|
+
UI.puts "\n"
|
68
|
+
spec_repos.map do |source, specs|
|
69
|
+
pod_count += specs.size
|
70
|
+
UI.puts "#{source}".yellow
|
71
|
+
UI.puts "- #{specs.size} pods"
|
72
|
+
end
|
73
|
+
pod_count += external_sources.keys.size
|
74
|
+
UI.puts "External".yellow
|
75
|
+
UI.puts "- #{external_sources.keys.size} pods"
|
76
|
+
|
77
|
+
UI.puts "\n"
|
78
|
+
UI.puts "total #{spec_repos.size + 1} sources, #{pod_count} pods".green
|
79
|
+
end
|
80
|
+
|
81
|
+
# 打印pod所属的source
|
82
|
+
def pod_source
|
83
|
+
sources = []
|
84
|
+
external = false
|
85
|
+
spec_repos.map do |source, specs|
|
86
|
+
if specs.include?(@pod_name)
|
87
|
+
sources << source
|
88
|
+
end
|
89
|
+
end
|
90
|
+
external_sources.map do |pod, ext_source|
|
91
|
+
if pod == @pod_name
|
92
|
+
external = true
|
93
|
+
sources << ext_source
|
94
|
+
end
|
95
|
+
end
|
96
|
+
UI.puts "\n"
|
97
|
+
raise Informative, "未找到`#{@pod_name}`所属的source,请检查`#{@pod_name}`是否拼写错误" if sources.empty?
|
98
|
+
UI.puts "#{@pod_name}#{external ? ' (External Source)' : ''}".yellow
|
99
|
+
sources.map { |source| UI.puts "- #{source}" }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
|
2
|
+
module Pod
|
3
|
+
class Command
|
4
|
+
class Bin < Command
|
5
|
+
class Lock < Bin
|
6
|
+
class Version < Lock
|
7
|
+
include Pod
|
8
|
+
|
9
|
+
self.summary = '分析项目中使用的`Pod`库版本'
|
10
|
+
|
11
|
+
self.arguments = [
|
12
|
+
CLAide::Argument.new('POD_NAME', true)
|
13
|
+
]
|
14
|
+
|
15
|
+
def initialize(argv)
|
16
|
+
super
|
17
|
+
@pod_name = argv.shift_argument
|
18
|
+
end
|
19
|
+
|
20
|
+
def run
|
21
|
+
super
|
22
|
+
raise Informative, "请输入Pod库名称,如:AFNetworking" if @pod_name.nil?
|
23
|
+
versions = []
|
24
|
+
@analyze_result.specifications.map do |spec|
|
25
|
+
if spec.name == @pod_name
|
26
|
+
versions << spec.version
|
27
|
+
end
|
28
|
+
end
|
29
|
+
versions = versions.uniq
|
30
|
+
UI.puts "\n"
|
31
|
+
raise Informative, "未查找到`#{@pod_name}`的版本号,请检查`#{@pod_name}`是否拼写错误" if versions.empty?
|
32
|
+
UI.puts "`#{@pod_name}`版本如下:".yellow
|
33
|
+
versions.map { |v| UI.puts "- #{v}" }
|
34
|
+
|
35
|
+
UI.puts "[!] `#{@pod_name}`有`#{versions.size}`个版本,可能会导致意想不到的事情,请确保每个Pod库只有一个依赖版本".yellow if versions.size > 1
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'cocoapods-mtxx-bin/command/bin/lock/spec_repo'
|
2
|
+
require 'cocoapods-mtxx-bin/command/bin/lock/version'
|
3
|
+
require 'cocoapods-mtxx-bin/command/bin/lock/dependency'
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
class Command
|
7
|
+
class Bin < Command
|
8
|
+
class Lock < Bin
|
9
|
+
include Pod
|
10
|
+
include Config::Mixin
|
11
|
+
|
12
|
+
self.abstract_command = true
|
13
|
+
self.summary = '分析 Pod 依赖关系'
|
14
|
+
|
15
|
+
def initialize(argv)
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
# 校验Podfile是否存在
|
21
|
+
verify_podfile_exists!
|
22
|
+
# 依赖分析
|
23
|
+
@analyze_result = analyze
|
24
|
+
end
|
25
|
+
|
26
|
+
# 依赖分析
|
27
|
+
def analyze
|
28
|
+
UI.title 'Analyze dependencies'.green do
|
29
|
+
analyzer = Pod::Installer::Analyzer.new(config.sandbox, config.podfile, config.lockfile)
|
30
|
+
analyzer.analyze(true )
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -46,25 +46,32 @@ module Pod
|
|
46
46
|
all_source_list = []
|
47
47
|
error_source_list = []
|
48
48
|
@analyze_result.specifications.each do |specification|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
error_source_list << specification.name + ' ' + specification.source[:git] + + ' ' + specification.source[:tag]
|
49
|
+
all_source_list << {specification.root.name => specification.root.source}
|
50
|
+
if @error_source && invalid_git_address?(specification)
|
51
|
+
error_source_list << {specification.root.name => specification.root.source}
|
53
52
|
end
|
54
53
|
end
|
55
54
|
if @error_source
|
56
|
-
|
57
|
-
|
55
|
+
if error_source_list.uniq.empty?
|
56
|
+
UI.info "没有有问题的组件".green
|
57
|
+
else
|
58
|
+
UI.info '问题组件,source 为http CI打包不支持http认证,应修改为ssh'.red
|
59
|
+
error_source_list.uniq.map do |source|
|
60
|
+
UI.info "- #{source}".red
|
61
|
+
end
|
62
|
+
end
|
58
63
|
else
|
59
|
-
UI.info '输出所有pod组件source'.
|
60
|
-
|
64
|
+
UI.info '输出所有pod组件source'.yellow
|
65
|
+
all_source_list.uniq.map do |source|
|
66
|
+
UI.info "- #{source}"
|
67
|
+
end
|
61
68
|
end
|
62
69
|
end
|
63
70
|
|
64
71
|
# git clone 地址 是否非法
|
65
|
-
def
|
66
|
-
return false if specification.source[:git].nil?
|
67
|
-
git = specification.source[:git]
|
72
|
+
def invalid_git_address?(specification)
|
73
|
+
return false if specification.root.source[:git].nil?
|
74
|
+
git = specification.root.source[:git]
|
68
75
|
git.include?('http://techgit.meitu.com') || git.include?('https://techgit.meitu.com')
|
69
76
|
end
|
70
77
|
|
@@ -39,7 +39,7 @@ pod bin upload Pod1 1.0.0 Pod1.framework mtxxspecs --spec=Pod1.podspec
|
|
39
39
|
@file = argv.shift_argument
|
40
40
|
@repo = argv.shift_argument
|
41
41
|
@spec = argv.option('spec', nil)
|
42
|
-
@xcode_version = BinHelper.xcode_version
|
42
|
+
@xcode_version = CBin::BuildAll::BinHelper.xcode_version
|
43
43
|
super
|
44
44
|
end
|
45
45
|
|
@@ -128,7 +128,7 @@ pod bin upload Pod1 1.0.0 Pod1.framework mtxxspecs --spec=Pod1.podspec
|
|
128
128
|
|
129
129
|
def source
|
130
130
|
url = "#{CBin.config.binary_download_url_str}/#{@xcode_version}/#{@name}/#{@version}/#{zip_file_name}"
|
131
|
-
{ http: url, type:
|
131
|
+
{ http: url, type: CBin.config.download_file_type }
|
132
132
|
end
|
133
133
|
|
134
134
|
# 上传podspec
|
@@ -1,18 +1,17 @@
|
|
1
|
-
# require 'cocoapods-mtxx-bin/command/bin/initHotKey'
|
2
1
|
require 'cocoapods-mtxx-bin/command/bin/init'
|
3
|
-
require 'cocoapods-mtxx-bin/command/bin/archive'
|
4
|
-
require 'cocoapods-mtxx-bin/command/bin/auto'
|
2
|
+
# require 'cocoapods-mtxx-bin/command/bin/archive'
|
3
|
+
# require 'cocoapods-mtxx-bin/command/bin/auto'
|
5
4
|
# require 'cocoapods-mtxx-bin/command/bin/code'
|
6
|
-
require 'cocoapods-mtxx-bin/command/bin/update'
|
7
|
-
require 'cocoapods-mtxx-bin/command/bin/install'
|
8
|
-
# require 'cocoapods-mtxx-bin/command/bin/imy'
|
5
|
+
# require 'cocoapods-mtxx-bin/command/bin/update'
|
6
|
+
# require 'cocoapods-mtxx-bin/command/bin/install'
|
9
7
|
require 'cocoapods-mtxx-bin/command/bin/repo'
|
10
8
|
require 'cocoapods-mtxx-bin/command/bin/spec'
|
11
9
|
require 'cocoapods-mtxx-bin/command/bin/buildAll'
|
12
10
|
require 'cocoapods-mtxx-bin/command/bin/outputSource'
|
13
11
|
require 'cocoapods-mtxx-bin/command/bin/upload'
|
12
|
+
require 'cocoapods-mtxx-bin/command/bin/lock'
|
14
13
|
require 'cocoapods-mtxx-bin/helpers'
|
15
|
-
|
14
|
+
require 'cocoapods-mtxx-bin/helpers/framework_builder'
|
16
15
|
|
17
16
|
module Pod
|
18
17
|
class Command
|
@@ -41,11 +40,11 @@ module Pod
|
|
41
40
|
|
42
41
|
# self.default_subcommand = 'open'
|
43
42
|
self.summary = '组件二进制化插件'
|
44
|
-
self.description = <<-DESC.strip_heredoc
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
DESC
|
43
|
+
# self.description = <<-DESC.strip_heredoc
|
44
|
+
# 组件二进制化插件
|
45
|
+
#
|
46
|
+
# 利用源码私有源与二进制私有源实现对组件依赖类型的切换
|
47
|
+
# DESC
|
49
48
|
|
50
49
|
def initialize(argv)
|
51
50
|
# !!! 下面这个require必须放在这里,不能放到文件顶部,切记 !!!
|