美文网首页
iOS - OCLint静态代码分析

iOS - OCLint静态代码分析

作者: 静谧的橘子 | 来源:发表于2017-11-30 17:09 被阅读37次

    来自:http://oclint.org
    OCLint 就是一个建立在 Clang 上的工具,能够发现代码中潜在的问题,可以用来提高质量和减少缺陷, 它目前支持C, C++, Objective-C语言

    OCLint可以发现这些问题

    可能的bug - 空的 if / else / try / catch / finally 语句
    未使用的代码 - 未使用的局部变量和参数
    复杂的代码 - 高圈复杂度, NPath复杂, 高NCSS
    冗余代码 - 多余的if语句和无用的括号
    坏味道的代码 - 过长的方法和过长的参数列表
    不好的使用 - 倒逻辑和入参重新赋值
    OCLint优点

    OCLint有更多的检查规则和定制,和很多工具集成,也同样可用于持续集成。

    安装

    本来打算使用工具Homebrew安装的,无奈败给公司的网络,所以打算手动安装。
    命令总结一下

    brew tap oclint/formulae
    brew install oclint
    

    首先下载oclint-0.13-x86_64-darwin-17.0.0.tar.gz的安装包,然后解压。
    根据以下命令将二进制文件拷贝到系统文件夹中:

    cp bin/oclint* /usr/local/bin/
    
    cp -rp lib/* /usr/local/lib/
    
    cp -rp include/* /usr/local/include/
    

    不过这是直接对系统路径进行更改,它可能会破坏其他工具或系统库的依赖关系。如果没有信心,不确定是否会破坏其他的依赖,就不要选这种了。

    安装 xcpretty

    用于对xcodebuild的输出进行格式化

    gem install xcpretty
    

    不过我这里因为很久没修改过镜像了,所以认证失败,接下里修改一下镜像

    gem source -l //先查看一下目前的镜像源
    
    *** CURRENT SOURCES ***
    
    https://ruby.taobao.org/
    
    gem sources --add https://gems.ruby-china.org/ --remove https://ruby.taobao.org/
    //添加新的镜像源,删除旧的镜像源
    gem source -l
    *** CURRENT SOURCES ***
    
    https://gems.ruby-china.org/
    

    修改成功,然后下载xcpretty

    gem install xcpretty
    

    使用

    首先进到工程的根目录下

    xcodebuild -workspace 工程名称.xcworkspace/ -scheme scheme名称 analyze 
    | tee xcodebuild.log 
    | xcpretty --report json-compilation-database
    
    如果没有用pod的话
    
    xcodebuild -target 工程名称 -scheme scheme名称 analyze 
    | tee xcodebuild.log 
    | xcpretty --report json-compilation-database
    

    会在根目录下生成xcodebuild.log 文件,以及build文件夹,文件夹内report文件会生成compile_db.json文件

    //清空之前编译过的
    xcodebuild clean -workspace 工程名称.xcworkspace/ -scheme scheme名称
    
    //将文件移动到根目录,并修改文件名
    mv ./build/reports/compile_db.json ./compile_commands.json
    
    //将json文件转换成html文件
    oclint-json-compilation-database -e Pods -- -report-type=html -o oclint_result.html
    

    然后项目目录下就会出现oclint_result.html文件,双击打开就可以看到分析结果:
    优先级的级别是从Priority 1, Priority 2, Priority 3 依次降低的;
    Total Files 总文件数;
    Files with Violations 违规文件数;
    Compiler Warnings 表示项目中的警告;
    Compiler Errors 表示编译错误;
    Location 表示警告的位置;

    Warning

    oclint: error: one compiler command contains multiple jobs:
    在进行最后一步转换成html的时候,会碰到这个error,一般是编译Pods 会碰到的问题,
    首先在Podfile添加一下代码:
    post_install do |installer|
        installer.pods_project.targets.each do |target|
            target.build_configurations.each do |config|
                config.build_settings['COMPILER_INDEX_STORE_ENABLE'] = "NO"
            end 
        end
    end 
    然后将项目工程中的所有COMPILER_INDEX_STORE_ENABLE这个选项都设置为NO,这样就可以正常的执行了
    

    其他属性:

    # --命名
    # 变量名字最长字节
    #-rc=LONG_VARIABLE_NAME=1
    # 变量名字最短字节
    #-disable-rule ShortVariableName 
    # --size
    # 圈复杂度
    #-re=CYCLOMATIC_COMPLEXITY=1
    # 每个类行数
    #-rc=LONG_CLASS=1
    # 每行字节数量
    #-rc=LONG_LINE=1
    # 每个方法行数
    #-rc=LONG_METHOD=1
    # 忽略注释后括号后的有效代码行数
    #-rc=NCSS_METHOD=1
    # 嵌套深度
    #-rc=NESTED_BLOCK_DEPTH=1
    # 字段数量
    #-rc=TOO_MANY_FIELDS=1
    # 方法数量
    #-rc=TOO_MANY_METHODS=1
    # 方法参数
    #-rc=TOO_MANY_PARAMETERS=1
    

    相关文章

      网友评论

          本文标题:iOS - OCLint静态代码分析

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