对移动应用进行签名

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 应用进行签名,同时确保签名证书的安全:

  1. 首先,获取包含签名证书的密钥存储文件。 Android 文档介绍了生成密钥存储文件及其相应密钥的过程。

  2. 从 Android 或 Xamarin.Android 生成模板创建生成管道。 或者,如果已有生成管道,请在生成 APK 的任务后添加 Android 签名 任务。

  3. 找到 Android 签名任务的 “对 APK 签名 ”复选框并启用它。

  4. “密钥存储文件 ”字段旁边,单击“设置”图标,并将密钥存储文件上传到 安全文件库。 上传期间,密钥存储将被加密并安全地存储。

  5. 将密钥存储上传到安全文件库后,请在 “密钥存储文件 ”下拉列表中选择它。

  6. 转到 “变量 ”选项卡并添加以下变量。 在“ 值” 列中,输入 密钥存储密码密钥别名密钥密码

    • keystore-password:未加密密钥存储文件的密码。 请务必单击 图标。 这将保护密码并在日志中掩盖密码。

    • key-alias:生成的签名证书的密钥别名。

    • key-password:与指定别名关联的密钥的密码。 同样,请确保单击 图标。

      Android signing variables

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

    Android signing input values

保存生成管道,并且已全部设置! 任何生成代理现在都可以安全地对应用进行签名,而无需在生成计算机上进行任何证书管理。

对 Apple iOS、macOS、tvOS 或 watchOS 应用进行签名

要使 Xcode 或 Xamarin.iOS 版本对应用进行签名和预配,需要访问 P12 签名证书和一个或多个预配配置文件。 以下部分介绍如何获取这些文件。

获取 P12 签名证书

创建开发或分发签名证书后,使用 macOS 上的 Xcode 或 Keychain Access 应用将其导出到 .p12 文件。

  1. 若要使用 Xcode 8 或更低版本导出,请转到 XcodePreferences>...>帐户 并选择你的 Apple 开发人员帐户。

  2. 单击“ 查看详细信息...”,右键单击要导出的签名标识,然后单击“ 导出...”

  3. 输入文件名和密码。 记下密码,因为稍后需要密码。

    Xcode Export Cert

  4. 或者,使用 macOS 上的 Keychain Access 应用执行类似的过程,或在 Windows上生成签名证书。 如果希望使用此方法,请使用 本文中所述 的过程。

获取预配配置文件

可以从 Apple 开发人员门户下载应用预配配置文件,除非应用使用自动签名。 还可以使用 Xcode 访问 Mac 上安装的 Xcode。

  1. 使用 Xcode 8 或更低版本,转到 XcodePreferences>...>帐户 并选择你的 Apple 开发人员帐户。

  2. 右键单击要使用的预配配置文件,然后选择“ 在查找器中显示”。

  3. 将突出显示的文件从 Finder 复制到另一个位置,并为其提供描述性文件名。

    Xcode Show in Finder

配置生成

生成可通过两种方法访问签名证书和预配配置文件,以便对应用进行签名和预配:

  1. 在生成过程中安装它们
  2. 在 macOS 生成代理上预安装它们

有关详细信息,请选择下面的任一选项卡。

如果没有持久访问生成代理(例如 托管的 macOS 代理),请使用此方法。 P12 证书和预配配置文件安装在生成开始时,并在生成完成后删除。

在生成过程中安装 P12 证书

视觉对象编辑器
  1. 在 Xcode 或 Xamarin.iOS 任务之前,将 “安装 Apple 证书 ”任务添加到生成。
  2. “证书 (P12) ”字段旁边,单击设置图标,并将 P12 文件上传到 安全文件库。 上传期间,证书将被加密并安全地存储。
  3. 将证书上传到安全文件库后,请在 “证书 (P12) ”下拉列表中选择它。
  4. 转到 “变量 ”选项卡,并添加名为 的 P12password变量。 将其值设置为证书的密码。 请务必单击 图标。 这将保护密码并在日志中掩盖密码。
  5. 返回到“任务”选项卡。在“安装 Apple 证书”任务的设置中,将证书 (P12) 密码字段中新创建的变量引用为:$(P12password)
示例 YAML
  1. 将 P12 文件Upload到安全文件库。 上传期间,证书将被加密并安全地存储。

  2. 转到 “变量 ”选项卡,并添加名为 的 P12password变量。 将其值设置为证书的密码。 请务必单击 图标。 这将保护密码并在日志中掩盖密码。

  3. 在 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)'
    

在生成过程中安装预配配置文件

视觉对象编辑器
  1. 在 Xcode 或 Xamarin.iOS 任务之前,将 “安装 Apple 预配配置文件 ”任务添加到生成。
  2. 对于 “预配配置文件位置 ”选项,请选择 YAML 中的 安全文件 (, secureFiles) 。
  3. “预配配置文件 ”字段旁边,单击设置图标,并将预配配置文件文件上传到 安全文件库。 上传期间,证书将被加密并安全地存储。
  4. 将证书上传到安全文件库后,请在 “预配配置文件 ”下拉列表中选择它。
  5. 启用标记为 “生成后删除配置文件”复选框。 这将确保预配配置文件未保留在代理计算机上。
示例 YAML
  1. 将探测配置文件Upload安全文件库。 上传期间,证书将被加密并安全地存储。

  2. 在 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 任务中的文件

视觉对象编辑器
  1. 选择 Xcode 任务。
  2. 对于 “签名样式 ”选项,请选择 “手动签名”。
  3. “签名标识 ”字段中,输入 $(APPLE_CERTIFICATE_SIGNING_IDENTITY)。 此变量由所选 证书的“安装 Apple 证书 ”任务自动设置。
  4. “预配配置文件 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 任务中的文件

视觉对象编辑器
  1. 选择 Xamarin.iOS 任务。
  2. 对于 “使用替代” 选项,请选择 “标识符”。
  3. “签名标识 ”字段中,输入 $(APPLE_CERTIFICATE_SIGNING_IDENTITY)。 此变量由所选 证书的“安装 Apple 证书 ”任务自动设置。
  4. “预配配置文件 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,则可在本地使用这些功能。