No se pudo generar la versión de compilation de la aplicación Cordova iOS.

Estoy usando phonegap CLI 3.1 y XCode5. Estoy intentando generar la compilation para el modo de liberación a través de Phonegap CLI y Xcrun. No quiero usar Phonegap Build para upload el mobileprovision o lo que sea el process de ellos. Quiero hacerlo por xcrun para asignar el mobileprovison a la compilation de versiones.

1) cordova build ios –release

Comstackción de la aplicación en la plataforma "ios" mediante el command "/ Aplicaciones / MAMP / htdocs / MyTest / MyTestApp / platforms / ios / cordova / build" –release Plataforma "ios" comstackda con éxito.

2) sudo xcrun -sdk iphoneos PackageApplication -v "ios / build / emulator / MyTestApp.app" -o "/Users/mymac/Desktop/Testnew/MyTestApp.ipa" –sign "Distribución de iPhone: NAME (TEAM_ID)" – -embed "MyTestApp_Dis.mobileprovision"

Aplicación de empaquetado: 'ios / build / emulator / MyTestApp.app' Argumentos: embed = MyTestApp_Dis.mobileprovision verbose = 1 output = / Users / mymac / Desktop / Testnew / MyTestApp.ipa sign = Distribución iPhone: NAME (TEAM_ID)
Variables de entorno:
HOME = / Usuarios / mymac
SUDO_GID = 20
SDKROOT = /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk
VERSIONER_PERL_PREFER_32_BIT = no
MAIL = / var / mail / root
SSH_AUTH_SOCK = / tmp / launch-zsBMC8 / Oyentes
LANG = en_US.UTF-8
USUARIO = root
LOGNAME = root
__CF_USER_TEXT_ENCODING = 0x0: 0: 0
USERNAME = root
PATH = / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / local / git / bin
SUDO_USER = mymac
SHELL = / bin / bash
TERM = xterm-256color
SUDO_COMMAND = / usr / bin / xcrun -sdk iphoneos PackageApplication -v ios / build / emulator / MyTestApp.app -o /Users/mymac/Desktop/Testnew/MyTestApp.ipa –signar Distribución iPhone: NAME (TEAM_ID) –embed MyTestApp_Dis.mobileprovision
SUDO_UID = 501
VERSIONER_PERL_VERSION = 5.12

Directorio de resultados: '/Users/mymac/Desktop/Testnew/MyTestApp.ipa'
Directorio temporal: '/ tmp / W81FhZ9VAH' (NO se eliminará al salir cuando se establece detalladamente)
+ / bin / cp -Rp ios / build / emulator / MyTestApp.app / tmp / W81FhZ9VAH / Payload
El progtwig / bin / cp devolvió 0: []

Verificando la aplicación original

  • / usr / bin / codesign –verify -vvvv ios / build / emulator / MyTestApp.app
    El progtwig / usr / bin / codesign devuelve 1: [ios / build / emulator / MyTestApp.app: el object de código no está firmado en absoluto
    En architecture: i386
    ] Fallo en la verificación de códigos: ios / build / emulator / MyTestApp.app: el object de código no está firmado en absoluto. En la architecture: i386

Hecho comprobando la aplicación original

Incrustar 'MyTestApp_Dis.mobileprovision'

  • / bin / rm -rf /tmp/W81FhZ9VAH/Payload/MyTestApp.app/embedded.mobileprovision Progtwig / bin / rm devuelto 0: []
  • / bin / cp -rp MyTestApp_Dis.mobileprovision /tmp/W81FhZ9VAH/Payload/MyTestApp.app/embedded.mobileprovision Progtwig / bin / cp devuelto 0: []
  • / usr / bin / codesign -d –entitlements / tmp / W81FhZ9VAH / entitlements_rawixGWnKhi /tmp/W81FhZ9VAH/Payload/MyTestApp.app Program / usr / bin / codesign devuelto 1: [/tmp/W81FhZ9VAH/Payload/MyTestApp.app: code object no está firmado en absoluto]
    error: Error al leer derechos desde '/tmp/W81FhZ9VAH/Payload/MyTestApp.app'

Hmmm, estoy teniendo un problema similar como Shashi.

Cuando ejecuto 'cordova buld ios [–release]' desde el shell y luego hago un 'xcrun …' luego me funciona bien.

PERO: al ejecutar esta secuencia desde un script, también recibo un error de "Error de comprobación de códigos …"

Si inserto (me gusta) un ciclo de "espera" dentro de mi script entre el cordova y la llamada xcrun, funciona.

Entonces, para mí, parece, como si Cordova regresa al shell mientras no está completamente terminado (?)

El hecho es si codifico mi script como

#!/bin/bash cordova build ios --release sleep 5 sh -c "xcrun ..." 

esta funcionando para mi Pregunta: ¿Es un error en cordova / phonegap?

Entonces, finalmente tengo todo para que funcione bien …: D

El problema de que Jenkins se queje de una ejecución fallida de 'códigosign …' es un problema de MacOS (configuration)

Lo crucial es permitir que Jenkins tenga acceso al llavero del sistema. El acceso permitido para el shell de inicio de session del usuario de Jenkins es diferente del process del server de Jenkins que se ejecuta bajo la count de usuario de Jenkins (!)

Por ahora me doy count de esto ejecutando el deslocking de login.keychain dentro del trabajo de Jenkins antes de ejecutar mi script de compilation

como: en el trabajo de Jenkins para "ejecutar shell"

 security unlock-keychain -p password /Users/Shanetworking/Jenkins/Library/Keychains/login.keychain echo ##### building now ###################### ./buildit.sh ios --release -v 

Esta puede no ser la solución 100% mejor, pero por ahora funciona: P

Véase también: [1]: el llavero no se desbloqueará del script de Jenkins a less que el usuario haya iniciado session

Mientras tanto, encontré: el hecho es que, cuando Córdova sale y vuelve a la shell, las actividades relacionadas con CORDOBA NO se completan todavía.

Toma un time después de la salida de cordova, para que aparezca el file 'platforms / ios / AppName / _CodeSignature / CodeResources'. Este file, obviamente, es esencial para que 'codeign' que comience con xcrun tenga éxito.

Entonces lo hago en mi script (que llamo 'buildit.sh')

 #!/bin/bash [...] cordova build ios --release signaturefile="platforms/ios/build/device/$appname/_CodeSignature/CodeResources" echo DEBUG:signatur file is $signaturefile while [ ! -f $signaturefile ] do echo waiting sleep 1 done xcrun ... 

Entonces, todo el process de construcción / empaquetado en un script tiene éxito.

Sin embargo: Ejecutando el script desde mi Jenkins server de ContinuousIntegration, observo que este criterio puede ser esencial, pero no lo suficiente. Desde el IC todavía recibo un

/ usr / bin / codesign –verify -vvvv […] Program / usr / bin / codesign devuelto 1: […] el object de código no está firmado en absoluto

¿¿¡error!??

EDIT (05.12.2013): Esto se debe al hecho de que el service Jenkins no pudo acceder al llavero. Por ejemplo, en el trabajo de Jenkins, un deslocking del llavero antes de ejecutar el script de compilation lo ordera. (Puede no ser la solución más elegante, pero al less prooves el problema de no estar en la secuencia de commands 🙂

Para omitir la firma del código, puede realizar una compilation manual desde la console así:

xcodebuild clean build CODE_SIGN_IDENTITY = "" CODE_SIGNING_REQUIRED = NO Usa además los parameters -configuration, -target y -sdk para definir tu configuration de compilation.

Para deshabilitar la firma de código:

* Vaya a / Aplicaciones. Haga clic derecho en XCode y select 'Mostrar contenido del package'. Copie el contenido / Desarrollador / Plataforms / iPhoneOS.platform / Developer / SDKs / iPhoneOS5.1.sdk / SDKSettings.plist en su escritorio. (Asegúrese de copyr y pegar realmente. Sin drag and drop) Ábralo y bajo DefaultProperties establezca CODE_SIGNING_REQUIRED en NO. Vuelva a copyrlo y reemplace el file original. Reinicie XCode. Abre tu proyecto. En Project Navigator, select su proyecto y abra la sección Configuración de construcción de su porject (y no un objective en particular). Bajo Código de firma, busque Identidad de firma de código y, para ambos modos, establezca Cualquier SKD de iOS para No firmar código. Ahora deberías poder build tu proyecto sin ningún error. *

Para hacer un IPA:

En 'Project Navigator' select Productos Haga clic derecho en [NameOfYourProject] .app y select 'Mostrar en Finder'. Cree una carpeta y asígnele el nombre Payload Move [NameOfYourProject] .app a Payload. Comprima la carga útil y cámbiele el nombre a [NameOfYourProject] .ipa