3 votos

La firma de una aplicación que incluye Java falla

Intento firmar un paquete de aplicaciones que incluye Java Runtime Environment 8 (JRE).

Desde la línea de comandos ejecuto este comando:

codesign -s "Developer ID Application: My Company" /Development/MyApp.app

Obtengo esta salida:

MyApp.app: code object is not signed at all
In subcomponent: /Development/MyApp.app/Contents/PlugIns/jre8/Contents/Home/jre/COPYRIGHT

El resultado es que el paquete de aplicaciones no se firma como se esperaba.

¿Cómo puedo solucionarlo?

0 votos

¿Intentas hacer un sandbox de la aplicación o simplemente firmarla para que sea aceptada por Gatekeeper y se distribuya fuera de la tienda de aplicaciones?

0 votos

Esto último. Pondré los paquetes en un .dmg para su distribución en línea.

1voto

Oskar Puntos 1242

firma del código

El manual amigable sobre la firma de código dice que hay que firmar primero el subcomponente, y luego volver a intentarlo con la propia aplicación:

codesign dice que mi código no está firmado cuando intento firmarlo.

Asegúrese de que todo el código anidado ya está firmado y su firma es válida. Xcode se encargará de esto por ti si dejas que se encargue de las tareas de firma de código.

Continúa diciendo que deje que Xcode se encargue de toda la firma, lo que puede o no ser útil ya que usted ya está eligiendo firmar cosas desde la línea de comandos.

--deep

Para firmar todo el código anidado de una sola vez, añada la etiqueta --deep argumento para codesign :

codesign --deep -s "Developer ID Application: My Company" /Development/MyApp.app

shell script

Otra forma de hacer lo mismo es crear un shell script que compruebe el estado de la firma del código anidado, y firme si falta. De esta manera se puede tener más control sobre lo que se está firmando dentro del bundle.

Ejemplo:

Un bash-script llamado sign-unsigned.sh que comprueba una entrada del paquete y la firma si no está ya firmada podría hacerse así:

#!/bin/bash
if codesign --verify $1 ; then 
   exit; 
else
   codesign --sign "$2" $1;
fi

Ponga el sign-unsigned.sh en /Development y hacer esto en la línea de comandos:

cd /Development/MyApp.app/
find . -exec ../sign-unsigned.sh {} "Developer ID Application: My Company" \;
codesign --sign "Developer ID Application: My Company" ../MyApp.app

0 votos

Gracias @bmike creo que esto puede funcionar. Aun así, de esta forma tengo que hacer un script (o algo similar) que firme todos los archivos del bundle individualmente. Si sólo codesign podría hacer eso por mí cuando especifique un paquete-carpeta...

0 votos

@JoachimBratteli sip - al menos el mensaje de error te hace saber que debes firmar. Xcode puede ser útil sólo para empaquetar su aplicación si usted encuentra que la elaboración de su propio conjunto de herramientas para la firma es más oneroso que la configuración de las fases de construcción para ensamblar el paquete que luego se distribuye.

0 votos

Resuelto. Acabo de añadir a esta respuesta mi solución del shell script. Realmente no sé cómo incorporar una declaración if en el bloque find -exec, así que hice un shell script que find podría llamar. Gracias de nuevo por indicarme la dirección correcta @bmike

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X