Swift 项目的 CI/CD 简介
现代 Swift 移动和桌面应用程序开发不仅需要高质量的代码,还需要可靠的集成和交付流程。CI/CD(持续集成 / 持续部署)是一种能够自动化构建、测试和部署应用程序的实践。对于 Swift 项目,尤其是针对 iOS 和 macOS 的项目,GitHub Actions 是最方便且最流行的工具之一。
在本文中,我们将介绍如何使用 GitHub Actions 为 Swift 项目配置完整的 CI/CD 管道。您将学习如何自动化构建、运行单元测试,甚至将应用程序提交到 TestFlight 或 Mac App Store。
为什么选择 GitHub Actions 用于 Swift?
GitHub Actions 提供了与 Apple 生态系统配合使用的内置功能。与第三方服务不同,它与仓库完全集成,无需额外配置插件。主要优势包括:
- 免费分钟数适用于公共仓库(每月最多 2000 分钟)
- 现成的 Actions适用于 Xcode、SwiftLint、CocoaPods 和 SPM
- 支持 macOS 运行器并预装 Xcode
- 灵活的配置通过 YAML 文件实现
Swift 项目的基本 CI 配置
我们从简单的管道开始,该管道将在每次推送到 main 分支或创建 Pull Request 时构建项目并运行测试。
在仓库根目录创建文件 .github/workflows/swift-ci.yml:
name: Swift CI
on: push: branches: [ main ] pull_request: branches: [ main ]
jobs: build-and-test: runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Select Xcode version run: sudo xcode-select -s /Applications/Xcode_15.2.app - name: Build run: xcodebuild build -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' | xcpretty - name: Run tests run: xcodebuild test -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' | xcpretty该 workflow 执行两个主要步骤:项目构建和测试运行。请注意使用了 xcpretty——这是一个将 Xcodebuild 输出格式化为可读形式的工具。
额外的代码质量检查
我们使用 SwiftLint 添加静态分析。这将有助于在团队中保持统一的代码风格:
jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: SwiftLint uses: norio-nomura/action-swiftlint@3.2.1 with: args: --strict现在每次提交都会检查代码是否符合 SwiftLint 规则。如果发现违规,workflow 将以错误结束。
高级 CI/CD:测试和部署
基本配置完成后,可以转向更复杂的场景。我们考虑一个包含以下内容的管道:
- 为多个模拟器构建
- 带代码覆盖率的测试
- 自动发布到 TestFlight(适用于 iOS)或 Mac App Store
带覆盖率的构建和测试
要收集测试覆盖率数据,请使用 -enableCodeCoverage YES 标志:
jobs: test-coverage: runs-on: macos-latest steps: - uses: actions/checkout@v4 - name: Test with coverage run: | xcodebuild test \ -scheme MyApp \ -sdk iphonesimulator \ -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' \ -enableCodeCoverage YES \ -derivedDataPath Build/DerivedData | xcpretty - name: Upload coverage to Codecov uses: codecov/cod