¿Cómo arreglar el error de firma de código de la aplicación iOS?

Intenté arreglar este problema que fue una pesadilla para mí durante toda la semana pasada y lo arreglé al final del largo esfuerzo. No era una solución común.

¿Realmente necesitas este artículo para arreglarlo?
Tal vez.

Porque durante la investigación, he leído demasiados foros (incluyendo los chinos. pero no leer, sólo mirar :)), artículos, entradas de StackOverflow etc. pero ninguno de ellos me pudo ayudar. Por lo tanto, quiero crear una compilación de correcciones para este problema.

Antes del comienzo, puede encontrar mi escenario en el siguiente.

Tengo una aplicación de Cordova y generar una construcción a través de Cordova CLI. Pero en general, esto no es diferente de la construcción de la aplicación nativa de ios. En realidad, estaba funcionando correctamente hasta las actualizaciones de macOS y XCode.

Después de las actualizaciones de Mojave y XCode 10, no puedo generar una construcción en el Jenkins. En el siguiente error apareció continuamente. Este es el llavero y el certificado dependiente problema exactamente.

..........errSecInternalComponent
Command /usr/bin/codesign failed with exit code 1

Podemos empezar a soluciones. Usted debe saber esas soluciones comunes son al principio de la lista.

Solución común 1: Compruebe Certificado válido

Usted debe comprobar el llavero al certificado válido se añade correctamente. Puede hacerlo a través de la aplicación Keychain Access o el siguiente comando a través de la terminal.

security find-identity -vp codesigning

Su certificado debe estar en el resultado. Si no es así, por favor, elimine y añada su certificado al llavero de nuevo.

Solución común 2: Bloquear y desbloquear el llavero

Otra solución más común aquí. Ejecute los siguientes comandos en la terminal. Usted debe agregar su propio nombre de llavero y la contraseña.

security lock-keychain temp.keychain
security unlock-keychain -p p@ssw0rd temp.keychain

En este caso, utilizando el nombre de llavero es «temp» y su contraseña es «p@ssw0rd». También, usted puede encontrar la ruta completa del llavero en el siguiente comando y se puede utilizar en lugar del nombre del llavero (temp).

security list-keychains

Solución común 3: Reiniciar la máquina

Puede ser visto como divertido, pero esta solución de alta upvoted en la mayoría de los sitios web. Si agrega el nuevo certificado, reiniciar la máquina puede ser útil. Usted puede utilizar el siguiente comando para reiniciar.

sudo reboot

Solución común 4: Establecer la contraseña de llavero a la lista de partición

Esta solución es la fijación de los problemas de solicitud de contraseña. En algunos casos, la firma de código espera la contraseña del llavero desde el prompt pero el acceso remoto no tiene esta característica. Por lo tanto, generalmente, el proceso de firma de código se completa sin éxito.

security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k p@ssw0rd /Users/ceyhunkeklik/Library/Keychains/temp.keychain-db

Puede encontrar la ruta completa del llavero con el método que se describió en «Solución común 1».

Solución de mi caso: Comprobar y eliminar claves privadas duplicadas

En mi caso, el llavero temporal tenía un certificado válido y su clave privada. No sé por qué, pero el llavero «Sistema» tenía una clave privada relacionada con mi certificado válido. He comprobado todas las claves privadas de todos los llaveros y he eliminado todas las claves duplicadas de los llaveros irrelevantes. Además, he eliminado todos los certificados caducados, si los hay.

Supongo que estos duplicados aparecieron debido a la actualización de Mojave, pero realmente no sé por qué.

Conclusión 🙂