对移动应用进行签名
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 签名证书
使用 Xcode 或使用 macOS 上的 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
设置为你的预配配置文件的名称。 - 将
removeProfile
设置为false
以在生成之间保留配置文件。
- 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 代理。
- 代理池和队列,请参阅创建和管理代理池。
- 管道中的变量,请参阅定义变量。
- 管道故障排除,请参阅管道运行故障排除。