引言:为什么 CI/CD 对 Swift 开发至关重要
在当今的 iOS/macOS 开发中,手动构建和测试是导致错误和浪费时间的方式。每次提交都可能破坏构建,而在真实设备上进行测试需要物理访问。 CI/CD(持续集成 / 持续部署) 通过自动化应用的构建、测试和部署来解决这些问题。
GitHub Actions 是一个内置的 CI/CD 工具,非常适合托管在 GitHub 上的 Swift 项目。它允许您 免费(公共仓库每月最多 2000 分钟)在云端运行工作流程。在本文中,我们将介绍完整的流程:从基本配置到部署到 App Store。
本文适合谁?适合希望自动化日常任务并加快发布周期的 iOS/macOS 开发者。即使您是 DevOps 新手,分步说明和代码示例也能帮助您理解。
1. Swift 的 GitHub Actions 基础
1.1. 工作流程结构
GitHub Actions 使用存储在 .github/workflows/ 中的 YAML 文件。每个文件都是一个独立的工作流程,由触发器(推送、拉取请求、计划)启动。
Swift 项目的基本工作流程如下所示:
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: Build
run: xcodebuild build -project MyApp.xcodeproj -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2'
- name: Test
run: xcodebuild test -project MyApp.xcodeproj -scheme MyApp -sdk iphonesimulator -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2'
关键点:
macos-latest— 带有 macOS 的运行器,Xcode 和 Swift 必需。actions/checkout@v4— 克隆仓库。xcodebuild— 用于构建和测试的命令。destination参数指定模拟器(请替换为您自己的 iOS 版本)。
1.2. 依赖缓存
Swift Package Manager (SPM) 是标准的依赖管理器。为了避免每次提交都下载包,请使用缓存:
steps:
- uses: actions/cache@v3
with:
path: ~/Library/Developer/Xcode/DerivedData
key: ${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}
restore-keys: |
${{ runner.os }}-spm-
- run: swift build
这可以将构建时间缩短 40–60%。
2. 配置测试和代码检查
2.1. 单元测试和 UI 测试
对于 iOS/macOS 项目,在模拟器中运行测试至关重要。确保 Xcode 方案中已启用测试。macOS 示例:
jobs:
test_macos:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Run macOS tests
run: xcodebuild test -project MyApp.xcodeproj -scheme MyApp -sdk macosx -destination 'platform=macOS,arch=x86_64'
对于 iOS,添加 -destination 'platform=iOS Simulator,name=iPhone 15'。 重要提示: 模拟器名称会随 Xcode 版本变化——使用 xcrun simctl list 检查可用的模拟器。
2.2. 静态分析 (SwiftLint)
使用 SwiftLint 保持代码质量。在工作流程中添加一个步骤:
- name: SwiftLint
run: |
brew install swiftlint
swiftlint --strict
--strict 标志将警告转换为错误——如果代码不符合规则,工作流程将失败。在项目根目录配置 .swiftlint.yml。