【测试左移】基于oclint的IOS静态代码扫描实战

一、环境准备

在Mac系统上,安装oclint工具

brew tap oclint/formulae
brew install oclint
sudo gem install xcpretty
brew install xctool

二、使用

新建一个demo工程,项目结构如下:
在这里插入图片描述

在xcworkspace文件同级目录下,新增一个文件 oclint.sh,内容如下

#!/bin/bash


myworkspace=qatest.xcworkspace
myscheme=testaaa

# clean cache
rm -rf ~/Library/Developer/Xcode/DerivedData/; 
rm -rf compile_commands.json;
rm -rf oclint_result.html;

# clean -- build -- OCLint analyse
echo 'start analyse';
xcodebuild -workspace $myworkspace -scheme $myscheme clean&&
xcodebuild -workspace $myworkspace -scheme $myscheme \
-configuration Debug GCC_PRECOMPILE_PREFIX_HEADER=YES CLANG_ENABLE_MODULE_DEBUGGING=NO COMPILER_INDEX_STORE_ENABLE=NO \
-destination 'platform=iOS Simulator,name=iPhone 13' \
| xcpretty -r json-compilation-database -o compile_commands.json&&
oclint-json-compilation-database -e Pods -e node_modules -- \
-report-type html \
-rc LONG_LINE=300 \
-rc LONG_METHOD=200 \
-rc LONG_VARIABLE_NAME=40 \
-rc LONG_CLASS=3000 \
-max-priority-1=1000 \
-max-priority-2=1000 \
-max-priority-3=2000 \
-disable-rule=UnusedMethodParameter \
-disable-rule=AvoidPrivateStaticMembers \
-disable-rule=ShortVariableName \
-allow-duplicated-violations=false >> oclint_result.html; \
echo 'end analyse';

# echo result
if [ -f ./oclint_result.html ]; 
then echo 'done';
else echo 'failed';
fi

运行oclint.sh:chmod 777 oclint.sh && ./oclint.sh

此时,在项目目录下,会生成oclint_result.html 报告文件,内容如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
OCLint的分析结果:
优先级的级别是从Priority 1, Priority 2, Priority 3 依次降低的
Total Files 总文件数
Files with Violations 违规文件数
Compiler Warnings 表示项目中的警告⚠️
Compiler Errors 表示编译错误
Location 表示警告的位置
报告中的描述其实非常清晰,一般找到代码位置,结合代码理解

扫描结果提供给Dev分析,结合项目具体情况,看是否需要优化。

三、规则详情

OCLint 22.02 includes 72 rules. Rule Index
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、遇到的问题

1、xcode-select: error: tool ‘xcodebuild’

详情:
运行命令:xcodebuild -workspace $myworkspace -scheme $myscheme clean&& xcodebuild -workspace $myworkspace -scheme $myscheme

出现错误:
xcode-select: error: tool ‘xcodebuild’ requires Xcode, but active developer directory ‘/Library/Developer/CommandLineTools’ is a command line tools instance

解决办法:
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

2、Compilation contains multiple jobs
解决办法:添加编译参数:COMPILER_INDEX_STORE_ENABLE=NO

3、xcodebuild 后,compile_commands.json 文件内容为空
原因是scheme没有指定对,导致编译失败

五、参考文档

1、云音乐iOS端代码静态检测实践
2、OCLint - Objective-C 代码检查

相关推荐

  1. DevOps与测试方法

    2024-04-29 16:00:04       44 阅读
  2. 基于三点法测距,MATLAB函数

    2024-04-29 16:00:04       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-29 16:00:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-29 16:00:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-29 16:00:04       82 阅读
  4. Python语言-面向对象

    2024-04-29 16:00:04       91 阅读

热门阅读

  1. Hillstone 各系列设备Console波特率说明

    2024-04-29 16:00:04       31 阅读
  2. CentOS7 命令行下连接WiFi

    2024-04-29 16:00:04       31 阅读
  3. 【HTML】实现 pre 标签内容超出自动换行

    2024-04-29 16:00:04       32 阅读
  4. python 装饰器

    2024-04-29 16:00:04       32 阅读
  5. rk356x 关于yocto编译linux及bitbake实用方法

    2024-04-29 16:00:04       29 阅读
  6. 【c++】cpp类和对象

    2024-04-29 16:00:04       23 阅读
  7. ffplay支持mac/iOS硬解码实践

    2024-04-29 16:00:04       37 阅读
  8. Lua中的数据类型:table

    2024-04-29 16:00:04       31 阅读
  9. EfficientSam封装API

    2024-04-29 16:00:04       37 阅读