美文网首页
iOS 代码自动检查工具 - OCLint (记录下主要步骤)

iOS 代码自动检查工具 - OCLint (记录下主要步骤)

作者: wanglei1702 | 来源:发表于2019-05-23 20:07 被阅读0次

    第1步:安装 oclint

    brew install oclint

    第2步:构建 Xcode 工程

    用命令行工具 xcodebuild
    命令格式为 xcodebuild [options]
    由于需要将输出的日志保存起来,所以需要运行如下命令:
    xcodebuild [options] | tee xcodebuild.log
    完整例子:Xcode 工程名为 OCLintDemo,构建命令如下:
    xcodebuild build -scheme OCLintDemo | tee xcodebuild.log
    日志会在终端中输出,同时会保存到 xcodebuild.log 文件中。

    第3步:格式化日志

    用 OCLint 的 oclint-xcodebuild 命令将第2步的日志文件 xcodebuild.log 格式化为 JSON 格式的文件, 运行 oclint-xcodebuild 后自动创建 compile_commands.json 文件。

    NOTE:由于 oclint-xcodebuild 已经不再维护,推荐使用 xcpretty 程序,安装方式:
    gem install xcpretty
    这个后面再详说。

    第4步:分析日志

    这一步也即是分析代码。
    运行 oclint-json-compilation-database 命令,即会输出分析的结果。包含的信息有不符合规范的个数、在文件中的位置,规范的类别等等。默认是在终端中输出,也可以指定参数按特定格式输出到文件中,如生成 HTML 文件:
    oclint-json-compilation-database -- -report-type=html -o result.html
    报告内容长这样:

    代码分析报告.png

    其他

    规则文件目录
    /usr/local/Cellar/oclint/0.13/lib/oclint/rules
    这个目录下是一些.dylib文件,oclint 就是基于这些文件对代码进行规则检查的。如 libLongLineRule.dylib,是单行字符数限制规则。

    以上步骤可以写到一个 shell 脚本文件中,在 Xcode 工程根目录中执行脚本就可以自动生成报告。脚本代码如下(工程名为 OCLintTest):

    #/usr/bin/bash
    
    # 先清除缓存
    echo 'CLEANING DERIVED DATA...'
    xcodebuild clean -scheme OCLintTest
    
    # 第1步,构建Xcode工程,生成.log文件
    echo 'BUILDING...'
    xcodebuild_log_file_name=xcodebuild.log
    xcodebuild build -scheme OCLintTest | tee $xcodebuild_log_file_name
    
    # 第2步,将第1步的.log格式化为json
    echo 'GENERATING JSON...'
    oclint-xcodebuild
    echo 'GENERATE SUCCEEDED'
    
    # 第3步,分析日志,生成报告
    echo 'ANALYZING...'
    report_file_name=OCLintTest_report.html
    oclint-json-compilation-database -- -report-type html -o $report_file_name
    echo 'ANALYZE SUCCEEDED'
    echo 'REUSLT FILE NAME : '$report_file_name
    
    rm $xcodebuild_log_file_name # 删除中间文件
    rm compile_commands.json
    
    open $report_file_name
    
    

    设置系统提供的规则阈值方法如下:

    -rc <threshold_name>=<new_value>
    -rc CYCLOMATIC_COMPLEXITY = 15 -rc LONG_LINE = 50```
    

    系统提供的规则,可以设定阈值的如下:
    名称 描述 默认阈值
    CYCLOMATIC_COMPLEXITY 方法的循环复杂性(圈负责度) 10
    LONG_CLASS C类或Objective-C接口,类别,协议和实现的行数 1000
    LONG_LINE 一行代码的字符数 100
    LONG_METHOD 方法或函数的行数 50
    LONG_VARIABLE_NAME 变量名称的字符数 20
    MAXIMUM_IF_LENGTH if希块的行数 15
    MINIMUM_CASES_IN_SWITCH switch语句中的case数 3
    NPATH_COMPLEXITY 方法的NPath复杂性 200
    NCSS_METHOD 一个没有注释的方法语句数 30
    NESTED_BLOCK_DEPTH 块或复合语句的深度 5
    SHORT_VARIABLE_NAME 变量名称的字符数 3
    TOO_MANY_FIELDS 类的字段数 20
    TOO_MANY_METHODS 类的方法数 30
    TOO_MANY_PARAMETERS 方法的参数数 10

    相关文章

      网友评论

          本文标题:iOS 代码自动检查工具 - OCLint (记录下主要步骤)

          本文链接:https://www.haomeiwen.com/subject/fkxizqtx.html