一、环境准备
在Mac系统上,安装oclint工具
brew tap oclint/formulae
brew install oclint
sudo gem install xcpretty
brew install xctool
二、使用
新建一个demo工程,项目结构如下:
在xcworkspace文件同级目录下,新增一个文件 oclint.sh,内容如下
#!/bin/bash
myworkspace=qatest.xcworkspace
myscheme=testaaa
# clean cache
rm -rf ~/Library/Developer/Xcode/DerivedData/;
rm -rf compile_commands.json;
rm -rf oclint_result.html;
# clean -- build -- OCLint analyse
echo 'start analyse';
xcodebuild -workspace $myworkspace -scheme $myscheme clean&&
xcodebuild -workspace $myworkspace -scheme $myscheme \
-configuration Debug GCC_PRECOMPILE_PREFIX_HEADER=YES CLANG_ENABLE_MODULE_DEBUGGING=NO COMPILER_INDEX_STORE_ENABLE=NO \
-destination 'platform=iOS Simulator,name=iPhone 13' \
| xcpretty -r json-compilation-database -o compile_commands.json&&
oclint-json-compilation-database -e Pods -e node_modules -- \
-report-type html \
-rc LONG_LINE=300 \
-rc LONG_METHOD=200 \
-rc LONG_VARIABLE_NAME=40 \
-rc LONG_CLASS=3000 \
-max-priority-1=1000 \
-max-priority-2=1000 \
-max-priority-3=2000 \
-disable-rule=UnusedMethodParameter \
-disable-rule=AvoidPrivateStaticMembers \
-disable-rule=ShortVariableName \
-allow-duplicated-violations=false >> oclint_result.html; \
echo 'end analyse';
# echo result
if [ -f ./oclint_result.html ];
then echo 'done';
else echo 'failed';
fi
运行oclint.sh:chmod 777 oclint.sh && ./oclint.sh
此时,在项目目录下,会生成oclint_result.html 报告文件,内容如下:
OCLint的分析结果:
优先级的级别是从Priority 1, Priority 2, Priority 3 依次降低的
Total Files 总文件数
Files with Violations 违规文件数
Compiler Warnings 表示项目中的警告⚠️
Compiler Errors 表示编译错误
Location 表示警告的位置
报告中的描述其实非常清晰,一般找到代码位置,结合代码理解
扫描结果提供给Dev分析,结合项目具体情况,看是否需要优化。
三、规则详情
OCLint 22.02 includes 72 rules. Rule Index
四、遇到的问题
1、xcode-select: error: tool ‘xcodebuild’
详情:
运行命令:xcodebuild -workspace $myworkspace -scheme $myscheme clean&& xcodebuild -workspace $myworkspace -scheme $myscheme
出现错误:
xcode-select: error: tool ‘xcodebuild’ requires Xcode, but active developer directory ‘/Library/Developer/CommandLineTools’ is a command line tools instance
解决办法:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
2、Compilation contains multiple jobs
解决办法:添加编译参数:COMPILER_INDEX_STORE_ENABLE=NO
3、xcodebuild 后,compile_commands.json 文件内容为空
原因是scheme没有指定对,导致编译失败