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 上代码签名怎么处理?
答案:
- Match(Fastlane 推荐):证书和 Profile 存储在 Git 私有仓库,CI 上自动下载安装
- 手动:将
.p12和.mobileprovision作为 CI 机密变量,构建前安装到钥匙串 - Xcode Cloud:Apple 原生 CI,自动处理签名