【指导】iOS代码静态检查 -- oclint (+ xcodebuild + xcpretty + jenkins)
2016-01-04 15:47
537 查看
oclint扫描可按单文件扫描,这里我用的是全编的结果,通过全编结果的log,转换成json文件,然后扫描json文件,输出PMD格式的报告,在jenkins上显示:
1,前提:
需要安装xcodebuild、oclint、xcpretty
2,编译:
其中,set -o pipefail是为了编译挂了就退出;
-arch "i386" ONLY_ACTIVE_ARCH=YES VALID_ARCHS="i386 x86_64"是附带参数,视实际情况而定;
xcpretty是为了加速,并转化成json格式输出(老版本可用oclint-xcodebuild,但是自从oclint升级后,我就改用这个了,快),参考:点击打开链接
结果在build/reports/compilation_db.json。
3,oclint:
oclint在jenkins上显示是用了PMD格式发布,所以oclint中report-type是pmd:
4,jenkins:
在jenkins上,构建后操作选择Public PMD analysis results填写oclint路径即可
1,前提:
需要安装xcodebuild、oclint、xcpretty
2,编译:
set -o pipefail && xcodebuild -project 'GoodAir.xcodeproj' -configuration 'Debug' -sdk 'iphonesimulator' \ -arch "i386" ONLY_ACTIVE_ARCH=YES VALID_ARCHS="i386 x86_64" \ clean build | tee xcodebuild.log | xcpretty --report json-compilation-database
其中,set -o pipefail是为了编译挂了就退出;
-arch "i386" ONLY_ACTIVE_ARCH=YES VALID_ARCHS="i386 x86_64"是附带参数,视实际情况而定;
xcpretty是为了加速,并转化成json格式输出(老版本可用oclint-xcodebuild,但是自从oclint升级后,我就改用这个了,快),参考:点击打开链接
结果在build/reports/compilation_db.json。
3,oclint:
oclint在jenkins上显示是用了PMD格式发布,所以oclint中report-type是pmd:
maxPriority=15000 # Disable rules LINT_DISABLE_RULES="-disable-rule=LongClass \ -disable-rule=LongLine \ -disable-rule=LongMethod \ -disable-rule=LongVariableName \ -disable-rule=ShortVariableName \ -disable-rule=HighNcssMethod \ -disable-rule=DeepNestedBlock \ -disable-rule=TooManyFields \ -disable-rule=TooManyMethods \ -disable-rule=TooManyParameters \ -disable-rule=IvarAssignmentOutsideAccessorsOrInit" cp build/reports/compilation_db.json compile_commands.json oclint-json-compilation-database -e $WORKSPACE/ThirdParty -v -- -report-type pmd -o oclint.xml -max-priority-1=$maxPriority -max-priority-2=$maxPriority -max-priority-3=$maxPriority $LINT_DISABLE_RULES其中,因为用了clang-format格式化代码,所以oclint中关于格式方面的规则全部需要过滤掉,以免和clang-format冲突
4,jenkins:
在jenkins上,构建后操作选择Public PMD analysis results填写oclint路径即可
相关文章推荐
- UIStackView教程:了解Stack View
- phpQuery的用法
- 【数组】Unique Paths II
- 手把手带你入门之Swagger UI
- 键盘遮挡的处理。UITextField在实际的应用(综合应用, 有点小难度)
- <s:iterator value="pager.records" var="records" status="var">里的几个属性问题
- break、continue、return区别
- 使用UINavigationController时,子页面判断是从哪个页面push进来的
- iOS开发UI篇—字典转模型
- Build.VERSION.SDK_INT
- UITableViewCell的accessoryType属性
- UIBarButtonItem-添加自定义Left或者Right按钮 <总结>
- 【数组】Unique Paths
- 磁盘挂载,磁盘格式化,获取磁盘挂载的UUID,光驱挂载与卸载
- 详解QUiLoader 动态加载.ui文件
- QT运行时加载UI文件
- iOS---限制UITextView中的字数
- iOS之UITextField限制字数
- AFNetwork 3.0 源码解读(三)AFURLRequestSerialization
- semantic ui 下拉菜单支持全文搜索/添加列表项/更改事件