学习OCLint的使用

最近看了下自动代码静态分析的工具,学习了一下OCLint的使用,将整个的安装、脚本记录如下。

一、OCLint 的下载和安装

有3种方式安装,分别为 Homebrew、源代码编译安装、下载安装包安装。 区别:

  • 如果需要自定义 Lint 规则,则需要下载源码编译安装
  • 如果仅仅是使用自带的规则来 Lint,那么以上3种安装方式都可以

1、这里我选择用Homebrew进行安装

brew tap oclint/formulae   
brew install oclint

验证下 OCLint 是否安装成功。输入 oclint --version

  1. xcodebuild 的安装

xcode 下载安装好就已经成功安装了

  1. 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

你可能感兴趣的:(学习OCLint的使用)