用FauxPas找到潜在Bug

简介:

Faux Pas是一个Xcode辅助工具,检查iOS或者Mac项目,找到潜在bug,以及可维护性和风格问题。提供了92条规则可供挑选,支持GUI和CLI。目前发布了beta版,提供30天试用。

Faux Pas Homepage Faux Pas Donwload

亲身试用后,发现了项目中的多处问题。一些需要手动查找的问题,在这里都得到了检查。同时也提供了代码风格的建议和一些细节的优化建议。

功能

  • 控制潜在bug
  • 查找资源文件错误
  • 查找本地化错误
  • 发现版本控制错误
  • 学习和实施最佳实践
  • 实施代码风格
  • 代码审查清单
  • 92条规则可供挑选
  • 提供GUI或者CLI
  • 在Xcode构建时运行
  • 连接外部工具,支持导出结果和自定义脚本
  • 按标签选取规则 保存在JSON配置文件中
  • 更改打开代码的编辑器

使用方法

GUI

  • 打开FauxPas
  • 选择或者排除一些规则
  • Start Checking

CLI

  • 打开FauxPas
  • 菜单栏Faux Pas > Install CLI Tools…
  • shell> fauxpas -t iCoupon check iCoupon.xcodeproj/
  • 可以输出不同格式、挑选检查规则等,参见帮助,例如查找重复资源

  •  fauxpas --onlyRules UnusedResource -o json check MyProject.xcodeproj


Xcode build时检查

  • 确保CLI安装
  • 在Xcode项目的target中新增"Run Script" build phase
  • 添加如下脚本,build时会执行FauxPas检查

  • [[ ${FAUXPAS_SKIP} == 1 ]] && exit 0
    
     FAUXPAS_PATH="/usr/local/bin/fauxpas"
     if [[ -f "${FAUXPAS_PATH}" ]]; then
       "${FAUXPAS_PATH}" check-xcode
     else
       echo "warning: Faux Pas was not found at '${FAUXPAS_PATH}'"
     fi


建议不使用这种方式,会额外增加build时间。

Xcode中手动执行

  • 确保CLI安装
  • 项目中创建Aggregate类型target
  • 在该target下新增"Run Script" build phase
  • 添加如下脚本,运行该target时会执行FauxPas检查

  •  /usr/local/bin/fauxpas -o xcode check "PROJECT_NAME.xcodeproj"


导出结果

  • GUI中点击Export Diagnostics,选择格式
  • CLI下-o参数,可选human、json、plist、xcode
  • 导出结果可以用其他工具处理

实战

使用GUI扫描了项目,发现了许多不少有价值的问题,值得我们学习。

  • 编译参数的有益建议,比如-DNDEBUG
  • 多处图片缺少和图片重复
  • 非retian与retina图尺寸不是2倍
  • 没有前缀或者前缀与SDK冲突,建议至少三字符长度
  • Retain Delegate
  • 重载或者调用一些限制的系统方法
  • 缺少获取授权的描述
  • Category方法冲突
  • 未使用的Error值,建议不关心Error时参数传入NULL
  • 设置delegate或者datasource为self时需要在dealloc中置为空
  • 对指针和0做比较
  • obj ? obj : other obj将会评估2次。而obj ?: other会评估一次
  • 界面字符串缺少本地化,我们的项目实际不需要
  • 修改传入参数的值
  • model类包含的对象的@property建议用copy,防止非setter的修改
  • pch中引用过的头文件再次引用多余
  • VCS建议,例如建议Xcode workspace data不忽略
  • 在init or dealloc不要使用setter。
  • 不和习惯的getter。使用something而非getSomething
  • 旧语法,例如+[NSNumber numberWithFloat:], -[NSDictionary objectForKey:]。建议转换为现代语法Edit → Refactor → Convert To Modern Objective-C Syntax
目录
相关文章
|
存储 分布式计算 安全
分布式文件系统介绍与minio介绍与使用(附minio java client 使用)(一)
分布式文件系统介绍与minio介绍与使用(附minio java client 使用)
783 0
|
XML SQL Java
Maven的三种打包方式(jar、shade、assembly)
Maven的三种打包方式(jar、shade、assembly)
6061 0
|
Java Nacos 数据库
使用 nacos 搭建注册中心及配置中心
使用 nacos 搭建注册中心及配置中心
344 5
|
机器学习/深度学习 数据采集 算法
监督学习工作流程:从数据准备到模型部署
本文详细介绍了监督学习的工作流程,涵盖数据准备、模型选择、训练、评估与优化、部署等关键步骤,并结合具体代码示例,帮助读者全面掌握监督学习在实际项目中的应用方法。从数据收集、清洗到特征工程,再到模型训练与评估,最后部署模型,每个环节都提供了详细的指导和实践建议。适合初学者和有一定基础的读者深入学习。
779 2
|
机器学习/深度学习 人工智能 自然语言处理
AI在创造还是毁掉音乐?——探索人工智能对音乐创作的影响
在当今数字化时代,人工智能(AI)技术的快速发展不仅改变了我们的生活方式和工作方式,也在音乐创作领域引发了广泛的讨论和热议。最近,随着各类音乐生成AI模型的涌现,人们开始探讨AI在音乐创作中的作用,以及它对传统音乐产业的潜在影响。
1039 5
云通信智能语音服务-工作手机号使用FAQ
工作手机号是具备APP注册、语音通话、上网、点对点短信等功能的手机号码,含实体SIM卡。“工作手机号”面向企业客户提供一站式通信、办理、 维护和结算能力,支持企业管理注销、变更和付费、员工使用等众多客户实际业务场景。
4868 0
云通信智能语音服务-工作手机号使用FAQ
|
关系型数据库 MySQL Java
树莓派4B使用Docker部署SpringBoot项目——(二)使用docker安装mysql
树莓派4B使用Docker部署SpringBoot项目——(二)使用docker安装mysql
962 0
树莓派4B使用Docker部署SpringBoot项目——(二)使用docker安装mysql
|
算法 vr&ar 异构计算
火爆专场 干货来袭 | 淘宝端智能演进和思考
过去一年中,出现很多新的技术,例如:移动 AI ,这些新技术会给开发带来什么新变化?阿里巴巴资深技术专家——吕行 将为大家带来「淘宝端智能演进和思考」。
8821 0
火爆专场 干货来袭 | 淘宝端智能演进和思考
|
Java
Java 异常处理的 20 个最佳实践,你知道几个?
异常处理是 Java 开发中的一个重要部分,是为了处理任何错误状况,比如资源不可访问,非法输入,空输入等等。Java 提供了几个异常处理特性,以try,catch 和 finally 关键字的形式内建于语言自身之中。
2351 0