对移动应用进行签名
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018
开发适用于 Android 或 Apple 操作系统的应用时,你最终需要管理签名证书,如果是 Apple 应用, 预配配置文件。 本文介绍如何安全地管理它们以对应用进行签名和预配。
提示
使用 Microsoft 托管的 Linux、macOS 或Windows生成代理,或设置自己的代理。 请参阅 生成代理和发布代理。
本文介绍:
注意
在 Microsoft Team Foundation Server (TFS) 2018 和更低版本中,生成和发布管道被称为“定义”,运行被称为“生成”,服务连接被称为“服务终结点”,阶段被称为“环境”,而作业被称为“阶段” 。
对 Android 应用签名
按照以下步骤对 Android 应用进行签名,同时确保签名证书的安全:
首先,获取包含签名证书的密钥存储文件。 Android 文档介绍了生成密钥存储文件及其相应密钥的过程。
从 Android 或 Xamarin.Android 生成模板创建生成管道。 或者,如果已有生成管道,请在生成 APK 的任务后添加 Android 签名 任务。
找到 Android 签名任务的 “对 APK 签名 ”复选框并启用它。
在 “密钥存储文件 ”字段旁边,单击“设置”图标,并将密钥存储文件上传到 安全文件库。 上传期间,密钥存储将被加密并安全地存储。
将密钥存储上传到安全文件库后,请在 “密钥存储文件 ”下拉列表中选择它。
转到 “变量 ”选项卡并添加以下变量。 在“ 值” 列中,输入 密钥存储密码、 密钥别名和 密钥密码。
keystore-password:未加密密钥存储文件的密码。 请务必单击 锁 图标。 这将保护密码并在日志中掩盖密码。
key-alias:生成的签名证书的密钥别名。
key-password:与指定别名关联的密钥的密码。 同样,请确保单击 锁 图标。

返回“任务”选项卡,并在签名选项中引用新创建的变量的名称。

保存生成管道,并且已全部设置! 任何生成代理现在都可以安全地对应用进行签名,而无需在生成计算机上进行任何证书管理。
对 Apple iOS、macOS、tvOS 或 watchOS 应用进行签名
要使 Xcode 或 Xamarin.iOS 版本对应用进行签名和预配,需要访问 P12 签名证书和一个或多个预配配置文件。 以下部分介绍如何获取这些文件。
获取 P12 签名证书
创建开发或分发签名证书后,使用 macOS 上的 Xcode 或 Keychain Access 应用将其导出到 .p12 文件。
若要使用 Xcode 8 或更低版本导出,请转到 XcodePreferences>...>帐户 并选择你的 Apple 开发人员帐户。
单击“ 查看详细信息...”,右键单击要导出的签名标识,然后单击“ 导出...”。
输入文件名和密码。 记下密码,因为稍后需要密码。

或者,使用 macOS 上的 Keychain Access 应用执行类似的过程,或在 Windows上生成签名证书。 如果希望使用此方法,请使用 本文中所述 的过程。
获取预配配置文件
可以从 Apple 开发人员门户下载应用预配配置文件,除非应用使用自动签名。 还可以使用 Xcode 访问 Mac 上安装的 Xcode。
使用 Xcode 8 或更低版本,转到 XcodePreferences>...>帐户 并选择你的 Apple 开发人员帐户。
右键单击要使用的预配配置文件,然后选择“ 在查找器中显示”。
将突出显示的文件从 Finder 复制到另一个位置,并为其提供描述性文件名。

配置生成
生成可通过两种方法访问签名证书和预配配置文件,以便对应用进行签名和预配:
- 在生成过程中安装它们
- 在 macOS 生成代理上预安装它们
有关详细信息,请选择下面的任一选项卡。
如果没有持久访问生成代理(例如 托管的 macOS 代理),请使用此方法。 P12 证书和预配配置文件安装在生成开始时,并在生成完成后删除。
在生成过程中安装 P12 证书
视觉对象编辑器
- 在 Xcode 或 Xamarin.iOS 任务之前,将 “安装 Apple 证书 ”任务添加到生成。
- 在 “证书 (P12) ”字段旁边,单击设置图标,并将 P12 文件上传到 安全文件库。 上传期间,证书将被加密并安全地存储。
- 将证书上传到安全文件库后,请在 “证书 (P12) ”下拉列表中选择它。
- 转到 “变量 ”选项卡,并添加名为 的
P12password变量。 将其值设置为证书的密码。 请务必单击 锁 图标。 这将保护密码并在日志中掩盖密码。 - 返回到“任务”选项卡。在“安装 Apple 证书”任务的设置中,将证书 (P12) 密码字段中新创建的变量引用为:
$(P12password)
示例 YAML
将 P12 文件Upload到安全文件库。 上传期间,证书将被加密并安全地存储。
转到 “变量 ”选项卡,并添加名为 的
P12password变量。 将其值设置为证书的密码。 请务必单击 锁 图标。 这将保护密码并在日志中掩盖密码。在 Xcode 或 Xamarin.iOS 任务之前,将 “安装 Apple 证书 ”任务添加到 YAML:
- task: InstallAppleCertificate@2 inputs: certSecureFile: 'my-secure-file.p12' # replace my-secure-file.p12 with the name of your P12 file. certPwd: '$(P12password)'
在生成过程中安装预配配置文件
视觉对象编辑器
- 在 Xcode 或 Xamarin.iOS 任务之前,将 “安装 Apple 预配配置文件 ”任务添加到生成。
- 对于 “预配配置文件位置 ”选项,请选择 YAML 中的 安全文件 (,
secureFiles) 。 - 在 “预配配置文件 ”字段旁边,单击设置图标,并将预配配置文件文件上传到 安全文件库。 上传期间,证书将被加密并安全地存储。
- 将证书上传到安全文件库后,请在 “预配配置文件 ”下拉列表中选择它。
- 启用标记为 “生成后删除配置文件”复选框。 这将确保预配配置文件未保留在代理计算机上。
示例 YAML
将探测配置文件Upload安全文件库。 上传期间,证书将被加密并安全地存储。
在 Xcode 或 Xamarin.iOS 任务之前,将 “安装 Apple 预配配置文件 ”任务添加到 YAML:
- task: InstallAppleProvisioningProfile@1 inputs: provProfileSecureFile: 'my-provisioning-profile.mobileprovision' # replace my-provisioning-profile.mobileprovision with the name of your provisioning profile file.[注意] 生成后删除配置文件 默认为 true。
引用 Xcode 任务中的文件
视觉对象编辑器
- 选择 Xcode 任务。
- 对于 “签名样式 ”选项,请选择 “手动签名”。
- 在 “签名标识 ”字段中,输入
$(APPLE_CERTIFICATE_SIGNING_IDENTITY)。 此变量由所选 证书的“安装 Apple 证书 ”任务自动设置。 - 在 “预配配置文件 UUID ”字段中,输入
$(APPLE_PROV_PROFILE_UUID)。 此变量由所选预配 配置文件的“安装 Apple 预配配置文件 ”任务自动设置。
示例 YAML
- task: Xcode@5
inputs:
signingOption: 'manual'
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
引用 Xamarin.iOS 任务中的文件
视觉对象编辑器
- 选择 Xamarin.iOS 任务。
- 对于 “使用替代” 选项,请选择 “标识符”。
- 在 “签名标识 ”字段中,输入
$(APPLE_CERTIFICATE_SIGNING_IDENTITY)。 此变量由所选 证书的“安装 Apple 证书 ”任务自动设置。 - 在 “预配配置文件 UUID ”字段中,输入
$(APPLE_PROV_PROFILE_UUID)。 此变量由所选预配 配置文件的“安装 Apple 预配配置文件 ”任务自动设置。
示例 YAML
- task: XamariniOS@2
inputs:
solutionFile: '**/*.iOS.csproj'
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'
保存生成管道,并且已全部设置! 生成代理现在能够安全地对应用进行签名和预配。
常见问题解答
需要使用代理吗?
至少需要一个代理才能运行生成或发布。
我遇到了问题。 如何对其进行故障排除?
请查看排查生成和发布问题。
我无法选择默认代理池,无法将生成或发布排队。 如何修复此问题?
请查看代理池。
我的 NuGet 推送任务失败,出现“错误: 无法获取本地颁发者证书”错误。 如何解决此问题?
可通过添加受信任的根证书来解决此问题。 可将环境变量 NODE_EXTRA_CA_CERTS=file 添加到生成代理,也可在管道中添加任务变量 NODE.EXTRA.CA.CERTS=file。 有关此变量的更多详细信息,请参阅 Node.js 文档。 有关在管道中设置变量的说明,请参阅在管道中设置变量。
我在本地使用 TFS,但没有看到其中某些功能。 为什么看不到?
其中某些功能仅在 Azure Pipelines 上可用,在本地尚不可用。 如果你已升级到最新版本的 TFS,则可在本地使用这些功能。