代码评审自动化工具

Android软件包apk
iPhone软件包ipa
Mac软件包dmg
window软件包exe
终端 软件包 .tar/.giz

xcode+oclint+xcpretty+Jenkins
OCLint是静态代码分析工具。OCLint工具检查C/C++/ObjectiveC代码并寻找潜在问题来提高质量和减少缺陷:

  1. /else/try/catch/finally语句为空
  2. 未使用的局部性临时变量和参数
  3. 高圈复杂度,高NPath复杂度和高NCSS复杂度
  4. 冗余if语句和无用的括号
  5. 长方法名和长参数列表
  6. 倒置逻辑和参数重新分配

总结:OCLint工具实现自动化评审代码规范、提升代码质量,节省CodeReview人力。


Homebrew本身环境


OClint工具的安装:
OCLint安装方案一:HomebrewTap(已配置好Homebrew环境)
安装OCLint方法:

$ brew tap oclint/formulae
$ brew install oclint

更新OClint方法:

$ brew update
$ brew upgrade oclint

验证OClint成功安装

$ oclint
oclint: Not enough positional command line arguments specified!
Must specify at least 1 positional arguments: See: oclint -help

OCLint安装方案二(安装包安装):
进入oclint release下载页,下载最新版本安装包Source code(tar.gz)。
解压下载文件得到oclint-0.14文件,将文件放在某个目录下,如/User/XXX/OCLint 。
打开终端编辑.bash_profile文件(先输入cd~,然后输入open -e .bash_profile,这时./bash_profile就会打开),将oclint添加到环境变量中,如下:

OCLint_HOME=/User/XXX/OCLint/oclint-0.14
export PATH=$OCLINT_HOME/bin:$PATH

保存文件,关闭.bash_profile文件
更新刚配置的环境变量:输入source .bash_profile,重启终端就可以执行oclint命令啦~

OCLint安装方案三(编译源码安装):
这个就不详细多说了,大家可以看oclint官网说明

xcobuild的安装
这个只要下载Xcode工具,即可安装~
#####xcpretty 的安装

sudo gem install -n /usr/local/bin  xcpretty
 gem install xcpretty
 ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.

sudo gem install -n /usr/local/bin xcpretty

OCLint + Xcode结合使用
1、在工程中,创建新的Target,命名为OCLintTest
在这里插入图片描述
2、在OCLintTest上添加Run Script,如图:
在这里插入图片描述
OCLint+shell脚本结合使用

#!/bin/bash

# 指定编码
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"


function checkDepend () {
    
    
command -v xcpretty >/dev/null 2>&1 || {
    
    
echo >&2 "I require xcpretty but it's not installed.  Install:gem install xcpretty";
exit
}
command -v oclint-json-compilation-database >/dev/null 2>&1 || {
    
    
echo >&2 "I require oclint-json-compilation-database but it's not installed.  Install:brew install oclint";
exit
}
}

function oclintForProject () {
    
    

# 检测依赖
checkDepend

projectName=$1
scheme=$2
reportType=$3

REPORT_PMD="pmd"
REPORT_XCODE="Xcode"

myworkspace=${
    
    projectName}
myscheme=${
    
    scheme}
echo "myworkspace是:${myworkspace}"
echo "myscheme是:${myscheme}"
echo "reportType为:${reportType}"

# 清除上次编译数据
if [ -d ./build/derivedData ]; then
echo '-----清除上次编译数据derivedData-----'
rm -rf ./build/derivedData
fi

# xcodebuild -workspace $myworkspace -scheme $myscheme clean
xcodebuild clean

echo '-----开始编译-----'

# 生成编译数据
xcodebuild -workspace ${
    
    myworkspace} -scheme ${
    
    myscheme} -UseModernBuildSystem=NO -derivedDataPath ./build/derivedData -configuration Debug COMPILER_INDEX_STORE_ENABLE=NO | xcpretty -r json-compilation-database -o compile_commands.json


if [ -f ./compile_commands.json ]
then
echo '-----编译数据生成完毕-----'
else
echo "-----生成编译数据失败-----"
return -1
fi

echo '-----分析中-----'

# 自定义排除警告的目录,将目录字符串加到数组里面
# 转化为:-e Debug.m -e Port.m -e Test
exclude_files=("Pods")

exclude=""
for i in ${
    
    exclude_files[@]}; do
exclude=${
    
    exclude}"-e "${
    
    i}" "
done
echo "排除目录:${exclude}"

# 分析reportType =~判断子字符串包含关系
if [[ ${
    
    reportType} =~ ${
    
    REPORT_PMD} ]]
then
nowReportType="-report-type html -o pmd.html"
else
nowReportType="-report-type Xcode"
fi
# 自定义report 如:
# nowReportType="-report-type html -o oclint_result.html"

echo "**************${nowReportType}"

# 生成报表
oclint-json-compilation-database ${
    
    exclude} -- \
${
    
    nowReportType} \
-rc=LONG_CLASS=1500 \
-rc=NESTED_BLOCK_DEPTH=5 \
-rc=LONG_VARIABLE_NAME=80 \
-rc=LONG_METHOD=200 \
-rc=LONG_LINE=300 \
-disable-rule ShortVariableName \
-disable-rule ObjCAssignIvarOutsideAccessors \
-disable-rule AssignIvarOutsideAccessors \
-max-priority-1=100000 \
-max-priority-2=100000 \
-max-priority-3=100000

#rm compile_commands.json
if [[ ${
    
    reportType} =~ ${
    
    REPORT_PMD} ]] && [ ! -f ./pmd.html ]
then
echo "-----分析失败-----"
return -1
else
echo '-----分析完毕-----'
return 0
fi
}

# 替换workspace的名字
myworkspace="OCLint.xcworkspace"
# 替换scheme的名字
myscheme="OCLint"
# 输出方式 Xcode/pmd
reportType="pmd"

oclintForProject ${
    
    myworkspace} ${
    
    myscheme} ${
    
    reportType}

下载oclint.sh文件,拖到Xcode工程目录下
在这里插入图片描述
终端切换进入工程目录,执行命令行

./oclint.sh

顺利执行后评审结果日志转换成html文件,打开界面如图(可视化效果更强):

参考链接

猜你喜欢

转载自blog.csdn.net/yanhaijunyan/article/details/114577323
今日推荐