最近看了下自动代码静态分析的工具,学习了一下OCLint的使用,将整个的安装、脚本记录如下。
一、OCLint 的下载和安装
有3种方式安装,分别为 Homebrew、源代码编译安装、下载安装包安装。 区别:
- 如果需要自定义 Lint 规则,则需要下载源码编译安装
- 如果仅仅是使用自带的规则来 Lint,那么以上3种安装方式都可以
1、这里我选择用Homebrew进行安装
brew tap oclint/formulae
brew install oclint
验证下 OCLint 是否安装成功。输入 oclint --version
- xcodebuild 的安装
xcode 下载安装好就已经成功安装了
- xcpretty 的安装
先决条件,你的机器已经安装好了 Ruby gem.
gem install xcpretty
二、 使用 OCLint
直接使用脚本,运行,生成报告
#!/bin/bash
COLOR_ERR="\033[1;31m" #出错提示
COLOR_SUCC="\033[0;32m" #成功提示
COLOR_QS="\033[1;37m" #问题颜色
COLOR_AW="\033[0;37m" #答案提示
COLOR_END="\033[1;34m" #颜色结束符
# 寻找项目的 ProjectName
function searchProjectName () {
# maxdepth 查找文件夹的深度
find . -maxdepth 1 -name "*.xcodeproj"
}
function oclintForProject () {
# 预先检测所需的安装包是否存在
if which xcodebuild 2>/dev/null; then
echo 'xcodebuild exist'
else
echo '️ 连 xcodebuild 都没有安装,玩鸡毛啊? ️'
fi
if which oclint 2>/dev/null; then
echo 'oclint exist'
else
echo ' 完蛋了你,玩 oclint 却不安装吗,你要闹哪样 '
echo ' 乖乖按照博文:https://github.com/FantasticLBP/knowledge-kit/blob/master/第一部分%20iOS/1.63.md 安装所需环境 '
fi
if which xcpretty 2>/dev/null; then
echo 'xcpretty exist'
else
gem install xcpretty
fi
# 指定编码
export LANG="zh_CN.UTF-8"
export LC_COLLATE="zh_CN.UTF-8"
export LC_CTYPE="zh_CN.UTF-8"
export LC_MESSAGES="zh_CN.UTF-8"
export LC_MONETARY="zh_CN.UTF-8"
export LC_NUMERIC="zh_CN.UTF-8"
export LC_TIME="zh_CN.UTF-8"
export xcpretty=/usr/local/bin/xcpretty # xcpretty 的安装位置可以在终端用 which xcpretty找到
myworkspace=JCJD.xcworkspace
myscheme=JCJDDevelopment
# 清除上次编译数据
if [ -d ./derivedData ]; then
echo -e $COLOR_SUCC'-----清除上次编译数据derivedData-----'$COLOR_SUCC
rm -rf ./derivedData
fi
# xcodebuild clean
xcodebuild -scheme $myscheme -workspace $myworkspace clean
# # 生成编译数据
xcodebuild -scheme $myscheme -workspace $myworkspace -configuration Development | xcpretty -r json-compilation-database -o compile_commands.json
if [ -f ./compile_commands.json ]; then
echo -e $COLOR_SUCC'编译数据生成完毕'$COLOR_SUCC
else
echo -e $COLOR_ERR'编译数据生成失败'$COLOR_ERR
return -1
fi
# 生成报表
oclint-json-compilation-database -e Pods -- -report-type html -o oclintReport.html \
-rc LONG_LINE=200 \
-disable-rule ShortVariableName \
-disable-rule ObjCAssignIvarOutsideAccessors \
-disable-rule AssignIvarOutsideAccessors \
-max-priority-1=100000 \
-max-priority-2=100000 \
-max-priority-3=100000
if [ -f ./oclintReport.html ]; then
rm compile_commands.json
echo -e $COLOR_SUCC'分析完毕'$COLOR_SUCC
else
echo -e $COLOR_ERR'分析失败'$COLOR_ERR
return -1
fi
echo -e $COLOR_AW'将为大爷自动打开 lint 的分析结果'$COLOR_AW
# 用 safari 浏览器打开 oclint 的结果
open -a "/Applications/Safari.app" oclintReport.html
}
oclintForProject
当然我们也可以通过Jenkins,来集成脚本,做到自动化检查的目的,这里就不写了。
参考的文章很全面:
- https://juejin.cn/post/6844903853775650830
- https://www.jianshu.com/p/340913fda4c8
- https://www.jianshu.com/p/ba330a0ccd5f?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
- https://www.kyson.cn/index.php/archives/114/
- https://www.jianshu.com/p/f5a58ef6ca00
- https://blog.csdn.net/qq_30281999/article/details/95499630