OClint的使用

关于OCLint

  • OCLint 是基于LLVM/Clang(前端编译)而开发的代码静态分析工具。
  • OCLint可用的检查规则有70+条。其原理:通过扩展Clang 的checkers,Clang整个静态分析器的入口是AnalysisConsumer,接着会调HandleTranslationUnit()方法进行AST层级进行分析或者进行path-sensitive分析。默认会按照内联的path-sensitive分析,构建CallGraph,从顶层调用者按照调用的关系来分析,具体是使用的工作列表中算法,从EntryBlock开始一步步的模拟,这个过程叫做分析。
OCLint 包含三个命令行指令:
  • oclint:基础指令。通过这个指令可以指定加载验证规则、编译代码、分析代码和生成报告。
  • oclint-json-compilation-database:高级指令。通过这个指令可以从 compile_commands.json 文件中读取配置信息并执行 oclint。
  • oclint-xcodebuild:通过这个指令可以从 Xcode 的 xcodebuild.log 文件导出编译选项并保存成 JSON Compilation Database 格式。然后把保存到 compile_commands.json 文件中(OCLint team好久不维护了,采用xcpretty替换)。
OCLint 怎么工作:

OClint的使用
文章图片
图片 1.png
OCLint 安装部署:
  • 将oclint-0.13.1 和 xcpretty-0.3.0 移动到/usr/local目录下。
    终端执行命令:
    sudo mv oclint-0.13.1 /usr/local
    sudo mv xcpretty-0.3.0 /usr/local
    提示输入密码时,输入电脑的登录密码
  • 将oclint 和 xcpretty的执行文件路径添加到PATH中。
    编辑用户根目录下的.bash_profile 文件,终端输入open .bash_profile往里面添加下面3行。如果文件不存在就创建一个(用touch ~/.bash_profile)
    OCLINT_HOME=/usr/local/oclint-0.13.1
    XCPRETTY_HOME=/usr/local/xcpretty-0.3.0
    export PATH=$PATH:$OCLINT_HOME/bin
    export PATH=$PATH:$XCPRETTY_HOME/bin
  • 验证环境:打开在终端执行 source ~/.bash_profile (让.bash_profile里的修改立即生效。电脑开机登录后会自动加载该文件,以后无需执行)。执行oclint -version 和 xcpretty -version查看
对iOS项目进行OCLint检查 :
1.将编写好的脚本文件移动到项目根目录下 ,终端运行脚本
2.修改oclint-ignore文件。这是忽略配置文件,可以通过文本工具编辑。里面已经添加了默认的忽略目录,可以根据项目自行增加或删减。
3.修改oclint-settings文件。 这是oclint依赖的项目编译配置文件,内容如下图所示,特别注意scheme和sdk的配置
项目配置规范
  • 路径配置添加上$(PROJECT_DIR)
    target里Paths相关的配置,如果是相对路径请修改为绝对路径,如下图所示,其中$(PROJECT_DIR) 表示 .xcodeproj 所在目录,这里是myproject.xcodeproj的所在路径:
    /Users/hzh/works/iOS-UI/myproject

    OClint的使用
    文章图片
    image.png
  • 引用自己项目里的文件使用 #import "XXX.h"
    如在myproject项目里,引用myproject里的头文件
    #import "WKAlertController.h" //正确
    #import //不符合规范
    #import //不符合规范
    myproject里引用其它库里的文件,使用#import
    #import //正确
【OClint的使用】FAQ
  • xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
    解决:终端执行命令
    sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

    推荐阅读