2011-09-13 21 views
8

Acabo de enterarme de la posibilidad de utilizar OTHER_CODE_SIGN_FLAGS para especificar el llavero que incluye el certificado necesario para crear y firmar una aplicación. Pero desafortunadamente no puedo hacer que funcione.OTHER_CODE_SIGN_FLAGS indicador de llave ¿ignorado?

Mi escritura es como la siguiente:

#!/bin/bash 
TARGET="MyProject" 
CONFIGURATION="Release" 
SDK="iphoneos" 
IDENTITY="iPhone Developer: John Doe (XX22RR22O)" 
KEYCHAIN="/Users/username/Library/Keychains/someKeyChain.keychain" 
PASSWORD="" 

security unlock-keychain -p ${PASSWORD} ${KEYCHAIN} 
xcodebuild -target "${TARGET}" -configuration ${CONFIGURATION} -sdk $SDK CODE_SIGN_IDENTITY="${IDENTITY}" OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}" 

Pero eso falla:

Check dependencies 
[BEROR]Code Sign error: The identity 'iPhone Developer: John Doe (XX22RR22O)' doesn't match any valid certificate/private key pair in the default keychain 

Pero si me cambio a la llavero primera funciona, pero eso no es utilizable en un servidor de compilación en múltiples construcciones podrían ocurrir simultáneamente:

#!/bin/bash 
TARGET="MyProject" 
CONFIGURATION="Release" 
SDK="iphoneos" 
IDENTITY="iPhone Developer: John Doe (XX22RR22O)" 
KEYCHAIN="/Users/username/Library/Keychains/someKeyChain.keychain" 
PASSWORD="" 

security unlock-keychain -p ${PASSWORD} ${KEYCHAIN} 
security default-keychain -s ${KEYCHAIN} 
xcodebuild -target "${TARGET}" -configuration ${CONFIGURATION} -sdk $SDK CODE_SIGN_IDENTITY="${IDENTITY}" OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}" 

Espero que ustedes puedan ayudar -Morten

Respuesta

3

La respuesta es actualizar: Xcode 4.3 respeta el indicador OTHER_CODE_SIGN_FLAGS durante el paso de compilación Check dependencies.

+0

Gracias y perdón por la demora :) – mbogh

1

Me encontré con el mismo problema al intentar configurar CI para nuestros proyectos de iOS. Terminé actualizando el script Perl PackageApplication para admitir el paso de una opción de llavero. Localización:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication 

todavía estoy esperando una aclaración de concesión de licencias de Apple para que pueda publicar mi secuencia de comandos actualizada a GitHub.

+0

Suena interesante, por favor, hágamelo saber cuando sepa más. – mbogh

+0

¿Alguna vez pudo publicar esto? – atreat

0

Ninguno de estos realmente funciona a menos que tenga las compilaciones con scripts más simples. Como dijo @Tyler, PackageApplication no admite la especificación del llavero, y algunas versiones de xcode requerirán que no haya certificados duplicados en los llaveros cuando revisen las dependencias.

No malgastes tu tiempo, solo llama a Apple y pídele que cambie el nombre de uno de tus certificados (en realidad cambiarán el nombre de tu empresa --- agregando un sufijo --- y solo tienes que regenerar tus certificados y actualizar tus perfiles).

3

Encontré que si no añadía la lista de búsqueda de llavero a llavero, xcodebuild no respetaría la configuración OTHER_CODE_SIGN_FLAG --keychain. He tenido que añadir este código:

// Early in the script 
ORIGINAL_KEYCHAINS=`security list-keychains -d user` 

// After I create my keychain, add it to the list 
security list-keychains -d user -s ${ORIGINAL_KEYCHAINS} "${KEYCHAIN_NAME}" 

// On cleanup 
security list-keychains -d user -s ${ORIGINAL_KEYCHAINS} 

Ni que decir tiene, que perdió horas calcular esto.

También ayuda, asegurándose de que el llavero permanezca abierto durante toda la construcción. Como advised here:

security -v set-keychain-settings -lut 7200 ${KEYCHAIN_NAME} 
+0

Esto es super útil, pero encontré que la lista de llaveros de usuario en 'ORIGINAL_KEYCHAINS' contenía apóstrofes para cada uno; ejecutar esa variable a través de un código como 'CLEAN_KEYCHAINS =" $ {ORIGINAL_KEYCHAINS // \ "}" '(reemplaza todos los apóstrofes con nada) cuando la limpieza funcionó sin problemas. – Luke