cocoapods-dongjia 1.0.9 → 1.1.0
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/lib/cocoapods-dongjia/command.rb +3 -1
- data/lib/cocoapods-dongjia/command/open.rb +32 -0
- data/lib/cocoapods-dongjia/command/strip.rb +169 -0
- data/lib/cocoapods-dongjia/gem_version.rb +5 -3
- data/lib/cocoapods_plugin.rb +3 -6
- data/lib/dongjia_pods_iterator.rb +77 -0
- data/lib/dongjia_router.rb +5 -5
- data/lib/helper/dongjia_version_checker.rb +1 -1
- metadata +10 -6
- data/lib/dongjia_warning_manager.rb +0 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: efc0ab6aa826c7a42d8327bc53a3a9f64aefc1356ea2b7f8537c9acda1f58ddd
|
4
|
+
data.tar.gz: 7f5be68a76076ee849c8e93354f2172d9d00cbbc3a98c77105b7b1bbdbc8b79a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4bb4f8b1e01471ae6699f761d8dc3b50e320a34c4e943f10ea60b31facffcd2598b3c52d7c9daaedc12869cdee66e059c97796c841a6f90d48bc9ab858756de5
|
7
|
+
data.tar.gz: af313e23c27a894121796b5e30f67847ea9fe53bc77d5c51b0b66900f28a9461594b1dae752d28a9aa520398171cdb2f0c51ac2b6229040bcdacc327d752feab
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'cocoapods'
|
2
|
+
|
3
|
+
module Pod
|
4
|
+
|
5
|
+
class Command
|
6
|
+
|
7
|
+
class Open < Command
|
8
|
+
|
9
|
+
self.summary = '快速打开项目的 .xcworkspace'
|
10
|
+
|
11
|
+
self.description = <<-DESC
|
12
|
+
快速打开项目的 .xcworkspace
|
13
|
+
DESC
|
14
|
+
|
15
|
+
def validate!
|
16
|
+
super
|
17
|
+
|
18
|
+
workspace_list = Pathname.glob('*.xcworkspace')
|
19
|
+
@workspace_path = workspace_list.first if workspace_list.size == 1
|
20
|
+
|
21
|
+
help! '没有找到 xcworkspace' unless @workspace_path.exist?
|
22
|
+
end
|
23
|
+
|
24
|
+
def run
|
25
|
+
`open #{@workspace_path}`
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,169 @@
|
|
1
|
+
require 'cocoapods'
|
2
|
+
require 'set'
|
3
|
+
require 'pry'
|
4
|
+
|
5
|
+
module Pod
|
6
|
+
|
7
|
+
class Image
|
8
|
+
attr_accessor :dir
|
9
|
+
attr_accessor :name
|
10
|
+
attr_accessor :fuzzy_name
|
11
|
+
def initialize(dir, name)
|
12
|
+
@dir = dir
|
13
|
+
if name.end_with?('@2x') || name.end_with?('@3x')
|
14
|
+
name = name[0, name.length-3]
|
15
|
+
end
|
16
|
+
@name = name
|
17
|
+
|
18
|
+
# 只处理最后一段为数字,或分了三段及以上的命名形式
|
19
|
+
comps = name.split('_')
|
20
|
+
last = comps.last
|
21
|
+
if last.to_i > 0 || last.start_with?('0') || comps.count >= 3
|
22
|
+
@fuzzy_name = name[0, name.length - last.length]
|
23
|
+
else
|
24
|
+
@fuzzy_name = ''
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def eql?(other)
|
29
|
+
@dir == other.dir && @name == other.name
|
30
|
+
end
|
31
|
+
|
32
|
+
def hash
|
33
|
+
[@dir, @name].hash
|
34
|
+
end
|
35
|
+
|
36
|
+
def fullpath
|
37
|
+
File.join(@dir, @name)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class Command
|
42
|
+
|
43
|
+
class Strip < Command
|
44
|
+
|
45
|
+
self.summary = '查找工程内所有无效资源'
|
46
|
+
|
47
|
+
self.description = <<-DESC
|
48
|
+
查找工程内所有无效资源
|
49
|
+
DESC
|
50
|
+
|
51
|
+
def validate!
|
52
|
+
super
|
53
|
+
|
54
|
+
@img_exts = ['.png', '.jpg', '.jpeg', '.webp', '.gif']
|
55
|
+
|
56
|
+
@proj_paths = []
|
57
|
+
@proj_paths |= Pathname.glob('*.xcodeproj')
|
58
|
+
@proj_paths |= Pathname.glob('Pods/*.xcodeproj')
|
59
|
+
|
60
|
+
help! '未发现任何工程' unless @proj_paths.count > 0
|
61
|
+
end
|
62
|
+
|
63
|
+
# 遍历目录找出所有图片
|
64
|
+
def traverse(path, except_dirs, bk = nil)
|
65
|
+
dir = File.dirname(path)
|
66
|
+
ext = File.extname(path)
|
67
|
+
name = File.basename(path, ext)
|
68
|
+
basename = File.basename(path)
|
69
|
+
if except_dirs.include?(basename)
|
70
|
+
return
|
71
|
+
end
|
72
|
+
if File.directory?(path)
|
73
|
+
if ext == '.imageset'
|
74
|
+
# imageset 直接返回
|
75
|
+
bk.call(dir, name, ext)
|
76
|
+
else
|
77
|
+
Dir.foreach(path) do |name|
|
78
|
+
unless name.start_with?('.') || name.end_with?('.launchimage')
|
79
|
+
traverse(File.join(path, name), except_dirs, bk)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
else
|
84
|
+
bk.call(dir, name, ext) if @img_exts.include?(ext)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# 获取源文件
|
89
|
+
def get_source_files
|
90
|
+
source_files = []
|
91
|
+
@proj_paths.each do |path|
|
92
|
+
proj = Xcodeproj::Project.open(path)
|
93
|
+
proj.targets.each do |target|
|
94
|
+
target.build_phases.each do |phase|
|
95
|
+
if phase.is_a?(Xcodeproj::Project::PBXSourcesBuildPhase)
|
96
|
+
source_files |= phase.files
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
source_files
|
102
|
+
end
|
103
|
+
|
104
|
+
# 获取所有图片资源
|
105
|
+
def get_images
|
106
|
+
images = Set[]
|
107
|
+
except_dirs = [
|
108
|
+
'QYResource.bundle',
|
109
|
+
'DJMate',
|
110
|
+
'IQKeyboardManager',
|
111
|
+
'EnterpriseEditionImages.xcassets',
|
112
|
+
'MJRefresh.bundle',
|
113
|
+
'AlipaySDK.bundle',
|
114
|
+
'AppIcon.appiconset',
|
115
|
+
'KPCameraImages.xcassets'
|
116
|
+
]
|
117
|
+
except_files = [
|
118
|
+
'image_placeholder',
|
119
|
+
'register_add_avatar'
|
120
|
+
]
|
121
|
+
bk = Proc.new do |dir, name, ext|
|
122
|
+
next if except_files.include?(name)
|
123
|
+
images << Image.new(dir, name)
|
124
|
+
end
|
125
|
+
traverse(Dir.pwd, except_dirs, bk)
|
126
|
+
images
|
127
|
+
end
|
128
|
+
|
129
|
+
# 分析
|
130
|
+
def analyze(source_files, images)
|
131
|
+
source_files.map { |x| x.file_ref.real_path }.each do | path |
|
132
|
+
File.open(path, 'r') do |f|
|
133
|
+
image_using = []
|
134
|
+
f.each_line do |line|
|
135
|
+
next unless line.include?('"')
|
136
|
+
images.each do |img|
|
137
|
+
if line.include?('"' + img.name)
|
138
|
+
image_using << img
|
139
|
+
else
|
140
|
+
# 根据下划线分割剔除最后一项,再尝试匹配
|
141
|
+
if !img.fuzzy_name.empty?
|
142
|
+
if line.include?('"' + img.fuzzy_name + '%') ||
|
143
|
+
line.include?('"' + img.fuzzy_name + '"')
|
144
|
+
image_using << img
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
images = images - image_using
|
151
|
+
end
|
152
|
+
end
|
153
|
+
images
|
154
|
+
end
|
155
|
+
|
156
|
+
def run
|
157
|
+
images = analyze(get_source_files, get_images)
|
158
|
+
puts "无效资源文件:"
|
159
|
+
images.each do |img|
|
160
|
+
path = Pathname.new(img.fullpath).relative_path_from(Dir.pwd).to_s
|
161
|
+
puts " #{path}"
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
166
|
+
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
data/lib/cocoapods_plugin.rb
CHANGED
@@ -2,7 +2,7 @@ require 'cocoapods-dongjia/command'
|
|
2
2
|
require_relative 'dongjia_source'
|
3
3
|
require_relative 'dongjia_branch_inspector'
|
4
4
|
require_relative 'dongjia_enterprise_inspector'
|
5
|
-
require_relative '
|
5
|
+
require_relative 'dongjia_pods_iterator'
|
6
6
|
require_relative 'dongjia_router'
|
7
7
|
require_relative 'dongjia_scheme_manager'
|
8
8
|
|
@@ -29,11 +29,8 @@ module Dongjia
|
|
29
29
|
|
30
30
|
Pod::HooksManager.register('cocoapods-dongjia', :post_install) do |ctx, params|
|
31
31
|
|
32
|
-
#
|
33
|
-
|
34
|
-
params[:turn_off_warnings],
|
35
|
-
ctx.sandbox_root
|
36
|
-
)
|
32
|
+
# 关闭警告 / 检查 LTO
|
33
|
+
PodsIterator.iterate(params, ctx.sandbox_root)
|
37
34
|
|
38
35
|
# 处理 appspec 配置
|
39
36
|
SchemeManager.setup(ctx, params)
|
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'xcodeproj'
|
2
|
+
|
3
|
+
module Dongjia
|
4
|
+
|
5
|
+
class PodsIterator
|
6
|
+
|
7
|
+
# 关闭警告
|
8
|
+
def self.disable_warnings(config, target_name)
|
9
|
+
# 禁用非 DJ 开头 Pod 的警告
|
10
|
+
config.build_settings['GCC_WARN_INHIBIT_ALL_WARNINGS'] = "YES" unless target_name.start_with?('DJ')
|
11
|
+
|
12
|
+
# 不检测 block 中的隐式 self 调用
|
13
|
+
config.build_settings['CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF'] = "NO"
|
14
|
+
|
15
|
+
# 不检测已废弃的方法
|
16
|
+
config.build_settings['GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS'] = "NO"
|
17
|
+
|
18
|
+
# 允许 objc_msgSend
|
19
|
+
config.build_settings['ENABLE_STRICT_OBJC_MSGSEND'] = "NO"
|
20
|
+
|
21
|
+
# 不检测注释
|
22
|
+
config.build_settings['CLANG_WARN_DOCUMENTATION_COMMENTS'] = "NO"
|
23
|
+
|
24
|
+
# 不严格的原型校验
|
25
|
+
config.build_settings['CLANG_WARN_STRICT_PROTOTYPES'] = "NO"
|
26
|
+
|
27
|
+
# 强制设置 deployment 版本为 8.0
|
28
|
+
if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 8.0
|
29
|
+
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = "8.0"
|
30
|
+
end
|
31
|
+
|
32
|
+
# 关闭 bitcode
|
33
|
+
config.build_settings['ENABLE_BITCODE'] = "NO"
|
34
|
+
end
|
35
|
+
|
36
|
+
# 打开 LTO
|
37
|
+
def self.enable_lto(config)
|
38
|
+
config.build_settings['LLVM_LTO'] = 'YES_THIN' if config.name == 'Release'
|
39
|
+
end
|
40
|
+
|
41
|
+
# 遍历所有 Pod 工程配置
|
42
|
+
def self.iterate(params, sandbox_root)
|
43
|
+
turn_off_warnings = params[:turn_off_warnings]
|
44
|
+
lto_enabled = params[:lto_enabled]
|
45
|
+
return if (turn_off_warnings != true) && (lto_enabled != true)
|
46
|
+
|
47
|
+
Dir.foreach(sandbox_root).select{|f| f.end_with?('xcodeproj')}.each do |name|
|
48
|
+
|
49
|
+
proj = Xcodeproj::Project.open(File.join(sandbox_root, name))
|
50
|
+
|
51
|
+
if name != 'Pods.xcodeproj'
|
52
|
+
proj.build_configurations.each do | config |
|
53
|
+
# 强制设置 deployment 版本为 8.0
|
54
|
+
if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 8.0
|
55
|
+
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = "8.0"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# project 的每个 target 配置
|
61
|
+
proj.targets.select {|t| !t.name.start_with?('Pods')}.each do | target |
|
62
|
+
next if target.name.start_with?('Pods')
|
63
|
+
target.build_configurations.each do | config |
|
64
|
+
disable_warnings(config, target.name) if turn_off_warnings
|
65
|
+
enable_lto(config) if lto_enabled
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
proj.save
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
data/lib/dongjia_router.rb
CHANGED
@@ -30,11 +30,11 @@ EOS
|
|
30
30
|
@body = ''
|
31
31
|
@prefix = nil
|
32
32
|
prefix_len = 0
|
33
|
-
if @defining_line.start_with?('@redirectObj(')
|
34
|
-
@prefix = '
|
33
|
+
if @defining_line.start_with?('@RedirectObj(') || @defining_line.start_with?('@redirectObj(')
|
34
|
+
@prefix = 'RedirectObj'
|
35
35
|
prefix_len = @prefix.length + 2
|
36
|
-
elsif @defining_line.start_with?('@redirect(')
|
37
|
-
@prefix = '
|
36
|
+
elsif @defining_line.start_with?('@Redirect(') || @defining_line.start_with?('@redirect(')
|
37
|
+
@prefix = 'Redirect'
|
38
38
|
prefix_len = @prefix.length + 2
|
39
39
|
end
|
40
40
|
|
@@ -69,7 +69,7 @@ EOS
|
|
69
69
|
pre_line = nil
|
70
70
|
file.each_line do |line|
|
71
71
|
is_start = false
|
72
|
-
if line.start_with?('@redirect')
|
72
|
+
if line.start_with?('@Redirect') || line.start_with?('@redirect')
|
73
73
|
# 路由定义开始
|
74
74
|
item = RouterItem.new(line)
|
75
75
|
item.pre_line = pre_line
|
@@ -18,7 +18,7 @@ module Dongjia
|
|
18
18
|
latest_version = info['version']
|
19
19
|
v = CocoapodsDongjia::VERSION
|
20
20
|
|
21
|
-
if v < latest_version
|
21
|
+
if Gem::Version.new(v) < Gem::Version.new(latest_version)
|
22
22
|
update_desc = info['metadata']['update_desc']
|
23
23
|
warnings = "cocoapods-dongjia #{latest_version} is available.\n\n"
|
24
24
|
warnings << update_desc.rstrip << "\n\n"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-dongjia
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jiangzhuoyi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -63,16 +63,18 @@ files:
|
|
63
63
|
- lib/cocoapods-dongjia/command.rb
|
64
64
|
- lib/cocoapods-dongjia/command/demo.rb
|
65
65
|
- lib/cocoapods-dongjia/command/install.rb
|
66
|
+
- lib/cocoapods-dongjia/command/open.rb
|
66
67
|
- lib/cocoapods-dongjia/command/reinstall.rb
|
68
|
+
- lib/cocoapods-dongjia/command/strip.rb
|
67
69
|
- lib/cocoapods-dongjia/gem_version.rb
|
68
70
|
- lib/cocoapods_plugin.rb
|
69
71
|
- lib/dongjia_branch_inspector.rb
|
70
72
|
- lib/dongjia_config.rb
|
71
73
|
- lib/dongjia_enterprise_inspector.rb
|
74
|
+
- lib/dongjia_pods_iterator.rb
|
72
75
|
- lib/dongjia_router.rb
|
73
76
|
- lib/dongjia_scheme_manager.rb
|
74
77
|
- lib/dongjia_source.rb
|
75
|
-
- lib/dongjia_warning_manager.rb
|
76
78
|
- lib/helper/dongjia_version_checker.rb
|
77
79
|
- lib/helper/pod.rb
|
78
80
|
- lib/helper/podfile_local_importer.rb
|
@@ -84,8 +86,10 @@ licenses:
|
|
84
86
|
- MIT
|
85
87
|
metadata:
|
86
88
|
update_desc: |2
|
87
|
-
-
|
88
|
-
-
|
89
|
+
- 增加 pod open 指令,用于快速打开工程
|
90
|
+
- 增加 pod strip 指令,用于查找无用资源
|
91
|
+
- 增加 LTO 开关
|
92
|
+
- 兼容新版 DJRouter 定义
|
89
93
|
post_install_message:
|
90
94
|
rdoc_options: []
|
91
95
|
require_paths:
|
@@ -101,7 +105,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
101
105
|
- !ruby/object:Gem::Version
|
102
106
|
version: '0'
|
103
107
|
requirements: []
|
104
|
-
rubygems_version: 3.
|
108
|
+
rubygems_version: 3.1.2
|
105
109
|
signing_key:
|
106
110
|
specification_version: 4
|
107
111
|
summary: A longer description of cocoapods-dongjia.
|
@@ -1,68 +0,0 @@
|
|
1
|
-
require 'xcodeproj'
|
2
|
-
|
3
|
-
module Dongjia
|
4
|
-
|
5
|
-
class WarningManager
|
6
|
-
|
7
|
-
def self.turn_off_warnings(turn_off, sandbox_root)
|
8
|
-
|
9
|
-
return if (turn_off != true)
|
10
|
-
|
11
|
-
Dir.foreach(sandbox_root).select{|f| f.end_with?('xcodeproj')}.each do |name|
|
12
|
-
|
13
|
-
proj = Xcodeproj::Project.open(File.join(sandbox_root, name))
|
14
|
-
|
15
|
-
if name != 'Pods.xcodeproj'
|
16
|
-
proj.build_configurations.each do | config |
|
17
|
-
# 强制设置 deployment 版本为 8.0
|
18
|
-
if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 8.0
|
19
|
-
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = "8.0"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# project 的每个 target 配置
|
25
|
-
proj.targets.each do | target |
|
26
|
-
|
27
|
-
next if target.name.start_with?('Pods')
|
28
|
-
|
29
|
-
target.build_configurations.each do | config |
|
30
|
-
|
31
|
-
# 禁用非 DJ 开头 Pod 的警告
|
32
|
-
config.build_settings['GCC_WARN_INHIBIT_ALL_WARNINGS'] = "YES" unless target.name.start_with?('DJ')
|
33
|
-
|
34
|
-
# 不检测 block 中的隐式 self 调用
|
35
|
-
config.build_settings['CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF'] = "NO"
|
36
|
-
|
37
|
-
# 不检测已废弃的方法
|
38
|
-
config.build_settings['GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS'] = "NO"
|
39
|
-
|
40
|
-
# 允许 objc_msgSend
|
41
|
-
config.build_settings['ENABLE_STRICT_OBJC_MSGSEND'] = "NO"
|
42
|
-
|
43
|
-
# 不检测注释
|
44
|
-
config.build_settings['CLANG_WARN_DOCUMENTATION_COMMENTS'] = "NO"
|
45
|
-
|
46
|
-
# 不严格的原型校验
|
47
|
-
config.build_settings['CLANG_WARN_STRICT_PROTOTYPES'] = "NO"
|
48
|
-
|
49
|
-
# 强制设置 deployment 版本为 8.0
|
50
|
-
if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 8.0
|
51
|
-
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = "8.0"
|
52
|
-
end
|
53
|
-
|
54
|
-
# 关闭 bitcode
|
55
|
-
config.build_settings['ENABLE_BITCODE'] = "NO"
|
56
|
-
end
|
57
|
-
|
58
|
-
end
|
59
|
-
|
60
|
-
proj.save
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|