OCLint是一个静态代码分析工具,提高质量和减少缺陷通过检查C 、C++ 和Objective-C 代码和寻找潜在的问题,如:
注:* NPath 复杂度是一个方法中各种可能的执行路径总和 ; NCSS * 有效代码行 以上翻译自 OCLint官网
使用第三方的软件会比使用xcodebuild方便些 最新xctool的build方法已经弃用,不能配合OCLint使用,推荐使用 xcpretty
// 安装OCLint brew tap oclint/formulae brew install oclint // 安装xcpretty gem install xcpretty 复制代码
如果未安装 home brew ,自行去官网按提示安装
// 以后可能需要更新 brew update brew upgrade oclint 复制代码
在终端进入项目目录,然后替换workspace的名字和scheme的名字,将修改好的命令粘贴到终端执行,等待命令执行完毕
myworkspace=haha.xcworkspace # 替换workspace的名字 myscheme=haha # 替换scheme的名字 xcodebuild -workspace $myworkspace -scheme $myscheme clean&& xcodebuild -workspace $myworkspace -scheme $myscheme / -configuration Debug / | xcpretty -r json-compilation-database -o compile_commands.json&& oclint-json-compilation-database -e Pods -- / -report-type html -o oclint_result.html / -rc LONG_LINE=200 / -max-priority-1=100000 / -max-priority-2=100000 / -max-priority-3=100000; / rm compile_commands.json; if [ -f ./oclint_result.html ]; then echo '-----分析完毕-----' else echo "-----分析失败-----"; fi 复制代码
中间可能会在 Build Succeeded
后面等待一段时间,这是因为OCLint在分析文件 等待命令执行完成,终端会打印出 -----分析完毕-----
字样, 打开项目目录,会看到目录下会多出一个** oclint_result.html **的文件
如果没有使用cocoapods,则去掉 myworkspace=haha.xcworkspace
、 -workspace $myworkspace
、 -workspace $myworkspace
,然后再在终端执行
另外可以自己建一个xx.sh的文件,将上面代码粘贴进去,每次在命令行进入xx.sh所在目录执行 bash xx.sh
就可以了
双击打开oclint_result.html文件,样式如下 OCLint的分析结果: 优先级的级别是从 Priority 1, Priority 2, Priority 3
依次降低的 Total Files
总文件数 Files with Violations
违规文件数 Compiler Warnings
表示项目中的警告:warning: Compiler Errors
表示编译错误 Location
表示警告的位置 报告中的描述其实非常清晰,一般找到代码位置,结合代码理解下,自己基本都能明白了 可以直接复制路径到Chrome打开查看,右击查看源码就有行号
上面的命令中 -e Pods
表示移除Pods文件夹里代码的分析, 如果有继续 -e Debug.m
-report-type html
表示分析后输出的文件类型为HTML, 查看其他支持的文件类型 -o oclint_result.html
表示输出到 oclint_result.html
这个文件中() -rc LONG_LINE=200
表示每行最大字节长度为200(默认值为100,感觉在OC中100完全不够用啊)
# --命名 # 变量名字最长字节 #-rc=LONG_VARIABLE_NAME=20 / # 变量名字最短字节 #-disable-rule ShortVariableName / # --size # 圈复杂度 #-re=CYCLOMATIC_COMPLEXITY=10 / # 每个类最行数 #-rc=LONG_CLASS=700 / # 每行字节数量 #-rc=LONG_LINE=200 / # 每个方法行数 #-rc=LONG_METHOD=80 / # 忽略注释后括号后的有效代码行数 #-rc=NCSS_METHOD=40 / # 嵌套深度 #-rc=NESTED_BLOCK_DEPTH=5 / # 字段数量 #-rc=TOO_MANY_FIELDS=20 / # 方法数量 #-rc=TOO_MANY_METHODS=30 / # 方法参数 #-rc=TOO_MANY_PARAMETERS=6 复制代码
oclint-json-compilation-database命令手册 oclint命令手册 OCLint自定义规则介绍 OCLint全部规则介绍 文档里面有每个规则的demo和对应的命令名字,上面没介绍到的大家可以去文档查询
这里有官网指导网址,十分简单 oclint-docs.readthedocs.io/en/stable/g… 但是有点小坑:可能出现下面错误
此时你需要在xcode的脚本的最前面,加上:
# 指定编码 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 LC_ALL= 复制代码
我写了一个简单的脚本文件 oclint_xcode 大家可以自己下载,可替换的变量,已经在脚本中使用注释标注了出来
创建一个OCLint的Aggregate,将脚本放到项目工程根目录下,在Run Script中加入以下代码,点击运行即可
bash ./oclint.sh 复制代码
######1. 创建一个 PMDOclint.sh
的文件, 将下述代码拷贝到文件中,并将文件放入到jenkins的根目录下 (例如我的就是 /Users/buildWork/.jenkins/PMDOclint.sh
) , 我自己使用的脚本放到了仓库中 oclint_apply ,可以去里面下载 apply_jenkins/PMDOclint.sh
######2. jenkins需要安装 PMD Plugin
插件 ######3. jenkins新建一个项目,Git配置成需要代码分析的代码库 ######4. 剩下的按照下图配置,(将 PMDOclint.sh
放到Jenkins的主目录,如果出现问题,涉及到的路径,请注意检查一下)
######5. 效果
#### Warning:exclamation:️ (一). xcodebuild命令不好用的时候,使用`com + opt + shift + k` 和 `com + shift + k` 有80%的可能解决:joy: (二). `oclint: error: one compiler command contains multiple jobs:` 解决方案: ###### 1. 如果电脑里面安装了两个Xcode的话可能会报上面错误,删掉其他只剩一个 ###### xcode9以后(OCLint version 0.13, Version 9.2 beta (9C34b) 测试可用): ###### 2.1 更新到最新的`oclint`, `brew upgrade oclint` ###### 2.2 去github下载最新的[oclint.sh](https://github.com/harddog/oclint_apply),替换掉旧的 ###### 3. 试试手动将 工程=> `Build Settings` => 搜索`COMPILER_INDEX_STORE_ENABLE` 该配置设成NO
[oclint_apply仓库地址](https://github.com/harddog/oclint_apply)