xcode4.5 - ¿Qué son las identidades de firma de código?
(1)
Definitivamente, te has topado con un tema que se profundiza muy rápidamente y es una fuente común de dolores de cabeza cuando intentas hacer compilaciones de dispositivos con aplicaciones iOS. Primero, permítame poner una pequeña estructura en torno a cada uno de los términos involucrados en el proceso de firma de código (tanto para usted como para cualquier persona que se encuentre con esta pregunta más adelante) y luego podemos pasar a su pregunta principal:
Terminología de CodeSign
La fase de firma de código de una compilación de dispositivo iOS es el proceso mediante el cual firmamos criptográficamente y aseguramos una disposición específica de datos en una aplicación, incluido el propio binario ejecutable de la aplicación, cualquier elemento multimedia incorporado (como texturas de botones, ilustraciones personalizadas, fuentes, etc.). ), y un conjunto de metadatos sobre nuestra aplicación y representa una "huella digital" única de los datos de nuestra aplicación. Esta huella digital es lo que utilizan Apple y iOS para ayudar a garantizar que nuestras aplicaciones no se alteren cuando se entregan a los dispositivos del usuario o cuando se ejecutan en dispositivos iOS del usuario. Para que esto sea posible, los desarrolladores deben registrarse en Apple, configurar un identificador de aplicación, solicitar certificados de desarrollo y distribución, registrar un conjunto de dispositivos de prueba y, finalmente, solicitar un perfil de aprovisionamiento para sus esfuerzos de desarrollo. El papel de cada uno de estos elementos es el siguiente:
- Identificador de la aplicación (o AppID) : una cadena de estilo DNS inversa que identifica de forma única una aplicación iOS en la AppStore.
- Certificados de desarrollo y distribución : son documentos digitales firmados criptográficamente por Apple que certifican la identidad de la persona a la que se emitieron los documentos. Para aquellos familiarizados con la infraestructura de clave pública, el certificado contiene una clave pública que se puede usar para verificar la integridad de las firmas más adelante en el proceso.
- Dispositivos de prueba : el único canal de distribución estándar aprobado para el software de iOS es a través de AppStore. Al registrar un dispositivo de prueba, los desarrolladores pueden eludir la AppStore e instalar el software directamente en los dispositivos para fines de desarrollo y prueba. El número total de dispositivos de prueba permitidos en un año dado de membresía es de 100 dispositivos de prueba.
- Perfil de aprovisionamiento : un documento que contiene tres componentes principales: 1) Exactamente un ID de aplicación, 2) Uno o más Certificados de desarrollador de iOS y 3) Cero o más dispositivos de prueba registrados en los que se puede instalar directamente la aplicación de iOS mencionada. El contenido de este documento está firmado criptográficamente por Apple para garantizar que su contenido no pueda ser manipulado.
Es la presencia de este archivo y las comprobaciones de la huella digital lo que determina si una aplicación generada por un desarrollador puede instalarse en el dispositivo, ya que contiene la noción de "Quién" (Certificados), el "Qué" (AppID) y el "Dónde". ''(qué dispositivos).
Genial, lo tengo ... Ahora, ¿qué pasa con esta identidad de Signo de Código?
En el contexto de la configuración de compilación de un objetivo de compilación individual, el término Identidad de Signo de Código se refiere al Nombre Común de los certificados que se instalan en la máquina de la Cadena de Llaves del Desarrollador. En la configuración de compilación de Xcode aparece como una lista de opciones entre las cuales los desarrolladores deben seleccionar una Identidad para utilizarla en CodeSign. Hay mucha información codificada en cada sección de este menú:
Mirando primero el texto en negro - De la imagen de arriba ''Desarrollador de iPhone: Bryan Musial (XXXXXXXXXX)'' - Este es realmente el elemento principal que Xcode usa para encontrar las claves públicas y privadas utilizadas para el inicio de sesión de código. Al seleccionar este elemento, le está indicando a Xcode que busque en su Llavero e intente encontrar un certificado cuyo campo ''Nombre común'' coincida con esa cadena y luego tome ese certificado (que contiene la clave pública) y la clave privada asociada para usar en el Operación de inicio de sesión de código.
Solo para ser concienzudo si abre Keychain Access y hace doble clic en cualquiera de los certificados ''iPhone Development: ...'' o ''iPhone Distribution: ...'' muestra toda la información codificada en los certificados que Apple emite a sus desarrolladores. Si tuviera que seleccionar la entrada en la primera imagen, Xcode alcanzaría mi llavero y retiraría este certificado (NOTA: los detalles de identificación únicos han sido X''d o han sido modificados):
Como puede ver, el texto negro de la selección de Xcode coincide exactamente con el campo del Nombre común en mi certificado, por lo que Xcode retirará este certificado y su clave privada vinculada para usar en los Códigos que firman mi aplicación.
Al observar nuevamente la configuración de Xcode, también notamos que hay más texto en esa selección de menú, el texto en gris más claro identifica el perfil de aprovisionamiento que se integrará en la aplicación. En el caso de mi configuración de ejemplo, Xcode irá y obtendrá el Perfil de aprovisionamiento "MyiOSApp Testing", que tiene su AppID establecido en ''com.myiosapp. *''. Xcode es muy codicioso con el ocultamiento de perfiles de aprovisionamiento, y afortunadamente, Organizer te ofrece un excelente lugar para ver los perfiles de aprovisionamiento que están instalados y tener una idea de los datos básicos que contienen. Nuevamente para la identidad de signo de código Xcode en la primera imagen, el perfil de aprovisionamiento relacionado en mi organizador se vería así:
La columna ''Nombre'' y el final de la cola de la columna Identificador de la aplicación coinciden con el texto gris claro de mi configuración de Xcode, por lo que este es el Perfil de aprovisionamiento que se seleccionará para usar durante el Signo de código. También es importante tener en cuenta la columna ''Estado'' al final de la fila. En este caso, es verde e indica ''Perfil válido''. Esto significa que mi Llavero tiene tanto la clave pública como la privada para al menos uno de los certificados codificados en ese perfil de aprovisionamiento. Si este estado no es verde, entonces hay un problema con su configuración actual de claves públicas / privadas y / o el perfil de aprovisionamiento: la firma de código no puede funcionar a menos que el perfil de aprovisionamiento que está tratando de usar tenga su estado establecido en verde . Otras opciones de estado posibles incluyen:
- No se encontró la identidad de firma válida: no tiene las claves pública y privada para al menos uno de los certificados codificados en este perfil de aprovisionamiento. Elimine el perfil del Organizador, luego regrese a la herramienta Certificados, Identificadores y Perfiles en developer.apple.com/ios y asegúrese de tener su Certificado de Desarrollo incluido en el Perfil de Aprovisionamiento. Verifique que su certificado en Keychain Access no haya caducado ni haya sido revocado y tenga una clave privada vinculada al certificado de clave pública.
- El perfil ha caducado: la fecha de caducidad del perfil de aprovisionamiento ha caducado. Elimine este perfil de aprovisionamiento del organizador, luego vuelva a visitar la herramienta Certificados, identificadores y perfiles en developer.apple.com/ios y vuelva a emitir este perfil de aprovisionamiento (si aún es necesario)
Otros artículos que pueden hacerte tropezar
Además de todos los matices acerca de asegurarse de que tiene instaladas las claves públicas y privadas, y de que los perfiles de aprovisionamiento están configurados correctamente, hay algunas otras cosas que pueden hacer tropezar a los desarrolladores. Primero, Xcode recopila los perfiles de aprovisionamiento y se cuelga de ellos hasta que le digas que los elimine. En teoría, esto no es una gran cosa, excepto en los escenarios en los que realiza cambios en un Perfil de aprovisionamiento, descarga e instala una versión más nueva. Muchas veces Xcode toma el perfil correcto, pero a veces no lo hace bien y pasará horas revisando la herramienta Certificados, Identificadores y Perfiles, así como su llavero, para intentar tener una idea de lo que está sucediendo.
Sugerencia 1: cuando instale una versión más reciente de un perfil de aprovisionamiento, elimine los más antiguos para que Xcode no se coloque en una posición en la que deba tomar una decisión.
Algo similar puede suceder si vuelve a emitir un Certificado de desarrollo o distribución: la mayoría de las veces Xcode activará una advertencia durante la compilación sobre un certificado ambiguo.
Sugerencia 2: Preste atención a las advertencias de ambigüedad durante la construcción. Implica que tiene un certificado antiguo flotando alrededor que cumple con los criterios de compilación y podría ser usado inadvertidamente, lo que podría causar un problema de compilación.
Sugerencia 3: Siempre que esté en Keychain tratando con sus certificados, busque los certificados ''iPhone Developer: ...'' o ''iPhone Distribution: ...'' que tienen una ''X'' roja. Este es un indicador de que el certificado ha caducado o ha sido revocado. De cualquier manera, esta clave pública (y la clave privada potencialmente vinculada) no le será de utilidad adicional para fines de compilación y se puede eliminar.
Finalmente, la configuración de Identidad de Signo de Código también tiene una opción que enumera como "Selector Automático de Perfil". En muchos casos, querrá usar esta opción, ya que hará todo lo posible para buscar automáticamente su AppID desde la configuración de su objetivo de construcción, busque un perfil de aprovisionamiento que coincida con ese ID de aplicación y contenga certificados para los que tenga una clave pública y privada. . En algunas circunstancias de compilación personalizadas puede que no sea posible usar esta opción y tendrá que usar una de las opciones fijas y específicas, como mi configuración de demostración en la primera imagen. Tenga en cuenta que si elige una opción fija, cada vez que actualice el Perfil de aprovisionamiento, también deberá actualizar la configuración de compilación de Identidad de firma de código para que coincida con la versión más reciente.
Puntos clave
- Asegúrate de mantener tus listas de Llavero y Perfil de aprovisionamiento de Xcode limpias y deduplicadas.
- Después de instalar un certificado y un perfil de aprovisionamiento, asegúrese de que el Organizador informe que el estado del perfil de aprovisionamiento es Verde ("perfil válido"). Cualquier otro estado indica que existe un problema entre su llavero y el perfil de aprovisionamiento que debe abordarse antes de que incluso considere ejecutar una compilación.
- Prueba y usa el ''Selector Automático de Perfil''. Sus compañeros de equipo y cualquier sistema de compilación automatizado estarán más contentos con usted si ellos tampoco tienen que pensar en la configuración de Identidad de Signo de Código.
- Si no puede usar el Selector automático de perfiles, asegúrese de mantener siempre la configuración actualizada a medida que se realizan nuevas iteraciones de su perfil de aprovisionamiento.
¡Buena suerte con la configuración de su compilación, y hágame saber si tiene alguna otra pregunta de seguimiento!
¿Qué son las "identidades de firma de código" en XCode?
¿Son los certificados?
¿Son las claves privadas?
¿Son los identificadores de la aplicación?
¿Son los perfiles de aprovisionamiento?
Si voy a la configuración de compilación de destino, solicita la identidad de firma de código, por lo que debo resolver esto.
Pensé que firmamos código usando nuestra clave privada. Sin embargo, ninguno de mis nombres de clave privada aparece. Muestra una lista de certificados (creo, aunque ni siquiera estoy seguro).