对移动应用进行签名
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
若要为 Android 或 Apple 操作系统签名和预配移动应用,需要管理签名证书和 Apple 预配配置文件。 本文介绍如何在 Azure Pipelines 中安全地管理证书和配置文件,以便对应用进行签名和预配。
注意
至少需要一个代理才能运行生成或发布。 可以使用Microsoft托管的 Linux、macOS 或 Windows 生成代理,或设置自己的代理。 有关详细信息,请参阅 生成和发布代理。
对 Android 应用签名
按照以下步骤对 Android 应用进行签名,同时确保签名证书的安全。
上传密钥存储文件
获取包含签名证书的密钥存储文件。 Android 文档介绍了生成密钥存储文件及其相应密钥的过程。
在 Azure Pipelines 中,转到 库>安全文件。 选择“ + 保护文件 ”并将密钥存储文件上传到 安全文件库。 上传期间,密钥存储经过加密并安全地存储。
将签名任务添加到管道
在生成应用的步骤后,将 AndroidSigning@3 任务添加到 YAML 管道。 在任务中 AndroidSigning@3
:
<apkFiles>
是必需的,并且是要签名的 APK 文件的路径和名称。 默认为**/*.apk
。<apksign>
必须是true
默认值。<keystore-file>
是安全文件库中上传的密钥存储文件的名称。<apksignerKeystorePassword>
是未加密密钥存储文件的密码。<apksignerKeystoreAlias>
是签名证书的密钥别名。<apksignerKeyPassword>
是与指定别名关联的密钥的密码。
可以在 YAML 中设置和使用变量,也可以使用 Azure Pipelines UI 中的“变量”选项卡设置变量,并在 YAML 中引用它们。
variables:
keystore-password: <keystore file password>
key-alias: <key alias for the signing certificater>
key-password: <password for the key associated with the alias>
steps:
- task: AndroidSigning@3
displayName: 'Signing and aligning APK file(s) **/*.apk'
inputs:
apkFiles: '**/*.apk'
apksign: true
apksignerKeystoreFile: <keystore-filename.keystore>
apksignerKeystorePassword: $(keystore-password)
apksignerKeystoreAlias: $(key-alias)
apksignerKeyPassword: $(key-password)
现在,任何生成代理都可以安全地对应用进行签名,而无需在生成计算机上进行任何证书管理。
为 Apple iOS、macOS、tvOS 或 watchOS 应用签名
若要对应用进行签名和预配,Xcode 或 Xamarin.iOS 版本需要访问 P12 签名证书和一个或多个预配配置文件。 以下步骤说明如何获取这些文件。
获取 P12 签名证书
在 macOS 上使用 Xcode 或 Keychain Access 应用将开发或分发签名证书导出到 .p12 文件。
使用 Xcode 导出:
转到 Xcode>首选项>帐户。
在左列中,选择你的 Apple ID。
在右侧,选择个人或团队帐户,然后选择“ 管理证书”。
Ctrl+选择要导出的证书,然后从菜单中选择“ 导出证书 ”。
在对话框中,输入证书名称、保存文件的位置以及用于保护证书的密码。
或者,使用 iOS 签名中所述的过程,使用 macOS 上的 Keychain Access 应用遵循类似的过程,或在 Windows 上生成签名证书。
将 P12 文件上传到 Azure Pipelines 安全文件库。 上传期间,证书经过加密并安全地存储。
在管道中,转到 “变量 ”选项卡,使用证书密码添加名为 P12password 的变量作为值。 请务必选择 锁定 图标来保护密码,并在日志中将其遮盖。
获取预配配置文件
如果应用不使用自动签名,可以从 Apple 开发人员门户下载应用预配配置文件。 有关详细信息,请参阅 “编辑”、“下载或删除预配配置文件”。
还可以使用 Xcode 访问 Mac 上安装的预配配置文件。 在 Xcode 中,转到“Xcode>首选项>帐户”。 选择 Apple ID 和团队,然后选择“ 下载手动配置文件”。
在 Azure Pipelines 中,将预配配置文件上传到 安全文件库。 上传期间,文件已加密并安全地存储。
将签名和预配任务添加到管道
若要对应用进行签名和预配,可以在每次生成期间安装证书和配置文件,也可以在 macOS 生成代理上预安装文件。
在每个生成过程中安装证书和配置文件
当你没有持久访问生成代理(例如,使用 托管的 macOS 代理时)时,请在每个生成期间安装证书和配置文件。 在生成开始时会安装 P12 证书和预配配置文件,在生成完成时会将其删除。
在 Xcode 或 Xamarin.iOS 任务之前,将 InstallAppleCertificate@2 任务添加到 YAML 管道。 在代码中,替换为
<secure-file.p12>
上传 的 .p12 文件的名称。 将变量用于安全P12password
。- task: InstallAppleCertificate@2 inputs: certSecureFile: '<secure-file.p12>' certPwd: '$(P12password)'
注意
在该任务中
InstallAppleCertificate@2
,参数deleteCert
默认为true
,该参数在生成后删除证书。在 Xcode 或 Xamarin.iOS 任务之前将 InstallAppleProvisioningProfile@1 任务添加到 YAML。 替换为
<secure-file.mobileprovision>
预配配置文件的名称。- task: InstallAppleProvisioningProfile@1 inputs: provProfileSecureFile: '<secure-file.mobileprovision>'
注意
在任务中
InstallAppleProvisioningProfile@1
,参数removeProfile
默认为true
,该参数在生成后删除配置文件。
现在,任何生成代理都可以安全地对应用进行签名,而无需在生成计算机上进行任何证书或配置文件管理。
在 macOS 生成代理上预安装证书和配置文件
可以在 macOS 生成代理上预安装签名证书和预配配置文件,而不是在生成过程中安装签名证书和预配配置文件。 然后,这些文件可供内部版本继续使用。 仅当信任有权访问代理计算机上的 macOS 密钥链的人员和进程时,才使用此方法。
预安装 P12 证书
若要在默认密钥链中安装 P12 证书,请在生成代理上的 macOS 终端窗口中运行以下命令。 替换为
<certificate.p12>
P12 文件的路径和名称。 请将<password>
替换为 P12 文件的加密密码。sudo security import <certificate.p12> -P <password>
向名为 KEYCHAIN_PWD 的管道添加新变量。 将值设置为默认密钥链,通常是启动代理的用户的密码。 请务必选择 锁定 图标来保护此密码。
预安装预配配置文件
通过打开 macOS 终端窗口并输入
security find-identity -v -p codesigning
来查找签名标识的全名。 你会看到表单iPhone Developer/Distribution: Developer Name (ID)
中签名标识的列表。 如果标识无效,则会看到类似于(CSSMERR_TP_CERT_REVOKED)
标识之后的内容。若要在代理计算机上安装预配配置文件,请从 macOS 终端窗口运行以下命令。 替换为
<profile>
预配配置文件的路径,并替换为<UUID>
预配配置文件 UUID,这是没有.mobileprovision
扩展名的预配配置文件文件名。sudo cp <profile> ~/Library/MobileDevice/Provisioning Profiles/<UUID>.mobileprovision
添加使用默认密钥链的签名和预配任务
在 Xcode 或 Xamarin.iOS 任务之前,将 InstallAppleCertificate@2 任务添加到 YAML 管道。 在代码中,设置以下值:
certSecureFile
:上传的 .p12 文件的名称。certPwd
:安全P12password
变量。signingIdentity
:签名标识的全名。keychain
:default
,允许访问默认密钥链。keychainPassword
:变量KEYCHAIN_PWD
。deleteCert
:false
,用于在生成之间保留证书。
- task: InstallAppleCertificate@2 inputs: certSecureFile: '<secure-file.p12>' certPwd: '$(P12password)' signingIdentity: <full-signing-identity> keychain: default keychainPassword: `$(KEYCHAIN_PWD) deleteCert: false
添加InstallAppleProvisioningProfile@1任务。 在代码中:
- 设置为
provProfileSecureFile
预配配置文件的名称。 false
设置为removeProfile
在内部版本之间保留配置文件。
- task: InstallAppleProvisioningProfile@1 inputs: provProfileSecureFile: '<secure-file.mobileprovision>' removeProfile: false
- 设置为
macOS 生成代理现在可以安全地为所有生成签名和预配应用,而无需进一步的证书或配置文件管理。
引用 Xcode 或 Xamarin.iOS 生成任务中的安全文件
若要在管道中使用安全证书和配置文件,请在 Xcode 或 Xamarin.iOS 生成任务中配置以下设置。
生成任务中的安全文件引用使用变量和 signingIdentity
provisioningProfileUuid
. 这些变量由 “安装 Apple 证书 ”和 “安装 Apple 预配配置文件 ”任务自动设置,用于所选证书和预配配置文件。
对于 Xcode:
- task: Xcode@5
inputs:
signingOption: 'manual'
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'
对于 Xamarin.iOS:
- task: XamariniOS@2
inputs:
solutionFile: '**/*.iOS.csproj'
signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
signingProvisioningProfileID: '$(APPLE_PROV_PROFILE_UUID)'
管道生成代理现在安全地对应用进行签名和预配,而无需在生成计算机本身上进行进一步的证书或配置文件管理。
相关内容
详细信息:
- 适用于 Android 应用的管道,请参阅 生成、测试和部署 Android 应用。
- 适用于 iOS 应用的管道,请参阅 生成、测试和部署 Xcode 应用。
- 代理,请参阅 Azure Pipelines 代理。
- 代理池和队列,请参阅 创建和管理代理池。
- 管道中的变量,请参阅 “定义变量”。
- 管道故障排除,请参阅 管道运行故障排除。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈