Compartir a través de


Firma de aplicaciones móviles

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

En este artículo se describe cómo Azure Pipelines administra de forma segura los certificados y perfiles para firmar y aprovisionar aplicaciones móviles. Para firmar y aprovisionar una aplicación móvil, las canalizaciones deben proporcionar certificados de firma para sistemas operativos Android o Apple y perfiles de aprovisionamiento para Apple.

Firma de aplicaciones Android

El siguiente proceso firma una aplicación Android asegurando la seguridad del certificado de firma.

Obtención del archivo de almacén de claves

Siga la documentación de Android para generar un archivo de almacén de claves y su clave correspondiente. El archivo de almacén de claves contiene el certificado de firma.

En Bibliotecas de Azure Pipelines>Archivos seguros, seleccione + Archivo seguro y cargue el archivo de almacén de claves en la biblioteca de archivos seguros. Durante la carga, el almacén de claves se cifra y almacena de forma segura.

Adición de la tarea de firma a la canalización

En la canalización de YAML para una aplicación Android, establezca las siguientes keystore-password variables, key-alias, y key-password. Como alternativa, puede establecer las variables mediante la interfaz de usuario de variables del pipeline.

variables:
  keystore-password: <keystore file password>
  key-alias: <key alias for the signing certificater>
  key-password: <password for the key associated with the alias>

Agregue la tarea AndroidSigning@3 a la canalización después del paso de compilación. En la tarea AndroidSigning@3:

  • <apkFiles> es la ruta de acceso necesaria y el nombre de los archivos APK que se van a firmar. El valor predeterminado es **/*.apk.
  • <apksign> debe ser true, que es el valor predeterminado.
  • <apksignerKeystoreFile> es el nombre del archivo de almacén de claves cargado en la biblioteca de archivos seguros.
  • <apksignerKeystorePassword> es la contraseña del archivo de almacén de claves sin cifrar.
  • <apksignerKeystoreAlias> es el alias de clave para el certificado de firma.
  • <apksignerKeyPassword> es la contraseña de la clave asociada al alias especificado.
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)

Cualquier agente de compilación ahora puede firmar de forma segura la aplicación sin ninguna administración de certificados en la propia máquina de compilación.

Firma de aplicaciones de Apple iOS, macOS, tvOS o watchOS

Para firmar y aprovisionar una aplicación de Apple, la compilación de Xcode necesita acceso al certificado de firma P12 y uno o varios perfiles de aprovisionamiento.

Obtención del certificado de firma P12

Exporte el certificado de firma de desarrollo o distribución a un archivo .p12 mediante Xcode o la aplicación Keychain Access en macOS. Para exportar mediante Xcode:

  1. Vaya a Xcode>Preferencias>Cuentas.

  2. En la columna izquierda, seleccione el ID de Apple.

  3. En el lado derecho, seleccione su cuenta personal o de equipo y seleccione Administrar certificados.

  4. Ctrl+Seleccione el certificado que desea exportar y seleccione Exportar certificado en el menú.

    Captura de pantalla de la exportación de un certificado mediante Xcode.

  5. Escriba el nombre del certificado, una ubicación para guardar el archivo y una contraseña para proteger el certificado.

Para exportar mediante la aplicación Keychain Access en macOS o para generar un certificado de firma en Windows, use el procedimiento descrito en Firma de iOS.

Cargue el archivo P12 y agregue la variable de contraseña.

En Bibliotecas de Azure Pipelines>Archivos seguros, seleccione + Archivo seguro y cargue el archivo P12 en la biblioteca de archivos seguros de Azure Pipelines. Durante la carga, el certificado se cifra y almacena de forma segura.

En la interfaz de usuario variables de la canalización de compilación de la aplicación, agregue una variable denominada P12password con la contraseña del certificado como valor. Seleccione el icono de bloqueo para proteger la contraseña y ocultarla en los registros.

Obtención del perfil de aprovisionamiento

Si la aplicación no usa la firma automática, descargue el perfil de aprovisionamiento de aplicaciones desde el portal para desarrolladores de Apple. Para obtener más información, consulte Edición, descarga o eliminación de perfiles de aprovisionamiento.

También puede usar Xcode para acceder a los perfiles de aprovisionamiento instalados en el equipo Mac. En Xcode, vaya a Xcode>Preferencias>Cuentas. Seleccione el id. de Apple y el equipo y, a continuación, seleccione Descargar perfiles manuales.

En Azure Pipelines, cargue el perfil de aprovisionamiento en la biblioteca de archivos seguros. Durante la carga, el archivo se cifra y almacena de forma segura.

Adición de tareas de firma y aprovisionamiento a la canalización

Necesita al menos una máquina del agente para ejecutar una canalización de versión o compilación de Azure Pipelines. Puede usar agentes hospedados por Microsoft o configurar agentes autohospedados. Para obtener más información, consulte agentes de canalizaciones de Azure.

En el caso de la firma y el aprovisionamiento de aplicaciones de Apple en agentes macOS hospedados, o si no desea permitir el acceso a la cadena de claves del agente, puede instalar el certificado y los perfiles necesarios durante cada compilación. Si usa un agente autohospedado y confía en las personas y procesos que pueden acceder a la cadena de claves del agente, puede preinstalar el certificado y los perfiles en el agente de compilación de macOS.

Instalación del certificado y el perfil durante cada compilación

Si no tiene acceso duradero al agente de compilación, por ejemplo, al usar agentes hospedados por Microsoft, puede instalar el certificado y el perfil durante cada compilación. La canalización instala el certificado P12 y el perfil de aprovisionamiento al principio de cada compilación y los quita cuando se completa la compilación.

En la canalización de compilación de YAML para la aplicación, agregue la tarea InstallAppleCertificate@2 antes de la tarea Xcode@5 . En el código, reemplace por <secure-file.p12> el nombre del archivo .p12 cargado. Para certPwd, use la variable segura P12password que ha creado.

- task: InstallAppleCertificate@2
    inputs:
      certSecureFile: '<secure-file.p12>'
      certPwd: '$(<P12password>)'

Agregue también la tarea InstallAppleProvisioningProfile@1 a la canalización antes de la tarea Xcode@5 . Reemplace por <secure-file.mobileprovision> el nombre del archivo de perfil de aprovisionamiento.

- task: InstallAppleProvisioningProfile@1
    inputs:
      provProfileSecureFile: '<secure-file.mobileprovision>'

Nota:

En las InstallAppleCertificate@2 y InstallAppleProvisioningProfile@1 tareas, el parámetro removeProfile tiene el valor predeterminado true, que elimina el certificado y el perfil después de cada compilación.

Cualquier agente de compilación ahora puede firmar de forma segura la aplicación sin necesidad de ningún certificado o administración de perfiles en el propio equipo de compilación.

Preinstalación del certificado y el perfil en un agente de compilación de macOS

Como alternativa, puede preinstalar el certificado de firma y los perfiles de aprovisionamiento en agentes de compilación de macOS autohospedados para su uso continuado por las compilaciones. Use este método solo cuando confíe en las personas y procesos que tienen acceso a la cadena de claves macOS en las máquinas del agente.

Añadir la variable de contraseña del llavero a la canalización

Agregue una nueva variable a la tubería de compilación denominada KEYCHAIN_PWD. Establezca el valor como la contraseña de cadena de claves macOS predeterminada, que normalmente es la contraseña del usuario que inicia el agente. Seleccione el icono de bloqueo para proteger esta contraseña.

Instalación del certificado P12 en el agente

Para instalar el certificado P12 en la cadena de claves predeterminada, ejecute el siguiente comando desde una ventana de terminal macOS en el equipo del agente. Reemplace por <certificate.p12> la ruta de acceso y el nombre del archivo P12 y reemplace por <password> la contraseña de cifrado del archivo P12.

sudo security import <certificate.p12> -P <password>

Instalación del perfil de aprovisionamiento en el agente

Busque el nombre completo de la identidad de firma escribiendo security find-identity -v -p codesigning en una ventana de terminal macOS. Verá una lista de identidades de firma con el formato iPhone Developer/Distribution: Developer Name (ID). Si una identidad no es válida, verá algo parecido a (CSSMERR_TP_CERT_REVOKED) después de la identidad.

Para instalar el perfil de aprovisionamiento en el agente, ejecute el siguiente comando desde la ventana del terminal macOS. Reemplace por <profile> la ruta de acceso al archivo de perfil de aprovisionamiento. Reemplace por <UUID> el UUID del perfil de aprovisionamiento, que es el nombre de archivo del perfil de aprovisionamiento sin la .mobileprovision extensión.

sudo cp <profile> ~/Library/MobileDevice/Provisioning Profiles/<UUID>.mobileprovision

Adición de tareas de firma y aprovisionamiento que usan la cadena de claves predeterminada

En la canalización de compilación de YAML, agregue la tarea InstallAppleCertificate@2 antes de la tarea Xcode@5 . En el código, establezca los valores siguientes:

  • certSecureFile: el nombre del archivo .p12 cargado.
  • certPwd: variable para el P12password seguro.
  • signingIdentity: nombre completo de la identidad de firma.
  • keychain: default para permitir el acceso a la cadena de claves predeterminada.
  • keychainPassword: la variable KEYCHAIN_PWD.
  • deleteCert: false para conservar el certificado entre compilaciones de software.
- task: InstallAppleCertificate@2
  inputs:
    certSecureFile: '<secure-file.p12>'
    certPwd: '$(P12password)'
    signingIdentity: <full-signing-identity>
    keychain: default
    keychainPassword: `$(KEYCHAIN_PWD)
    deleteCert: false

Agregue también la tarea InstallAppleProvisioningProfile@1 antes de la tarea Xcode@5 . En el código:

  • Establezca provProfileSecureFile en el nombre del archivo de perfil de aprovisionamiento.
  • Configure removeProfile en false para conservar el perfil entre builds.
- task: InstallAppleProvisioningProfile@1
    inputs:
      provProfileSecureFile: '<secure-file.mobileprovision>'
      removeProfile: false

El agente de compilación de macOS ahora puede firmar y aprovisionar de forma segura la aplicación para todas las compilaciones sin necesidad de más certificados o administración de perfiles.

Configuración de la tarea de compilación de Xcode para hacer referencia a los archivos seguros

La tarea de compilación de Xcode (Xcode@5) hace referencia a signingIdentity y a provisioningProfileUuid mediante variables. Estas variables se establecen automáticamente para el certificado seleccionado y el perfil de aprovisionamiento mediante las tareas anteriores Instalar certificado de Apple y Instalar perfil de aprovisionamiento de Apple.

Agregue el código siguiente a la tarea Xcode build (Xcode@5) de la canalización:.

- task: Xcode@5
  inputs:
    signingOption: 'manual'
    signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)'
    provisioningProfileUuid: '$(APPLE_PROV_PROFILE_UUID)'

El agente de compilación de canalización ahora firma y aprovisiona la aplicación sin más certificados ni administración de perfiles en el equipo de compilación o en la canalización de compilación.