美文网首页iOS开发暂时没看却需要看的iOS精英班
让XCode自动CodeReview你的代码-OCLint使用

让XCode自动CodeReview你的代码-OCLint使用

作者: alanwangmodify | 来源:发表于2017-09-27 20:41 被阅读467次

    前言

    OCLint 是一个静态分析代码的工具,支持自定义规则,可以很好地帮助我们规范代码,这篇文章主要介绍通过OCLint让XCode来帮你Code Review,规范代码。
    OCLint相关的详细内容也可以到OCLint官网上查看。

    安装OCLint 和 xcpretty

    这里需要安装OCLintxcpretty 工具

    1、 安装xcpretty

    gem安装xcpretty

    sudo gem install xcpretty
    

    用sudo是防止一些权限出现问题

    2、安装OCLint

    安装OCLint有两种常用的方法:

    1)通过安装包:

    从oclint的github项目链接中下载安装包oclint-0.10.3-x86_64-darwin-15.5.0.tar.gz.
    解压后在当前用户的.bashrc中配置环境变量

    OCLINT_HOME=/pathexport PATH=$PATH:OCLINT_HOME/bin
    

    然后source .bashrc即可

    2)通过Homebrew
    brew tap oclint/formulae
    brew install oclint
    
    3)确认安装成功

    运行oclint确认环境配置正确

    $ oclint
    

    如果展示以下内容即为安装成功:

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

    OCLint 的使用

    这里介绍一些简单常用的用法,足够应对很多场景,其他详细用法可以到OCLint Manual上查看。


    OCLint 有三个指令:oclintoclint-json-compilation-databaseoclint-xcodebuild

    1、oclint:常规核心指令。
    2、oclint-json-compilation-database:从编译好的compile_commands.json 文件中读取配置信息并执行 oclint。
    3、oclint-xcodebuild:主要用于生成compile_commands.json文件,现在已经不进行维护了,我们可以用xcpretty替代,来生成json文件。

    oclint指令

    使用语法

    oclint [options] <source> -- [compiler flags]
    

    [options]为一些参数选项,可以是规则加载选项、报告形式选项等:

    1、 -R <路径> : 检测所用的规则的路径,默认路径$(/path/to/bin/oclint)/../lib/oclint/rules
    2、-disable-rule <规则名>: 让相对应的规则失效(OCLint 规则列表)。
    3、-rc <参数>=<值> :修改阈值
    4、-report-type <报告类型>,有"text"、“html”、“json”、“pmd”、“xcode”几个类型
    5、-o <路径> 报告生成路径。

    eg:

    oclint  -R  /path/to/rules   -disable-rule ObjCAssignIvarOutsideAccessors -report-type xcode 
    
    oclint-json-compilation-database 指令

    这是我们主要用到的指令,它是oclint 指令的升级版,使用起来相对 oclint 指令简单方便。
    可以通过 -- 的方式在指令的最后加上oclint 选项。

    oclint-json-compilation-database 指令有过滤文件选项
    -i :包含进某些文件
    -e : 过滤掉某些文件
    eg:

    # 排除Pods 里的文件
    oclint-json-compilation-database -e Pods 
    # 包含进Pods里的文件
    oclint-json-compilation-database -i Pods
    
    oclint-xcodebuild 指令。

    因为oclint-xcodebuild 指令已经不再维护,实际应用中用xcpretty代替,所以这里就不进行介绍。

    其他命令工具:xcodebuild 和 xcpretty

    xcodebuild

    xcodebuild是苹果发布自动构建的工具,可以通过命令行脚本的方式编译、打包Xcode 工程。
    可以在终端输入man xcodebuild来查询相关用法

    xcpretty

    用xcpretty生成OClint 解析用的json 文件
    这里用xcpretty是因为oclint-xcodebuild不再维护了,在XCode 8之后采用xcpretty来生成。

    用XCode检测代码

    首先在targets点添加按钮:



    在Cross-platform选项中,选“Aggregate”,然后命名为"OCLint":


    接着选中OCLint Target,进入Build Phases选项,点左上角的加号,选择“New Run Script Phase”


    然后输入脚本即可:


    示例脚本:

    source ~/.bash_profile
    cd ${SRCROOT}
    xcodebuild clean
    xcodebuild  -workspace demo.xcworkspace -scheme demo | xcpretty -r json-compilation-database --output compile_commands.json
    oclint-json-compilation-database -v \
    -e Pods \
    -e MGLivenessDetection \
    -e MGBaseKit \
    -e MGIDCard \
    oclint_args -- -report-type xcode \
    -disable-rule ObjCAssignIvarOutsideAccessors \
    -disable-rule ShortVariableName \
    -rc=MINIMUM_CASES_IN_SWITCH=3 \
    -rc=CYCLOMATIC_COMPLEXITY=10 \
    -rc=LONG_CLASS=700 \
    -rc=LONG_LINE=200 \
    -rc=NCSS_METHOD=40 \
    -rc=NESTED_BLOCK_DEPTH=5 \
    -rc=TOO_MANY_FIELDS=20 \
    -rc=TOO_MANY_METHODS=30 \
    -rc=TOO_MANY_PARAMETERS=6
    exit
    

    接着选择OCLint Scheme,Command+B就可以执行了
    在执行前最好删除drivedata里面的数据缓存,以保证不会解析到旧的编译内容。
    编译成功后Xcode上会在不符合规则的代码上显示Warning:

    参考链接:

    iOS 工程自动化 - OCLint 使用详解
    用OCLint给iOS代码做静态分析

    相关文章

      网友评论

      • 风铃的翼:你好,用Xcode9进行代码做静态分析的时候,报错Error: compile_commands.json not found at current location.,在网上找解决方案说“找不到complie_commands.json文件,使用xcpretty生成的文件名是:compilation_db.json,在目录build/reports目录中。

        因此需要把xcpretty生成的文件compilation_db.json复制到当前目录下。重命名为compile_commands.json。”但是在目录build下没有reports目录,这是什么原因?
        风铃的翼:@alanwangmodify 果然是的,在脚本里面为什么不执行,这是什么原因?
        风铃的翼:@alanwangmodify 好的,我试一下
        alanwangmodify:@风铃的翼 应该是生成json文件没成功。你可以试一下手动的在终端,进入你项目的文件夹运行"xcodebuild -workspace demo.xcworkspace -scheme demo | xcpretty -r json-compilation-database --output compile_commands.json
        "试一下。

      本文标题:让XCode自动CodeReview你的代码-OCLint使用

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