生成、测试和部署Xcode应用
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018
了解如何使用 Azure Pipelines 生成和部署Xcode项目。
先决条件
- GitHub存储库中的Xcode 9 个以上的项目。 如果没有项目,请参阅为应用创建Xcode Project
创建管道
登录到Azure DevOps组织并转到项目。
转到“管道”,然后选择“新建管道”。
完成向导中的各个步骤。首先选择“GitHub”作为源代码位置。
可能会重定向到 GitHub 进行登录。 如果是这样,请输入 GitHub 凭据。
看到存储库列表时,请选择你的存储库。
你可能会被重定向到 GitHub 来安装 Azure Pipelines 应用。 如果是这样,请选择“批准并安装”。
出现“配置”选项卡时,选择Xcode。
显示新管道时,请查看 YAML 以查看其用途。 准备就绪后,选择“保存并运行”。

系统会提示将新的 azure-pipelines.yml 文件提交到存储库。 对消息感到满意后,选择“ 保存”并再次运行 。
如果要监视管道的操作,请选择生成作业。
你刚刚创建并运行了我们为你自动创建的管道,因为你的代码似乎与Xcode模板匹配得很好。
现在,存储库中有一个正在运行的 YAML 管道 (
azure-pipelines.yml) ,可供你自定义!准备好对管道进行更改时,请在“Pipelines”页中选择它,然后编辑
azure-pipelines.yml该文件。
请参阅以下部分,了解自定义管道的一些更常见方法。
提示
若要更改本主题中所述的 YAML 文件,请在“Pipelines”页中选择管道,然后选择“编辑”以打开文件的azure-pipelines.yml编辑器。
生成环境
可以使用Azure Pipelines通过 Xcode 生成应用,而无需设置自己的任何基础结构。 Xcode预安装在 Azure Pipelines 中 Microsoft 托管的macOS代理上。 可以使用macOS代理来运行生成。
有关预安装的确切Xcode版本,请参阅 Microsoft 托管的代理。
在存储库的根目录中创建名为 azure-pipelines.yml 的文件。 然后,将以下代码片段添加到 azure-pipelines.yml 文件以选择相应的代理池:
# https://docs.microsoft.com/azure/devops/pipelines/ecosystems/xcode
pool:
vmImage: 'macOS-latest'
使用 Xcode 生成应用
若要生成具有Xcode的应用,请将以下代码片段添加到azure-pipelines.yml文件中。 这是一个最小的代码片段,用于使用其默认方案、模拟器和不打包来生成iOS项目。 更改值以匹配项目配置。 有关这些选项的详细信息,请参阅Xcode任务。
pool:
vmImage: 'macos-latest'
steps:
- task: Xcode@5
inputs:
actions: 'build'
scheme: ''
sdk: 'iphoneos'
configuration: 'Release'
xcWorkspacePath: '**/*.xcodeproj/project.xcworkspace'
xcodeVersion: 'default' # Options: 8, 9, 10, 11, 12, default, specifyPath
签名和预配
必须对Xcode应用进行签名和预配,才能在设备上运行或发布到App Store。 签名和预配过程需要访问 P12 签名证书和一个或多个预配配置文件。 安装 Apple 证书并安装 Apple 预配配置文件任务使这些任务可用于生成过程中Xcode。
有关详细信息,请参阅 “对移动应用进行签名 ”。
Carthage
如果项目将 Carthage 与专用 Carthage 存储库配合使用,可以通过设置具有访问存储库的令牌值的环境变量 GITHUB_ACCESS_TOKEN 来设置身份验证。
Carthage 将自动检测并使用此环境变量。
不要将机密令牌直接添加到管道 YAML。 相反,请在“变量”窗格上创建新的管道变量,以加密此值。 请参阅 机密变量。
下面是一个示例,该示例使用名为环境变量值的GITHUB_ACCESS_TOKEN机密变量myGitHubAccessToken。
- script: carthage update --platform iOS
env:
GITHUB_ACCESS_TOKEN: $(myGitHubAccessToken)
在 Azure 托管设备上进行测试
添加 App Center 测试任务,以在iOS和Android设备的托管实验室中测试应用。 需要 App Center 免费试用版,以后必须将其转换为付费版。
# App Center test
# Test app packages with Visual Studio App Center
- task: AppCenterTest@1
inputs:
appFile:
#artifactsDirectory: '$(Build.ArtifactStagingDirectory)/AppCenterTest'
#prepareTests: true # Optional
#frameworkOption: 'appium' # Required when prepareTests == True# Options: appium, espresso, calabash, uitest, xcuitest
#appiumBuildDirectory: # Required when prepareTests == True && Framework == Appium
#espressoBuildDirectory: # Optional
#espressoTestApkFile: # Optional
#calabashProjectDirectory: # Required when prepareTests == True && Framework == Calabash
#calabashConfigFile: # Optional
#calabashProfile: # Optional
#calabashSkipConfigCheck: # Optional
#uiTestBuildDirectory: # Required when prepareTests == True && Framework == Uitest
#uitestStorePath: # Optional
#uiTestStorePassword: # Optional
#uitestKeyAlias: # Optional
#uiTestKeyPassword: # Optional
#uiTestToolsDirectory: # Optional
#signInfo: # Optional
#xcUITestBuildDirectory: # Optional
#xcUITestIpaFile: # Optional
#prepareOptions: # Optional
#runTests: true # Optional
#credentialsOption: 'serviceEndpoint' # Required when runTests == True# Options: serviceEndpoint, inputs
#serverEndpoint: # Required when runTests == True && CredsType == ServiceEndpoint
#username: # Required when runTests == True && CredsType == Inputs
#password: # Required when runTests == True && CredsType == Inputs
#appSlug: # Required when runTests == True
#devices: # Required when runTests == True
#series: 'master' # Optional
#dsymDirectory: # Optional
#localeOption: 'en_US' # Required when runTests == True# Options: da_DK, nl_NL, en_GB, en_US, fr_FR, de_DE, ja_JP, ru_RU, es_MX, es_ES, user
#userDefinedLocale: # Optional
#loginOptions: # Optional
#runOptions: # Optional
#skipWaitingForResults: # Optional
#cliFile: # Optional
#showDebugOutput: # Optional
使用生成记录保留项目
添加复制文件和发布生成Artifacts任务,以使用生成记录或测试 IPA 并将其部署到后续管道中。 请参阅Artifacts。
- task: CopyFiles@2
inputs:
contents: '**/*.ipa'
targetFolder: '$(build.artifactStagingDirectory)'
- task: PublishBuildArtifacts@1
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: 'drop'
publishLocation: 'Container'
部署
应用中心
添加 App Center Distribut 任务以将应用分发给一组测试人员或 beta 用户,或将应用提升为Intune或 Apple App Store。 无需免费 App Center 帐户, (无需付款) 。
# App Center distribute
# Distribute app builds to testers and users via Visual Studio App Center
- task: AppCenterDistribute@1
inputs:
serverEndpoint:
appSlug:
appFile:
#symbolsOption: 'Apple' # Optional. Options: apple
#symbolsPath: # Optional
#symbolsPdbFiles: '**/*.pdb' # Optional
#symbolsDsymFiles: # Optional
#symbolsMappingTxtFile: # Optional
#symbolsIncludeParentDirectory: # Optional
#releaseNotesOption: 'input' # Options: input, file
#releaseNotesInput: # Required when releaseNotesOption == Input
#releaseNotesFile: # Required when releaseNotesOption == File
#isMandatory: false # Optional
#distributionGroupId: # Optional
Apple App Store
安装 Apple App Store扩展,并使用以下任务自动与App Store交互。 默认情况下,这些任务使用配置 的服务连接 向 Apple 进行身份验证。
发布
添加App Store发布任务,以自动发布App Store中现有iOS TestFlight beta 应用或生产应用的更新。
查看将此任务与 Apple 双因素身份验证配合使用 的限制 ,因为 Apple 身份验证特定于区域且快速兰会话令牌会很快过期,必须重新创建和重新配置。
- task: AppStoreRelease@1
displayName: 'Publish to the App Store TestFlight track'
inputs:
serviceEndpoint: 'My Apple App Store service connection' # This service connection must be added by you
appIdentifier: com.yourorganization.testapplication.etc
ipaPath: '$(build.artifactstagingdirectory)/**/*.ipa'
shouldSkipWaitingForProcessing: true
shouldSkipSubmission: true
升级
添加“App Store升级”任务,以自动将以前提交的应用从 iTunes 连接提升到App Store。
- task: AppStorePromote@1
displayName: 'Submit to the App Store for review'
inputs:
serviceEndpoint: 'My Apple App Store service connection' # This service connection must be added by you
appIdentifier: com.yourorganization.testapplication.etc
shouldAutoRelease: false
相关扩展
- Apple App Store (Microsoft)
- 编码安全 (编码安全)
- MacinCloud (Moboware Inc.)
- 适用于iOS和Android ( James Montemagno) 的移动应用任务
- Mobile Testing Lab (Perfecto Mobile)
- Raygun (Raygun)
- Microsoft) React Native (
- 版本 Setter (Tom Gilder)