Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020
本文介绍如何在 Azure Pipelines 中使用 YAML 管道生成和部署 Xcode 项目。
先决条件
- Azure DevOps 组织和项目拥有管道创建和应用部署权限。
- GitHub 存储库中存在 Xcode 9+ 项目和应用。 有关详细信息,请参阅为应用创建 Xcode 项目。
创建管道
重要
在 GitHub 流程中,系统可能会提示你创建 GitHub 服务连接或重定向到 GitHub 以登录、安装或授权 Azure Pipelines。 按照屏幕上的说明完成该过程。 有关详细信息,请参阅访问 GitHub 存储库。
- 在 Azure DevOps 项目中,如果此管道是项目中的第一个管道,选择“管道”、“新建管道”或“创建管道”>。
- 选择 GitHub 作为源代码位置。
- 在“选择存储库”屏幕上,为 Xcode 项目选择存储库。
- 在“配置管道”屏幕上,选择“Xcode”。
Azure Pipelines 基于 Xcode 模板提供初学者管道。 查看 azure-pipelines.yml 中的代码。
生成环境
Xcode 预安装在 Azure Pipelines 中 Microsoft 托管的 macOS 代理上,因此无需设置任何基础结构。 有关预安装的确切 Xcode 版本,请参阅 Microsoft 托管的代理软件。
pool文件顶部的节点选择相应的代理池。
pool:
vmImage: 'macOS-latest'
Xcode 生成任务
Xcode 任务在 macOS 上生成、测试或存档 Xcode 工作区,并且可以选择性地打包应用。 初学者 azure-pipelines.yml 文件中的 Xcode 步骤使用其默认方案构建 iOS 项目,目标是模拟器,并且不进行打包。 你可以更改值并添加参数以匹配项目配置。
开发版本:
steps:
- task: Xcode@5
inputs:
actions: 'build'
scheme: ''
sdk: 'iphonesimulator'
configuration: 'Debug'
xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
xcodeVersion: 'default' # Options: 10, 11, 12, 13, 14, default, specifyPath
App Store 的生产版本:
对于生产版本,请指定显式 Xcode 版本、应用方案和发布配置:
steps:
- task: Xcode@5
inputs:
actions: 'build'
scheme: 'YourAppScheme'
sdk: 'iphoneos'
configuration: 'Release'
xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
xcodeVersion: '14'
packageApp: true
exportPath: '$(build.artifactStagingDirectory)'
exportOptions: 'automatic'
生产的主要差异:
-
xcodeVersion:指定固定版本(例如,
'14')而不是'default'用于一致的可重现生成。 - scheme:将空字符串替换为应用的实际方案名称。
-
sdk:用于
'iphoneos'设备生成;用于'iphonesimulator'模拟器生成。 -
配置:用于
'Release'生产;用于'Debug'开发。 -
packageApp:设置为
true生成.ipa用于分发的文件。 - exportPath:将包输出定向到生成暂存目录进行项目发布。
保存并运行管道
在 azure-pipelines.yml 中查看代码后,选择“保存并运行”。
可以选择编辑“提交消息”并提供说明。 然后再次选择“保持并运行”将 azure-pipelines.yml 文件提交到存储库并启动生成。
“生成和运行”页显示生成详细信息和进度。 如果要查看管道的运行情况,请选择页面下方的“作业”。
现在,存储库中有一个可用的 YAML 管道 (azure-pipelines.yml),可供你自定义!
自定义管道
要更改管道,请在管道页面上选择“编辑”。 以下部分介绍了根据特定需求自定义 Xcode 管道的一些常见方法:
- 签名和预配: 需要部署到物理设备或 App Store。
- 依赖项管理: 为专用存储库配置身份验证。
- 项目管理: 存储用于测试和部署的生成输出。
- 分配: 自动发布到 TestFlight 或 App Store。
添加签名和预配任务
若要在物理设备上运行 Xcode 应用或将其发布到 App Store,需要对应用进行签名和预配。 此过程涉及使用 P12 签名证书(验证应用标识的安全凭据)和预配配置文件(授权应用进行特定设备或分发)。 有关详细信息,请参阅为移动应用签名。
在生成期间,要使证书和配置文件可用于 Xcode,请将安装 Apple 证书和安装 Apple 预配配置文件任务添加到您的管道中。
管理依赖项
Xcode 项目可能使用依赖项管理器来处理第三方库和框架。 以下部分介绍如何为具有不同依赖项管理器的专用存储库配置身份验证。
Swift 包管理器
Swift 包管理器(SPM)是 Apple 的本机依赖项管理器,直接集成到 Xcode 中。 对于将 SPM 与专用包配合使用的项目,需要配置 Git 身份验证。
如果专用 Swift 包托管在 GitHub 上,请使用名为 GITHUB_ACCESS_TOKEN 具有访问存储库的个人访问令牌值的环境变量设置身份验证。
请勿将机密令牌直接添加到管道 YAML,因为此作会在源代码中公开它。 有关详细信息,请参阅设置机密变量。
以下管道代码在解析 Swift 包依赖项时使用名为身份验证的 myGitHubAccessToken 机密变量:
- task: Xcode@5
inputs:
actions: 'build'
scheme: ''
sdk: 'iphoneos'
configuration: 'Release'
xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
env:
GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)
对于托管在 Azure Repos 或其他 Git 提供程序上的专用包,请在生成步骤之前配置相应的 Git 凭据。
可可豆荚
如果项目使用 CocoaPods,请使用 CocoaPods 任务安装依赖项。
- task: CocoaPods@0
inputs:
workingDirectory: '$(System.DefaultWorkingDirectory)'
forceRepo: false
迦太基
如果项目将 Carthage(iOS/macOS 项目的依赖项管理器)与专用 Carthage 存储库配合使用,请使用具有访问存储库的令牌值命名 GITHUB_ACCESS_TOKEN 的环境变量来设置身份验证。 Carthage 将自动检测并使用此环境变量。
请勿将机密令牌直接添加到管道 YAML,因为此作会在源代码中公开它。 有关详细信息,请参阅设置机密变量。
以下管道代码使用一个名为 myGitHubAccessToken 的机密变量作为 GITHUB_ACCESS_TOKEN 环境变量的值。
- script: carthage update --platform iOS
displayName: 'Update Carthage dependencies'
env:
GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)
在 Azure 托管的设备上进行测试
Visual Studio App Center 已于 2025 年 3 月 31 日停用。 了解 建议的替代方法。
将工件与生成记录一起保留
若要将 iOS AppStore 包 (IPA) 文件与生成记录或测试一起存储在后续管道中,请将复制文件和发布管道项目任务添加到管道中。
- task: CopyFiles@2
inputs:
contents: '**/*.ipa'
targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(build.artifactStagingDirectory)'
artifact: 'drop'
部署到 Apple App Store 或 TestFlight
若要将应用分发给测试人员或 beta 版用户,请使用 Apple 的 TestFlight 或直接部署到 App Store。 有关 Apple App Store 部署,请参阅以下部分。
对于 beta 测试和用户反馈,请考虑使用:
- Apple TestFlight
- 第三方 beta 测试平台,例如 Firebase 应用分发
安装 Apple App Store 扩展并部署到 Apple App Store
要自动化与 Apple App Store 的交互,请安装 Apple App Store 扩展并使用以下任务。 默认情况下,这些任务会使用你必须配置的服务连接对 Apple 进行身份验证。
要自动向 App Store 中的现有 iOS TestFlight beta 版应用或生产应用发布更新,请添加 App Store 发布任务。
将此任务与 Apple 双因素身份验证配合使用时存在限制。 Apple 身份验证特定于区域,fastlane 会话令牌(用于通过 Apple 进行身份验证的临时凭据)会很快过期,必须定期重新创建和重新配置。
- task: AppStoreRelease@1
displayName: 'Publish to the App Store TestFlight track'
inputs:
serviceEndpoint: 'My Apple App Store service connection'
appIdentifier: com.yourorganization.testapplication.etc
ipaPath: '$(build.artifactstagingdirectory)/**/*.ipa'
shouldSkipWaitingForProcessing: true
shouldSkipSubmission: true
要自动将以前提交的应用从 iTunes Connect 升级到 App Store,请添加 App Store 升级任务。
- task: AppStorePromote@1
displayName: 'Submit to the App Store for review'
inputs:
serviceEndpoint: 'My Apple App Store service connection'
appIdentifier: com.yourorganization.testapplication.etc
shouldAutoRelease: false
相关扩展
- Apple App Store (Microsoft)
- Codified Security (Codified Security)
- MacinCloud (Moboware Inc.)
- 适用于 iOS 和 Android 的移动应用任务 (James Montemagno)
- 移动测试实验室 (Perfecto Mobile)
- Raygun (Raygun)
- React Native (Microsoft)
- Version Setter (Tom Gilder)