返回

站稳脚跟,提升内功——云音乐 iOS 端代码静态检测实践

IOS

随着业务的不断发展,云音乐 iOS 客户端 App 也在不断地进化,当前已经拥有 300w 行代码。伴随着业务、技术栈的复杂度日益提升,依靠纯人工 Code Review 来保障代码质量、防止代码劣化变得”力不从心“。

此时有必要借助代码静态分析能力,提升项目可持续发展所需要的自动化水平。

1. 背景

1.1 项目现状

由于项目本身的复杂度和发展的时间因素,App 内部的代码质量存在着各种各样潜在的问题,我们认为需要进行一次全面的代码检查来解决这些问题,主要包含如下几类:

  • 安全问题: 例如:SQL 注入、XSS 等安全隐患。
  • 功能缺陷: 例如:程序崩溃、逻辑错误等缺陷。
  • 代码风格问题: 例如:命名不规范、代码不一致、无意义的注释等问题。
  • 性能问题: 例如:内存泄漏、性能瓶颈等问题。

1.2 现状痛点

当前的 iOS 项目主要存在以下几个痛点:

  • 代码量大,人工 review 成本高:
    当前 App 代码量已超 300w 行,随着业务的不断发展,代码量还会持续增加。人工 review 的效率和准确率无法满足项目的持续迭代。
  • 项目组人员较多,代码风格不统一:
    随着公司项目的不断壮大,项目组人员也在不断增加,各个开发同学的编程风格、习惯不同,导致代码风格不统一,沟通成本增加。
  • 代码缺陷漏检,线上 Bug 时有发生:
    纯人工 review 难免会存在疏忽,线上 Bug 时有发生,影响了用户体验。

2. 解决方法

为了解决上述问题,我们计划引入 iOS 代码静态检测工具,帮助开发同学自动化地检查代码中的安全问题、功能缺陷、代码风格问题、性能问题等。

目前业界主流的 iOS 代码静态检测工具主要有以下几款:

  • AppCode :由 JetBrains 开发的专业 iOS 代码静态检测工具。
  • Xcode Static Analyzer :由 Apple 官方提供的 Xcode 插件。
  • SwiftLint :一款开源的 Swift 代码静态检测工具。

经过对上述工具的对比,我们最终选择了 SwiftLint 作为我们的代码静态检测工具,主要原因如下:

  • 轻量级: SwiftLint 是一款轻量级的工具,不会对 Xcode 的性能造成明显的影响。
  • 开源: SwiftLint 是一款开源的工具,可以自由地修改和扩展。
  • 社区活跃: SwiftLint 拥有一个活跃的社区,不断地发布新功能和修复 Bug。

3. 实践与经验

3.1 工具配置

在将 SwiftLint 集成到项目中之前,我们需要先进行一些必要的配置。

  • 安装 SwiftLint:
    使用 Homebrew 安装 SwiftLint:
brew install swiftlint
  • 创建配置文件:
    在项目根目录下创建 .swiftlint.yml 文件,该文件用于配置 SwiftLint 的各种规则。
# .swiftlint.yml
disabled_rules:
  - trailing_comma
  • 集成到 Xcode:
    在 Xcode 中安装 SwiftLint 插件,该插件可以帮助我们方便地查看 SwiftLint 的检测结果。

3.2 使用方式

SwiftLint 的使用非常简单,只需要在终端中执行以下命令即可:

swiftlint

SwiftLint 会自动地扫描项目中的所有 Swift 文件,并输出检测结果。

3.3 检测结果

SwiftLint 会输出以下几类检测结果:

  • Error: 严重错误,需要立即修复。
  • Warning: 警告,建议修复。
  • Info: 信息,仅供参考。

3.4 缺陷修复

对于 SwiftLint 检测出的缺陷,我们需要及时地进行修复。

  • Error: 严重的错误必须立即修复。
  • Warning: 警告级别的缺陷也需要修复,但可以根据实际情况来决定修复的优先级。
  • Info: 信息级别的缺陷可以忽略不计。

4. 效果

自从将 SwiftLint 集成到项目中之后,我们发现代码质量得到了显著的提升。

  • 线上 Bug 大幅减少:
    线上 Bug 的数量从原来的每月数十个下降到每月个位数,这说明 SwiftLint 帮助我们有效地检测出了代码中的缺陷。
  • 代码风格统一:
    SwiftLint 帮助我们统一了代码风格,这使得代码的可读性和维护性都得到了提高。
  • 开发效率提升:
    SwiftLint 帮助我们自动地检查代码中的问题,这使得开发同学可以专注于开发新功能,而不用花费大量的时间来检查代码中的问题。

5. 未来规划

在未来,我们计划继续使用 SwiftLint 来提高代码质量。

  • 持续集成:
    我们将把 SwiftLint 集成到持续集成系统中,以便在每次代码提交时自动地运行 SwiftLint,并及时发现代码中的问题。
  • 扩展规则:
    我们将根据项目的实际情况,扩展 SwiftLint 的规则,以便更好地满足项目的质量要求。
  • 自动化修复:
    我们将研究如何自动化地修复 SwiftLint 检测出的问题,以便进一步提高代码质量。

6. 结语

通过引入 iOS 代码静态检测工具,我们有效地提升了代码质量,减少了线上 Bug 的数量,统一了代码风格,提高了开发效率。

我们认为,代码静态检测工具是保障代码质量的重要手段,它可以帮助开发同学自动化地检查代码中的问题,从而提高代码的质量和可靠性。