检查工程中没有引用的文件

检查工程中没有引用到的文件,对于要求保证工程质量的业务团队而言至关重要,这也是工程瘦身的第一步,非常适应于业务需求变更频繁的团队

脚本介绍

可以检查工程中没有引用到的文件

脚本原理

首先检查文件名,存入allFileNameArray数组中,在检查每个文件下import的头文件,加入到allImportFileArray,从allImportFileArray剔除掉allFileNameArray(因为.m会引用一次.h),就是没有头文件引用的文件列表了。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
//ruby
def traverse_dir(file_path)
if File.directory? file_path
Dir.foreach(file_path) do |file|
if file!="." and file!=".."
traverse_dir(file_path+"/"+file){|x| yield x}
end
end
else
yield file_path
end
end
path = "Poject Patch"
uselessFileArray = Array.new
allFileNameArray = Array.new
allImportFileArray = Array.new
traverse_dir(path){|f|
if f.to_s =~ /\.h$/
file_name = f.to_s.split('/').last
allFileNameArray << "#{file_name}"
end
if f.to_s() =~ /\.h$/ || f.to_s() =~ /\.m$/
IO.readlines(f).each.with_index { |line, index|
if ! line.valid_encoding?
line = line.encode("UTF-16be", :invalid=>:replace, :replace=>"?").encode('UTF-8')
end
//import 对应iOS工程,可以修改成#include方式
if line =~ /^\#import \".*\.h\"/
import_name = line.to_s.split('"').at(-2)
allImportFileArray << "#{import_name}"
end
}
end
}
allFileNameArray.each { |item|
if allImportFileArray.count(item) < 2
uselessFileArray << item
end
}
puts "########################## The uselessFile Count : #{uselessFileArray.count} ###############################"
uselessFileArray.each { |item|
puts item
}

这里只是简单对方法进行实现,可以对path进行输入,对文件类型进行检查等,方便使用其他工程

存在问题(iOS工程):

  • 这样检查会遗漏动态方法组合VC名然后push,通过URL跳转进入的页面,需要再进一步手动全局搜索,进行排查。

  • delegate 无法检查

其他工具

如何进行工程中重复代码的检查?已有开源工具可供参考:

Simian

  • 安装JDK 8,JDK低版本使用simian-2.4.0会报错
  • 下载simian最新版:地址,解压,使用bin目录下的simian-2.4.0.jar
  • 执行命令:java -jar simian-2.4.0.jar -includes=’*/.m’ -reportDuplicateText -ignoreCurlyBraces -ignoreNumbers -threshold=20

PMD

  • 安装pmd,使用homebrew:brew install pmd
  • 下载编译好的OC分析插件:地址

  • 将ObjCLanguage-0.0.8-SNAPSHOT.jar拷到pmd的目录下:/usr/local/Cellar/pmd/5.1.3/libexec/lib/

  • 执行命令:pmd cpd –language ObjectiveC –minimum-tokens 50 –files projectPath