cocoapods-dongjia 1.1.0 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: efc0ab6aa826c7a42d8327bc53a3a9f64aefc1356ea2b7f8537c9acda1f58ddd
4
- data.tar.gz: 7f5be68a76076ee849c8e93354f2172d9d00cbbc3a98c77105b7b1bbdbc8b79a
3
+ metadata.gz: d5b4528303fd0cec1f74fc6cf438693b70f6fb791ff0f4f02cabd5d7a74fa461
4
+ data.tar.gz: 50a77d0e54c9a2ebdad88a59c8a58f9d06ba35f924852ffec73d867679eb35f8
5
5
  SHA512:
6
- metadata.gz: 4bb4f8b1e01471ae6699f761d8dc3b50e320a34c4e943f10ea60b31facffcd2598b3c52d7c9daaedc12869cdee66e059c97796c841a6f90d48bc9ab858756de5
7
- data.tar.gz: af313e23c27a894121796b5e30f67847ea9fe53bc77d5c51b0b66900f28a9461594b1dae752d28a9aa520398171cdb2f0c51ac2b6229040bcdacc327d752feab
6
+ metadata.gz: f203e960ce068e3e3a6a852ae8614faae63d481b50c458743b4be8ebeb4b033f76b2c36c51ee0766f8e4a97cce40fb94603cccbd42327e21f76b07c66474f8f2
7
+ data.tar.gz: 38da2b3d06573fb9f582f3725b45c77926432fa0e2c67240f8f7667200ed34c8d17b1bfd8ee074ff4c5783cb4462dd12c7c53c87e3ab3054bcc725a8dfea21c5
@@ -1,5 +1,6 @@
1
1
  require 'cocoapods-dongjia/command/reinstall'
2
2
  require 'cocoapods-dongjia/command/install'
3
+ require 'cocoapods-dongjia/command/release'
3
4
  require 'cocoapods-dongjia/command/demo'
4
5
  require 'cocoapods-dongjia/command/strip'
5
6
  require 'cocoapods-dongjia/command/open'
@@ -0,0 +1,40 @@
1
+ require 'cocoapods'
2
+
3
+ module Pod
4
+
5
+ class Podfile
6
+ @@is_release_mode = false
7
+ def self.set_is_release_mode(mode)
8
+ @@is_release_mode = mode
9
+ end
10
+ def self.is_release_mode?
11
+ @@is_release_mode
12
+ end
13
+ end
14
+
15
+ class Command
16
+
17
+ class Release < Command
18
+
19
+ self.summary = '以 release 模式集成 pods'
20
+
21
+ self.description = <<-DESC
22
+
23
+ 以 release 模式集成 Pods
24
+
25
+ 可以在 Podfile 中通过 @@debug_only_pods = [pod_name] 的方式指定 debug 模式下的 Pod
26
+
27
+ 当执行 pod release 时,会自动剔除 @@debug_only_pods 内所定义的 Pod
28
+
29
+ DESC
30
+
31
+ def run
32
+ Pod::Podfile::set_is_release_mode(true)
33
+ installer_for_config.install!
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -1,6 +1,5 @@
1
1
  require 'cocoapods'
2
2
  require 'set'
3
- require 'pry'
4
3
 
5
4
  module Pod
6
5
 
@@ -105,17 +104,18 @@ module Pod
105
104
  def get_images
106
105
  images = Set[]
107
106
  except_dirs = [
108
- 'QYResource.bundle',
109
- 'DJMate',
110
- 'IQKeyboardManager',
111
- 'EnterpriseEditionImages.xcassets',
107
+ 'QYResource.bundle',
108
+ 'DJMate',
109
+ 'IQKeyboardManager',
112
110
  'MJRefresh.bundle',
113
111
  'AlipaySDK.bundle',
114
112
  'AppIcon.appiconset',
115
- 'KPCameraImages.xcassets'
113
+ 'KPCameraImages.xcassets',
114
+ 'UMSocialSDKResources.bundle',
115
+ 'LaunchResource'
116
116
  ]
117
117
  except_files = [
118
- 'image_placeholder',
118
+ 'image_placeholder',
119
119
  'register_add_avatar'
120
120
  ]
121
121
  bk = Proc.new do |dir, name, ext|
@@ -128,20 +128,32 @@ module Pod
128
128
 
129
129
  # 分析
130
130
  def analyze(source_files, images)
131
- source_files.map { |x| x.file_ref.real_path }.each do | path |
131
+ source_file_paths = source_files.map { |x|
132
+ x.file_ref.real_path
133
+ }
134
+ .select { |x|
135
+ File.exist?(x)
136
+ }
137
+ count = source_file_paths.count
138
+ source_file_paths.each_index do | index |
139
+ percent = index.to_f / count.to_f * 100
140
+ print "\r" if index != 0
141
+ print "#{format("%.2f", percent)}%"
142
+ path = source_file_paths[index]
132
143
  File.open(path, 'r') do |f|
133
144
  image_using = []
134
145
  f.each_line do |line|
135
146
  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
147
+ ['"', '/'].each do |prefix|
148
+ images.each do |img|
149
+ if line.include?(prefix + img.name)
150
+ image_using << img
151
+ else
152
+ # 根据下划线分割剔除最后一项,再尝试匹配
153
+ if !img.fuzzy_name.empty?
154
+ ['%', '"'].each do |suffix|
155
+ image_using << img if line.include?(prefix + img.fuzzy_name + suffix)
156
+ end
145
157
  end
146
158
  end
147
159
  end
@@ -150,15 +162,20 @@ module Pod
150
162
  images = images - image_using
151
163
  end
152
164
  end
165
+ print "\r"
153
166
  images
154
167
  end
155
168
 
156
169
  def run
157
170
  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}"
171
+ if images.empty?
172
+ puts "未找到无效资源"
173
+ else
174
+ puts "无效资源文件:"
175
+ images.each do |img|
176
+ path = Pathname.new(img.fullpath).relative_path_from(Dir.pwd).to_s
177
+ puts " #{path}"
178
+ end
162
179
  end
163
180
  end
164
181
 
@@ -1,9 +1,6 @@
1
1
  module CocoapodsDongjia
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.5"
3
3
  UPDATE_DESC = <<-EOS
4
- - 增加 pod open 指令,用于快速打开工程
5
- - 增加 pod strip 指令,用于查找无用资源
6
- - 增加 LTO 开关
7
- - 兼容新版 DJRouter 定义
4
+ - 优化 post_install 行为,避免 install 后导致全量编译
8
5
  EOS
9
6
  end
@@ -6,9 +6,10 @@ require_relative 'dongjia_pods_iterator'
6
6
  require_relative 'dongjia_router'
7
7
  require_relative 'dongjia_scheme_manager'
8
8
 
9
- require_relative 'helper/podfile_local_importer'
9
+ require_relative 'helper/podfile'
10
10
  require_relative 'helper/podfile_options'
11
11
  require_relative 'helper/podfile_warnings'
12
+ require_relative 'helper/Core/podfile/dsl'
12
13
 
13
14
  module Dongjia
14
15
 
@@ -33,11 +34,7 @@ module Dongjia
33
34
  PodsIterator.iterate(params, ctx.sandbox_root)
34
35
 
35
36
  # 处理 appspec 配置
36
- SchemeManager.setup(ctx, params)
37
-
38
- # 企业版文件引用校验
39
- files = EnterpriseInspector.inspect()
40
- Pod::UI.warn "文件未加入企业版:#{files}" if files.count > 0
37
+ # SchemeManager.setup(ctx, params)
41
38
 
42
39
  # 抓取所有路由汇总至
43
40
  router = Router.new
@@ -4,38 +4,62 @@ module Dongjia
4
4
 
5
5
  class PodsIterator
6
6
 
7
+ def self.update_build_setting(config, key, value)
8
+ if config.build_settings[key] != value
9
+ config.build_settings[key] = value
10
+ return true
11
+ else
12
+ return false
13
+ end
14
+ end
15
+
7
16
  # 关闭警告
8
17
  def self.disable_warnings(config, target_name)
18
+ changed = false
19
+
9
20
  # 禁用非 DJ 开头 Pod 的警告
10
- config.build_settings['GCC_WARN_INHIBIT_ALL_WARNINGS'] = "YES" unless target_name.start_with?('DJ')
11
-
21
+ changed ||= update_build_setting(config, 'GCC_WARN_INHIBIT_ALL_WARNINGS', 'YES') unless target_name.start_with?('DJ')
22
+
12
23
  # 不检测 block 中的隐式 self 调用
13
- config.build_settings['CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF'] = "NO"
24
+ changed ||= update_build_setting(config, 'CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF', "NO")
14
25
 
15
26
  # 不检测已废弃的方法
16
- config.build_settings['GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS'] = "NO"
17
-
18
- # 允许 objc_msgSend
19
- config.build_settings['ENABLE_STRICT_OBJC_MSGSEND'] = "NO"
27
+ changed ||= update_build_setting(config, 'GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS', "NO")
20
28
 
21
29
  # 不检测注释
22
- config.build_settings['CLANG_WARN_DOCUMENTATION_COMMENTS'] = "NO"
30
+ changed ||= update_build_setting(config, 'CLANG_WARN_DOCUMENTATION_COMMENTS', "NO")
23
31
 
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"
32
+ # 强制设置 deployment 版本为 9.0
33
+ if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 9.0
34
+ changed ||= update_build_setting(config, 'IPHONEOS_DEPLOYMENT_TARGET', "9.0")
30
35
  end
31
36
 
32
37
  # 关闭 bitcode
33
- config.build_settings['ENABLE_BITCODE'] = "NO"
38
+ changed ||= update_build_setting(config, 'ENABLE_BITCODE', "NO")
39
+
40
+ changed
34
41
  end
35
42
 
36
43
  # 打开 LTO
37
44
  def self.enable_lto(config)
38
- config.build_settings['LLVM_LTO'] = 'YES_THIN' if config.name == 'Release'
45
+ changed = false
46
+ # changed ||= update_build_setting(config, 'LLVM_LTO', 'YES_THIN') if config.name == 'Release'
47
+ changed
48
+ end
49
+
50
+ # 将 umbrella 导出的头文件改为尖括号形式
51
+ def self.convert_umbrella_header_import(pod_name)
52
+ umbrella_path = "./Pods/Target Support Files/#{pod_name}/#{pod_name}-umbrella.h"
53
+ return unless File.exist?(umbrella_path)
54
+ contents = File.read(umbrella_path)
55
+ return unless contents.include?("#import \"")
56
+ File.open(umbrella_path, 'r+') do |f|
57
+ x = f.read
58
+ begin x.gsub!("#import \"#{pod_name}/", "#import <#{pod_name}/").gsub!('.h"', '.h>') rescue nil end
59
+ begin x.gsub!('#import "', "#import <#{pod_name}/").gsub!('.h"', '.h>') rescue nil end
60
+ f.rewind
61
+ f.write(x)
62
+ end
39
63
  end
40
64
 
41
65
  # 遍历所有 Pod 工程配置
@@ -50,23 +74,27 @@ module Dongjia
50
74
 
51
75
  if name != 'Pods.xcodeproj'
52
76
  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"
77
+ # 强制设置 deployment 版本为 9.0
78
+ if config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'].to_f < 9.0
79
+ config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = "9.0"
56
80
  end
57
81
  end
58
82
  end
59
83
 
60
84
  # project 的每个 target 配置
85
+ changed = false
61
86
  proj.targets.select {|t| !t.name.start_with?('Pods')}.each do | target |
62
87
  next if target.name.start_with?('Pods')
63
88
  target.build_configurations.each do | config |
64
- disable_warnings(config, target.name) if turn_off_warnings
65
- enable_lto(config) if lto_enabled
89
+ changed ||= disable_warnings(config, target.name) if turn_off_warnings
90
+ changed ||= enable_lto(config) if lto_enabled
91
+ convert_umbrella_header_import(target.name)
66
92
  end
67
93
  end
68
94
 
69
- proj.save
95
+ if changed
96
+ proj.save
97
+ end
70
98
 
71
99
  end
72
100
 
@@ -14,6 +14,8 @@ module Dongjia
14
14
 
15
15
  注意:此处的实现仅供查看,如需修改,请点击对应的 _redirect{type} 方法跳转至对应的实现
16
16
 
17
+ 跳转定义文档:https://cf.idongjia.cn/pages/viewpage.action?pageId=57351032
18
+
17
19
  */
18
20
 
19
21
 
@@ -39,7 +41,10 @@ EOS
39
41
  end
40
42
 
41
43
  if @prefix != nil
42
- @redirect_type = @defining_line[prefix_len, @defining_line.index(',') - prefix_len]
44
+ end_index = @defining_line.index(',') || @defining_line.index(')')
45
+ if !end_index.nil?
46
+ @redirect_type = @defining_line[prefix_len, end_index - prefix_len]
47
+ end
43
48
  end
44
49
  end
45
50
 
@@ -0,0 +1,16 @@
1
+ module Pod
2
+ class Podfile
3
+ module DSL
4
+ # Hook Podfile 中的 install: 方法,将当前版本 Cocoapods 不支持的 option 剔除
5
+ original_install = instance_method(:install!)
6
+ define_method(:install!) do |installation_method, options = {}|
7
+ all_options = Installer::InstallationOptions::all_options
8
+ valid_options = {}
9
+ options.each do |k, v|
10
+ valid_options.merge!({k => v}) if all_options.include?(k.to_s)
11
+ end
12
+ original_install.bind(self).(installation_method, valid_options)
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,60 @@
1
+ require_relative 'pod'
2
+
3
+ module Pod
4
+
5
+ class LocalSpec
6
+ @@local_spec_importing = false
7
+ @@local_spec_path = nil
8
+ def self.import_local_pod(path)
9
+ @@local_spec_importing = true
10
+ @@local_spec_path = path
11
+ yield if block_given?
12
+ @@local_spec_path = nil
13
+ @@local_spec_importing = false
14
+ end
15
+ def self.local_spec_importing?
16
+ @@local_spec_importing
17
+ end
18
+ def self.local_spec_path
19
+ @@local_spec_path
20
+ end
21
+ end
22
+
23
+ class Podfile
24
+
25
+ # 只在 debug 模式下集成的组件,默认为空
26
+ @@debug_only_pods = []
27
+
28
+ # 导入工程目录下相对位置的 pod
29
+ def import_relative_in(path = './')
30
+ LocalSpec.import_local_pod(path) do
31
+ yield if block_given?
32
+ end
33
+ end
34
+
35
+ original_pod = instance_method(:pod)
36
+ define_method(:pod) do |name = nil, *requirements|
37
+
38
+ if Pod::Podfile::is_release_mode?
39
+ realname = name.split('/').first
40
+ if @@debug_only_pods.include?(realname)
41
+ puts "#{realname} is only for debug, it will be removed."
42
+ next
43
+ end
44
+ end
45
+
46
+ if LocalSpec.local_spec_importing?
47
+ path_cfg = { :path => "#{LocalSpec.local_spec_path}/#{Pod::repo_name(name)}" }
48
+ if requirements.length == 0
49
+ requirements = [path_cfg]
50
+ else
51
+ cfg = requirements.first
52
+ cfg.merge!(path_cfg) unless cfg.has_key?(:path)
53
+ end
54
+ end
55
+ original_pod.bind(self).(name, *requirements)
56
+ end
57
+
58
+ end
59
+
60
+ end
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.1.0
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - jiangzhuoyi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-23 00:00:00.000000000 Z
11
+ date: 2020-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.13.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.13.0
55
69
  description: A short description of cocoapods-dongjia.
56
70
  email:
57
71
  - jiangzhuoyi@idongjia.cn
@@ -65,6 +79,7 @@ files:
65
79
  - lib/cocoapods-dongjia/command/install.rb
66
80
  - lib/cocoapods-dongjia/command/open.rb
67
81
  - lib/cocoapods-dongjia/command/reinstall.rb
82
+ - lib/cocoapods-dongjia/command/release.rb
68
83
  - lib/cocoapods-dongjia/command/strip.rb
69
84
  - lib/cocoapods-dongjia/gem_version.rb
70
85
  - lib/cocoapods_plugin.rb
@@ -75,9 +90,10 @@ files:
75
90
  - lib/dongjia_router.rb
76
91
  - lib/dongjia_scheme_manager.rb
77
92
  - lib/dongjia_source.rb
93
+ - lib/helper/Core/podfile/dsl.rb
78
94
  - lib/helper/dongjia_version_checker.rb
79
95
  - lib/helper/pod.rb
80
- - lib/helper/podfile_local_importer.rb
96
+ - lib/helper/podfile.rb
81
97
  - lib/helper/podfile_options.rb
82
98
  - lib/helper/podfile_warnings.rb
83
99
  - lib/helper/project.rb
@@ -85,11 +101,7 @@ homepage: https://github.com/EXAMPLE/cocoapods-dongjia
85
101
  licenses:
86
102
  - MIT
87
103
  metadata:
88
- update_desc: |2
89
- - 增加 pod open 指令,用于快速打开工程
90
- - 增加 pod strip 指令,用于查找无用资源
91
- - 增加 LTO 开关
92
- - 兼容新版 DJRouter 定义
104
+ update_desc: " - 优化 post_install 行为,避免 install 后导致全量编译\n"
93
105
  post_install_message:
94
106
  rdoc_options: []
95
107
  require_paths:
@@ -105,7 +117,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
117
  - !ruby/object:Gem::Version
106
118
  version: '0'
107
119
  requirements: []
108
- rubygems_version: 3.1.2
120
+ rubygems_version: 3.0.3
109
121
  signing_key:
110
122
  specification_version: 4
111
123
  summary: A longer description of cocoapods-dongjia.
@@ -1,34 +0,0 @@
1
- require_relative 'pod'
2
-
3
- module Pod
4
-
5
- class Podfile
6
-
7
- # 导入工程目录下相对位置的 pod
8
- @local_spec_importing = false
9
- @local_spec_path = nil
10
- def import_relative_in(path = './')
11
- @local_spec_importing = true
12
- @local_spec_path = path
13
- yield if block_given?
14
- @local_spec_path = nil
15
- @local_spec_importing = false
16
- end
17
-
18
- original_pod = instance_method(:pod)
19
- define_method(:pod) do |name = nil, *requirements|
20
- if @local_spec_importing
21
- path_cfg = { :path => "#{@local_spec_path}/#{Pod::repo_name(name)}" }
22
- if requirements.length == 0
23
- requirements = [path_cfg]
24
- else
25
- cfg = requirements.first
26
- cfg.merge!(path_cfg) unless cfg.has_key?(:path)
27
- end
28
- end
29
- original_pod.bind(self).(name, *requirements)
30
- end
31
-
32
- end
33
-
34
- end