跳到主要内容

CI/CD 自动化

问题

iOS 项目如何实现自动化构建和发布?

答案

Fastlane

# Fastfile
default_platform(:ios)

platform :ios do
desc "运行测试"
lane :test do
run_tests(scheme: "MyApp")
end

desc "发布到 TestFlight"
lane :beta do
increment_build_number
build_app(scheme: "MyApp")
upload_to_testflight
end

desc "发布到 App Store"
lane :release do
build_app(scheme: "MyApp")
upload_to_app_store(
skip_metadata: true,
skip_screenshots: true
)
end
end

GitHub Actions

name: iOS CI

on:
push:
branches: [main]
pull_request:
branches: [main]

jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4

- name: Select Xcode
run: sudo xcode-select -s /Applications/Xcode_15.0.app

- name: Install dependencies
run: |
xcodebuild -resolvePackageDependencies

- name: Run tests
run: |
xcodebuild test \
-scheme MyApp \
-destination 'platform=iOS Simulator,name=iPhone 15' \
-resultBundlePath TestResults

- name: Build
run: |
xcodebuild build \
-scheme MyApp \
-configuration Release

常见面试问题

Q1: CI 上代码签名怎么处理?

答案

  1. Match(Fastlane 推荐):证书和 Profile 存储在 Git 私有仓库,CI 上自动下载安装
  2. 手动:将 .p12.mobileprovision 作为 CI 机密变量,构建前安装到钥匙串
  3. Xcode Cloud:Apple 原生 CI,自动处理签名

相关链接