iOS开发-OCLint如何自定义静态扫描代码规则
一、开发准备
1、MacOS一般默认都有Xcode,Git和Ruby
2、下载OCLint代码
![](https://img.haomeiwen.com/i4374748/4bc513299cc8b220.png)
下载到本地的目录如下:
![](https://img.haomeiwen.com/i4374748/eeecc08b5de9bcbd.png)
3、cd进入oclint-scripts文件加,执行./make
如果没有报错的话,大约30分钟后编译完成,大概过程是下载LLVM、clang的源代码,编译LLVM、clang与OCLint的默认规则。
![](https://img.haomeiwen.com/i4374748/e586090c6f81612f.png)
不过一般都会遇到一些问题:
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、报错ninjia not found
brew install ninjia
CMake + Ninja OSX issue
4、创建自定义的规则
在oclint-scripts目录下OCLint提供了一个叫scaffoldRule的脚本程序。可以传入要生成的规则名,级别,类型,脚本就会在目录oclint-rules/rules/custom/自动生成一个模板代码,并且加入编译路径中。
举个例子:
![](https://img.haomeiwen.com/i4374748/778a64f8eb6fcead.png)
# 生成一个名为myDemoRule类型是ASTVisitor的规则模板
oclint-scripts/scaffoldRule myDemoRule -t ASTVisitor
执行命令后:
![](https://img.haomeiwen.com/i4374748/a9d825f7daecd148.png)
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
![](https://img.haomeiwen.com/i4374748/800a8d276d3d8c08.png)
![](https://img.haomeiwen.com/i4374748/efed30e9e8c500c7.png)
编译出来的动态库
![](https://img.haomeiwen.com/i4374748/f585a9af4ff43fa1.png)
![](https://img.haomeiwen.com/i4374748/563e81e970e2602b.png)
然后将编译好的动态库放到oclint的规则文件夹,这样就可以使用自己新加的自定义规则了
路径:/usr/local/Cellar/oclint/0.13/lib/oclint/rules
![](https://img.haomeiwen.com/i4374748/696cd9d23a1f4322.png)
参考文章
OCLint 如何自定义规则