iOS开发-OCLint如何自定义静态扫描代码规则

一、开发准备

1、MacOS一般默认都有Xcode,Git和Ruby

2、下载OCLint代码

OCLint-Github地址

iOS开发-OCLint如何自定义静态扫描代码规则_第1张图片
选择下载

下载到本地的目录如下:


iOS开发-OCLint如何自定义静态扫描代码规则_第2张图片
目录

3、cd进入oclint-scripts文件加,执行./make

如果没有报错的话,大约30分钟后编译完成,大概过程是下载LLVM、clang的源代码,编译LLVM、clang与OCLint的默认规则。


iOS开发-OCLint如何自定义静态扫描代码规则_第3张图片
编译结果

不过一般都会遇到一些问题:

1、如果没有安装cmake一般都会报错

cmake官网,下载Mac操作系统对应的安装包。安装完成之后,运行cmake图形界面程序,在左上角的选项栏中选择Tools,点击How to install for Command Line Use。
之后弹出来一个消息框:

One may add CMake to the PATH:
PATH="/Applications/CMake.app/Contents/bin":"$PATH"
Or, to install symlinks to '/usr/local/bin', run:
sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install
Or, to install symlinks to another directory, run:
sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install=/path/to/bin

三种安装cmake command line tool 的方法,即终端能够识别cmake命令的方法。复制sudo"/Applications/CMake.app/Contents/bin/cmake-gui" --install 命令到终端,然后运行,当然你也可以打出来。 之后再在终端打cmake命令,就不会再提示什么command not found之类的错误了,到此安装成功了。

在Mac安装cmake command line tool
cmake :command not found解决

2、报错fatal error: 'openssl/ssl.h' file not found

brew install openssl
参考文章:
fatal error: openssl/ssl.h 安装失败 解决方案
参考2

3、报错ninja not found

brew install ninja
CMake + Ninja OSX issue

4、创建自定义的规则

在oclint-scripts目录下OCLint提供了一个叫scaffoldRule的脚本程序。可以传入要生成的规则名,级别,类型,脚本就会在目录oclint-rules/rules/custom/自动生成一个模板代码,并且加入编译路径中。
举个例子:


iOS开发-OCLint如何自定义静态扫描代码规则_第4张图片
scaffoldRule脚本
# 生成一个名为myDemoRule类型是ASTVisitor的规则模板

oclint-scripts/scaffoldRule myDemoRule -t ASTVisitor

执行命令后:


iOS开发-OCLint如何自定义静态扫描代码规则_第5张图片
生成的新规则

5、编译自定义的规则成动态库

编译方法1:重新执行oclint-scripts/make

这个太慢了,不推荐,很不方便。

编译方法2:将规则相关的内容整合成一个Xcode工程

将规则相关的内容整合成一个Xcode工程,并且我们的每个规则都是一个scheme,编译时可以只选择编译那个选择的规则生成对应的dylib。
OCLint工程使用CMakeLists的方式维护各个文件的依赖关系,可以使用CMake自带的功能将这些CMakeLists生成一个xcodeproj工程文件。

在OCLint源码目录下建立一个文件夹oclint-xcodeproject

xcode-debug.sh

#! /bin/sh -e

cmake -G Xcode -D CMAKE_CXX_COMPILER=../build/llvm-install/bin/clang++  -D CMAKE_C_COMPILER=../build/llvm-install/bin/clang -D OCLINT_BUILD_DIR=../build/oclint-core -D OCLINT_SOURCE_DIR=../oclint-core -D OCLINT_METRICS_SOURCE_DIR=../oclint-metrics -D OCLINT_METRICS_BUILD_DIR=../build/oclint-metrics -D LLVM_ROOT=../build/llvm-install/ ../oclint-rules

执行命令

bash xcode-debug.sh
iOS开发-OCLint如何自定义静态扫描代码规则_第6张图片
构建的Xcode工程
iOS开发-OCLint如何自定义静态扫描代码规则_第7张图片
自定义的规则

编译出来的动态库


iOS开发-OCLint如何自定义静态扫描代码规则_第8张图片
动态库

iOS开发-OCLint如何自定义静态扫描代码规则_第9张图片
自定义

然后将编译好的动态库放到oclint的规则文件夹,这样就可以使用自己新加的自定义规则了
路径:/usr/local/Cellar/oclint/0.13/lib/oclint/rules

iOS开发-OCLint如何自定义静态扫描代码规则_第10张图片
路径

参考文章
OCLint 如何自定义规则

iOS 持续集成系列 - 自动化 Code Review

你可能感兴趣的:(iOS开发-OCLint如何自定义静态扫描代码规则)