一只往上爬的蜗牛

一只往上爬的蜗牛

一、环境准备

在Mac系统上,安装oclint工具

brew tap oclint/formulae
brew install oclint
sudo gem install xcpretty
brew install xctool

二、使用

新建一个demo工程,项目结构如下:
【测试左移】基于oclint的IOS静态代码扫描实战-LMLPHP

在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的IOS静态代码扫描实战-LMLPHP
【测试左移】基于oclint的IOS静态代码扫描实战-LMLPHP
【测试左移】基于oclint的IOS静态代码扫描实战-LMLPHP
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
【测试左移】基于oclint的IOS静态代码扫描实战-LMLPHP
【测试左移】基于oclint的IOS静态代码扫描实战-LMLPHP
【测试左移】基于oclint的IOS静态代码扫描实战-LMLPHP

四、遇到的问题

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没有指定对,导致编译失败

五、参考文档

1、云音乐iOS端代码静态检测实践
2、OCLint - Objective-C 代码检查

04-29 21:28