Error de Xcode 6.1 al construir IPA

140

Acabo de actualizar a Xcode 6.1 hoy, y adivinen qué: ahora tengo problemas para enviar compilaciones utilizando la aplicación de escritorio TestFlight. Aquí está el error que recibo mientras la aplicación comienza a construir el IPA:

El error

error: / usr / bin / codesign --force --preserve-metadata = identificador, derechos, reglas de recursos --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-rules = / tmp / QYFSJIvu7W / Payload / XX.app / ResourceRules.plist / tmp /QYFSJIvu7W/Payload/XX.app falló con el error 1. Salida: Advertencia: uso de --preserve-metadata con la opción "resource-rules" (en desuso en Mac OS X> = 10.10)! Advertencia: --resource-rules ha quedado en desuso en Mac OS X> = 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: no se pueden leer recursos

El 'Artículo de soporte' no tiene idea de lo que está sucediendo.

No parece ser un problema de TestFlight porque sucede lo mismo en un entorno de CI como Jenkins usando xcrun o herramientas similares.

La aplicación no se actualizó durante meses, por lo que sé que no debería esperar ninguna actualización para solucionar esto pronto. Solía ​​funcionar muy bien para mí y para mis clientes, por lo que tampoco tengo muchas ganas de abandonarlo por otra cosa.

Cualquier idea sobre de qué se trata este error y cómo solucionarlo sería muy apreciada.

Şafak Gezer
fuente
44
No parece que sea un problema TestFlight porque lo mismo sucede en un entorno de CI con el comando xcrun como esto: xcrun -sdk iphoneos PackageApplication -v <Path_to_App> -o <Path_to_IPA> --sign <Distribution_certificate> --embed <Provisioning_profile>. Con Xcode 6.0.1, todo funcionó bien.
Daniel Martín

Respuestas:

312

Desearía saber por qué funciona, pero aquí hay una solución que funcionó para mí:

¡Encontré la solución!

Haga clic en su proyecto> Objetivos> Seleccione su objetivo> Configuración de compilación>

Code Signing Resource Rules Path

y añadir :

$(SDKROOT)/ResourceRules.plist

Tim
fuente
77
¡Gracias! Francamente, no me importa por qué funciona :) solo lo último en lo que Apple rompió en su gran racha de errores en los últimos meses. De todos modos, gracias por señalar la solución. (y un voto negativo para mí por no buscar el error a fondo antes de publicar)
Şafak Gezer
10
CODE_SIGN_RESOURCE_RULES_PATH es el nombre de la variable si está editando la configuración de xcodeproj a través de un script o línea de comando. developer.apple.com/library/ios/recipes/…
roblocop
55
No puedo ver Code Signing Resource Rules Pathen mi configuración de compilación. ¿Alguna idea?
Georg
77
Asegúrese de haber seleccionado TODOS y no los ajustes BÁSICOS (la fila debajo de "General, Capacidades, Información, Configuración de compilación, etc.")
AS
Aparentemente, esto hará que su aplicación sea rechazada: stackoverflow.com/questions/26488077/…
Glenn Maynard
61

El siguiente parche para PackageApplications lo arregló para mí, eliminé las reglas de recursos ya que dice que está en desuso en 10.10.

Testflight construye el trabajo sin él. La tienda de aplicaciones también se construye.

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin
 % diff PackageApplication PackageApplicationFixed 
155,157c155,156
<     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
<                          "--sign", $opt{sign},
<                          "--resource-rules=$destApp/ResourceRules.plist");
---
>     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
>                          "--sign", $opt{sign});
Alistra
fuente
Se eliminó el parámetro obsoleto deshonesto de PackageApplication, y Buildozer ahora construye mi aplicación Python para iOS
Ian Ellis
Gran arreglo! Muchas gracias :) La configuración anterior "Ruta de reglas de recursos de firma de código" no solucionó mi problema, pero esta respuesta sí lo hizo, además la solución ahora es global en todos los proyectos :)
Pellet
@IanEllis: ¿Podría decirme cómo eliminó el parámetro "reglas de recursos" de PackageApplication? ¡Será de gran ayuda!
Rashmi Ranjan mallick
8
Aquí hay una línea para arreglar PackageApplication: perl -p -i'Orig '-e' BEGIN {undef $ /;} s /, resource-rules (. * Sign}). * ResourceRules.plist "/ $ 1 / smg '" / Aplicaciones / Xcode6.1.1.app / Contents / Developer / Platforms / iPhoneOS.platform / Developer / usr / bin / PackageApplication "(ajuste su ruta) Y un script completo para aplicar esto: bitbucket.org/WeWantToKnow/xcode_scripts/raw/… utilizar: xcode_fix_PackageApplicationResourceRules.sh /Applications/Xcode6.1.1.app
coffeebreaks
Esta es la respuesta correcta. La respuesta de configuración de compilación fuerza el uso de una API en desuso.
Jameson
10

Envié un correo electrónico al soporte de TestFlight y obtuve esta respuesta:

Nuestro equipo está investigando este problema con la aplicación TestFlight Desktop. Mientras tanto, use Xcode para crear el archivo IPA y luego cárguelo usando la aplicación de escritorio o el sitio web TestFlight.

La solución sugerida funcionó.

Adán
fuente
1
Me funcionó para hacer el .ipa con Xcode y subirlo a través de la aplicación de escritorio.
livingtech
@livingtech Sí, sin embargo, también recibí el temido "Xcode que genera un nuevo perfil en lugar de elegir el que quiero" -bug :) Cargar con testflight directamente funcionó espléndidamente.
helmesjo
10

La respuesta de Tim Gostony ya no funciona desde el lanzamiento de Xcode 7. Ahora el proceso de envío de la App Store falla cuando existen reglas de recursos. La solución es borrar su ruta de reglas de recursos de firma de código y reemplazar xcrun con la herramienta xcodebuild:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]

La opción Options.plist más simple para exportar archivos ipa de distribución ad-hoc se ve así:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>iCloudContainerEnvironment</key>
    <string>Production</string>
    <key>teamID</key>
    <string>[YOUR TEAM ID]</string>
    <key>method</key>
    <string>ad-hoc</string>
</dict>
</plist>

Hay otras opciones disponibles para este archivo plist con respecto al código de bits, el adelgazamiento de aplicaciones, etc. Por eso creo que la herramienta xcodebuild es la herramienta adecuada para exportar archivos ipa para iOS 9 y superior.

Más detalles sobre las opciones de plist están disponibles con el comando xcodebuild -help.

Vladimir Grigorov
fuente
gracias Vladimir, me estaba confundiendo mucho sobre cómo entra en conflicto con las presentaciones de Xcode 7.
kevinl
¿Cómo reemplazas exactamente xcrun? No puedo ver ninguna configuración para eso en el complemento Jenkins Xcode :(
Hlung
2

En Yosemite con XCode 6.4 incluso usando el parche SDKROOT, la firma del código falla. El siguiente artículo explica cómo parchear el script XCode para solucionar esto. Tenga en cuenta que esto es parchear XCode, por lo que es específico de la versión, pero soluciona el problema.

http://www.jayway.com/2015/05/21/fixing-your-ios-build-scripts

GruñónGary
fuente
1

La respuesta de Alistra funciona para mí, pero no quiero cambiar un script que no es mío (una futura versión de Xcode podría cambiar este archivo y la corrección se perderá).

 diff PackageApplication PackageApplicationFixed 155,157c155,156
<-     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements,resource-rules",
<-                          "--sign", $opt{sign},
<-                          "--resource-rules=$destApp/ResourceRules.plist");
---
->     my @codesign_args = ("/usr/bin/codesign", "--force", "--preserve-metadata=identifier,entitlements",
->                          "--sign", $opt{sign});

Creo que la respuesta de Vladimir Grigorov es la mejor si tienes un archivo usando:

xcodebuild -exportArchive -archivePath [path to archive] -exportPath [path to output directory] -exportOptionsPlist [path to options.plist file]

En mi caso, no tengo el archivo, porque modifico la aplicación después de compilarla y necesito cambiar el ID del paquete y el certificado de firma.

La solución que encontré es llamarme codesignantes de usar PackageApplicationy pedir PackageApplicationno firmar. Me gusta esto :

replace :

 /usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>" --sign "<provisioning_profile.certificateSubject>" --embed "<provisioning_profile.path>"

by :

/bin/cp -rpfv "<provisioning_profile.path>" "<app_path>/embedded.mobileprovision"
/usr/bin/codesign -v -vvvv -f -s "<provisioning_profile.certificateSubject>" --entitlements="<entitlement_path>" "<app_path>"
/usr/bin/xcrun -sdk iphoneos PackageApplication -v "<app_path>" -o "<ipa_path>"

No olvide incrustar el .mobileprovisionarchivo usando para firmar cp.

gbitaudeau
fuente
0

Como se especifica en otra respuesta , tampoco puede especificar el certificado de distribución para firmar y se empaquetará correctamente. TestFlight necesitaría actualizar su aplicación para hacer esto.

pr1001
fuente