Saltar al contenido

La identidad de firma en macOS

Los tipos de certificado de Apple, cuál necesitas según dónde distribuyas, y el identificador de equipo del que cuelga todo lo demás.

Los tipos de certificado

El error habitual es firmar con el de desarrollo y publicar: la aplicación funciona en tu máquina y el sistema la rechaza en las demás — que es exactamente el fallo que el nivel 51.5 dice que solo aparece instalado.

El identificador de equipo

El dato central, y conviene entenderlo porque aparece en todas partes:

Y por eso cambiar de equipo —una empresa que se reorganiza, un proyecto que cambia de manos— es una migración de las serias, con el diálogo del llavero y todo lo del nivel 35.3.

Preparar el entorno

Lo que hace falta antes de poder firmar:

  • Una cuenta de desarrollador de Apple, que es de pago y anual.
  • El certificado creado y descargado, instalado en el llavero de la máquina que firma.
  • Y su clave privada, que se genera al crear el certificado y no se puede recuperar si se pierde: hay que exportarla y guardarla a salvo.

El tercer punto merece énfasis: perder la clave privada significa no poder firmar más con ese certificado, y aunque se puede crear otro, se pierde la continuidad de identidad — con las consecuencias del llavero.

Y para la máquina de construcción automática del nivel 59.3, hay que exportar certificado y clave a un fichero protegido con contraseña, guardarlo como secreto, e importarlo a un llavero temporal durante la construcción. Es el procedimiento estándar y merece hacerse con cuidado: es la operación donde más fácil es filtrar la clave.

Comprobar la identidad

Y la comprobación del nivel 35.3, que aquí es la operación básica:

Shell
# qué identidades de firma hay disponibles en esta máquinasecurity find-identity -v -p codesigning# con qué está firmado un artefacto ya construidocodesign -dv --verbose=4 MiApp.app

La segunda es la que hay que ejecutar antes de publicar, comparando el identificador y el equipo con los de la versión anterior. Es la puerta del nivel 35.3.