Aplicación binaria de iPhone no válida

78

Estoy intentando cargar una aplicación en la App Store de iPhone, pero recibo este mensaje de error de iTunes Connect:

El binario que has subido no era válido. La firma no era válida o no estaba firmada con un certificado de envío de Apple.


Nota: Se han eliminado los detalles de la pregunta original, ya que esta página se ha convertido en un repositorio de toda la información sobre las posibles causas de ese mensaje de error en particular.

Para obtener información general sobre cómo enviar aplicaciones de iPhone a la App Store, consulte Pasos para cargar una aplicación de iPhone a la AppStore .

Kristopher Johnson
fuente
hizo un tutorial para esto: stackoverflow.com/questions/21853083/…
BlackSheep

Respuestas:

35

En mi experiencia, Xcode se confunde ocasionalmente sobre qué certificado de firma usar. Me acostumbré a salir y reiniciar Xcode después de cualquier cambio en la configuración de firma de código (y hacer una compilación limpia) para solucionar este problema.

Mark Bessey
fuente
1
Intenté esto, todavía tengo problemas. Estoy usando Build & Archive de Xcode -> Upload to iTunes. ¿Alguien más tiene que dar otro paso después de esto?
quantumpotato
Es posible que obtenga una mejor información de diagnóstico si utiliza el programa de carga de aplicaciones independiente.
Mark Bessey
22

Solo quería mencionar que yo también tuve el problema con zip desde la línea de comandos. El problema radica en la forma en que maneja los enlaces simbólicos por defecto. Utilizando:

zip -y -r myapp.zip myapp.app

Resuelto ese problema.

user188785
fuente
11

Tuve el mismo problema y lo resolví de esta manera:

Los certificados de propiedad se instalaron en mi máquina de desarrollo y mobileprovision.embedded se incluyó en el archivo de distribución. Después de una hora más o menos buscando en Google y buscando, encontré la fuente del error. Dentro de Xcode, había copiado la configuración de lanzamiento y creado una nueva configuración de distribución y luego cambié la identidad de firma a mi certificado de distribución. Sin embargo, aunque se actualizó en la GUI, el archivo del proyecto no se actualizó correctamente.

Si te encuentras con el mismo error, busca en tu directorio [ProjectName] .xcodeproj el archivo project.pbxproj y ábrelo en tu editor favorito. Busque la sección Distribución. Mi roto se veía así:

C384C90C0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CODE_SIGN_ENTITLEMENTS = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
SDKROOT = iphoneos2.2.1;
};
name = Distribution;
};
C384C90D0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CODE_SIGN_IDENTITY = “iPhone Developer: Edward McCreary”;
“CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Developer: Edward McCreary”;
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = GenPass_Prefix.pch;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = GenPass;
PROVISIONING_PROFILE = “DB12BCA7-FE72-42CA-9C2B-612F76619788″;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “DB12BCA7-FE72-42CA-9C2B-612F76619788″;
};
name = Distribution;
};

Puede ver que la identidad de firma y el perfil de aprovisionamiento son incorrectos en la segunda sección. Edítelo para que coincida con la primera sección, reconstruya y estará listo para comenzar. El último se veía así:

C384C90C0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CODE_SIGN_ENTITLEMENTS = "";
"CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
GCC_C_LANGUAGE_STANDARD = c99;
GCC_WARN_ABOUT_RETURN_TYPE = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
PREBINDING = NO;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
SDKROOT = iphoneos2.2.1;
};
name = Distribution;
};
C384C90D0F9939FA00E76E41 /* Distribution */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
CODE_SIGN_IDENTITY = “iPhone Distribution: Edward McCreary”;
“CODE_SIGN_IDENTITY[sdk=iphoneos*]” = “iPhone Distribution: Edward McCreary”;
COPY_PHASE_STRIP = YES;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = GenPass_Prefix.pch;
INFOPLIST_FILE = Info.plist;
PRODUCT_NAME = GenPass;
PROVISIONING_PROFILE = “F00D3778-32B2-4550-9FCE-1A4090344400″;
“PROVISIONING_PROFILE[sdk=iphoneos*]” = “F00D3778-32B2-4550-9FCE-1A4090344400″;
};
name = Distribution;
};

guías cambiadas para proteger a los inocentes

Eddie
fuente
7

Mismo problema, solución diferente.

En mi caso, estaba comprimiendo el archivo usando zip -r myapp.zip myapp.app Turns out, el comando zip atornilló el paquete. Comprimirlo desde el buscador lo hizo funcionar.

Jorge Bernal
fuente
Me pasó exactamente lo mismo hace un mes. Exasperante.
jbrennan
Acabo de hacer funcionar esta misma solución. Probé la solución de @ shirikodama a continuación y no funcionó: ¿ha encontrado una manera de comprimir en la línea de comando?
Jesse Beder
3
No importa, estaba haciendo un cp -ry luego el zip, y fue el cpque arruinó los enlaces simbólicos en la aplicación. Debería ser cp -Rpara preservar los enlaces simbólicos.
Jesse Beder
7

Tuve el mismo problema y, después de probar varias cosas, eliminé los derechos .plist de los derechos de firma de código (solo lo dejé en blanco), se construyó bien y se cargó FINALMENTE.

Buena suerte a todos :-D

Señal2
fuente
No puedo creer que esto lo haya solucionado. Es especialmente ridículo ya que son muy explícitos sobre el archivo de derechos en la documentación del portal de aprovisionamiento.
devlord
6

Otro dato: durante un tiempo, mi aplicación pasó. Ahora agregué soporte para compras dentro de la aplicación y, de repente, falla con un problema de "firma binaria no válida / no válida". Tras una mirada cuidadosa, descubrí que el valor de identificador de la aplicación en el archivo plist de derechos estaba desactivado.

Esto, muy probablemente, tuvo que ver con el hecho de que reemplacé el perfil de aprovisionamiento de uno con comodines a uno específico de la aplicación (requerido para compras dentro de la aplicación). La ID de aplicación incorrecta calificó bajo el perfil anterior. No coincidía con el ID de la aplicación en info.plist, pero aparentemente iTunes lo perdonó.

Entonces, para recapitular:

info.plist: com.mydomain.foo
dist.plist: com.mydomain.bar
Profile: com.mydomain.*

está bien, mientras

info.plist: com.mydomain.foo
dist.plist: com.mydomain.bar
Profile: com.mydomain.foo

provoca "binario no válido".

Seva Alekseyev
fuente
5

También tuve el mismo problema, al compilar noté que el aprovisionamiento no se agregó en la compilación.

La solución para mí fue configurar la compilación en el dispositivo iphone como donde normalmente uso el simulador, pero luego no incluirá el perfil de aprovisionamiento ...

Esto podría ser un error de novato. Normalmente no se puede compilar en el dispositivo, pero cuando lo hace para la distribución, puede hacerlo.

Eric
fuente
4

Bueno, después de repetir los pasos varias veces, finalmente logré cargar mi aplicación.

No sé exactamente qué lo solucionó, pero antes del intento exitoso, cerré Xcode y Firefox y los reinicié. Supongo que una de esas aplicaciones tuvo mala juju.

Kristopher Johnson
fuente
Encontré cualquier cosa, pero Safari puede ser la causa de la mayoría de los problemas, de ahí que lo hayan reemplazado con el cargador de aplicaciones, supongo. A menudo tengo este problema al descargar certificados / perfiles desde el portabl de aprovisionamiento cuando no uso Safari
Anthony Main
4

Aquí hay un problema con el que me encontré: agregué el binario a Subversion antes de cargarlo. Al comparar / comprimir el binario, se incluyeron los directorios .svn ocultos, lo que estropeó la firma del código.

Aaron
fuente
4

Probé varias cosas después de leer varias publicaciones, incluidas las anteriores. ¡Lo que finalmente funcionó para mí fue comenzar de nuevo! Eliminé todos los certificados y perfiles de aprovisionamiento asociados con mi aplicación.

Recreé un nuevo certificado de desarrollo y un nuevo certificado de distribución. Descargué el certificado intermedio nuevamente. Luego recreé tanto el perfil de desarrollo como el perfil de distribución.

Después de instalar los tres certificados (noté que la distribución tenía claves públicas y privadas esta vez) y los dos perfiles de aprovisionamiento (¡mi perfil de distribución no se marcó como no tener un certificado válido!), Todo funcionó.

Una vez que tomé la decisión de revocar todo y empezar de nuevo, solo me llevó unos 5 minutos crear las cosas nuevas y volver a instalarlas.

Troy Sartain
fuente
4

Tuve un problema similar pero en Monotouch. Descubrí que mi perfil de lanzamiento estaba configurado para usar certificados de desarrollador. Debe tener un aspecto como este: ingrese la descripción de la imagen aquí

Ian Vink
fuente
3

Parece que este problema tiene muchas causas. Aquí está la solución a la mía:

Esto se aplica a cualquier persona que pertenezca a varios equipos de desarrollo (por ejemplo, sus propias aplicaciones y sus empresas).

Si crea la compilación con un conjunto de credenciales y vuelve a firmarla con una diferente (por ejemplo, para la distribución adhoc / appstore), debe asegurarse de que la compilación se compiló y firmó originalmente con credenciales que pertenecen al mismo equipo de desarrollo de iOS que el Las credenciales de distribución con las que vuelve a firmar pertenecen .

Por lo tanto, no cree con las credenciales de "Indy Dev Inc" y luego intente implementar con las credenciales de "Company Inc". Asegúrese de configurar las credenciales de distribución y de desarrollo de "Company Inc", y utilícelas.

Publiqué más información sobre esto en mi blog: http://omegadelta.net/2011/06/09/fiendish-ios-code-signing-invalid-binary-issue/

William Denniss
fuente
He confirmado con los ingenieros de Apple (en la WWDC la semana pasada) que es posible volver a firmar un binario creado por un desarrollador completamente diferente con un perfil de aprovisionamiento diferente. Desafortunadamente, también tengo problemas con esa tarea ... :(
livingtech
2

Yo tuve el mismo problema. Estaba listo para tirar la toalla sobre este problema, pero lo descubrí cuando fui a verificar mi código usando Murky. Siempre hojeo las diferencias de los archivos que cambiaron antes de registrarme. Al hacerlo, esta vez noté que el archivo project.pbxproj había cambiado ... y en la sección Distribución la entrada para "PROVISIONING_PROFILE [sdk = iphoneos *] ”Estaba en blanco.

Salir y reiniciar Xcode no funcionó para mí. En su lugar, entré en la configuración de mi proyecto y de destino y cambié la firma del código para seleccionar directamente mi perfil de distribución en lugar de confiar en la función de selección automática. Hacer esto hizo que el archivo project.pbxproj se completara con los valores correctos a pesar de que la función de selección automática supuestamente seleccionó exactamente el mismo perfil que seleccioné manualmente.

Necesito una cerveza...

NorthStar7
fuente
2

Después de probar todas las otras correcciones enumeradas aquí, registramos un TSI con Apple. Después de haber seguido todos los pasos de la Nota técnica TN2250, nuestro problema se debió a que faltaba un recurso sellado o no era válido. En nuestro caso lo fue ._.DS_Store.

El " .." se llama un archivo Apple Double, y es el resultado de copiar la carpeta Xcode Project, * descomprimida *, en un sistema de archivos que no admite correctamente las 'bifurcaciones de recursos' de HFS + (utilizado para firmas de código). Estos extra " ". Los archivos resultan y provocan una falla en la verificación de firma del código.

Para limpiar los archivos problemáticos de Apple Double de la carpeta de su proyecto Xcode, ejecute el comando dot_clean en la carpeta de su proyecto Xcode, haga una compilación limpia y luego vuelva a archivar y vuelva a intentar su envío.

dot_clean /the/path/to/xcode/project

Nota: puede simplemente arrastrar la carpeta del proyecto a la terminal para completar automáticamente la ruta

No hay ningún mensaje cuando ejecuta el comando, pero la compilación del proyecto puede mostrar una advertencia sobre el archivo la próxima vez que compile. Puede ignorar esto, la aplicación validará y enviará correctamente.

Dave Anderson
fuente
1

Resolvió esto limpiando el archivo myProject.xcodeproj (clic derecho, abrir paquete), el paquete contenía archivos del co-desarrollador, después de eliminarlos, el problema se resolvió

Franco
fuente
1

Por lo que vale, quiero agregar qué fue lo que solucionó este problema para mí. Tuve un ? (signo de interrogación) en el título de mi aplicación que estaba causando el error.

Stephen J.
fuente
1

Recibí un binario no válido, si la aplicación no usa la notificación push remota, pero dejé el código para registrar push y los delegados de devolución de llamada para registrarse / recibir notificación remota sin comentar, incluso si el código no se usa.

Esto es reciente. Mi última presentación de la semana pasada estuvo bien. Esta semana, devuelve un binario no válido. Afortunadamente, hay un correo electrónico que explica el error.

honcheng
fuente
1

Estaba teniendo un problema similar, pero no uso entity.plist. Sin embargo, después de una docena de cargas fallidas, revisé mi info.plist y descubrí algo. Mi matriz CFBundleIconFiles tenía una entrada vacía. Lo eliminé y lo volví a enviar, ¡y finalmente fue aceptado!

En serio, ¿qué tan difícil sería para Apple exponer ese tipo de errores de validación?

Editar: No se ve inmediatamente dónde están los CFBundleIconFiles porque usan un nombre diferente. En la vista de información del proyecto, haga clic Ctl y seleccione "Mostrar claves / valores sin procesar" y luego verá las referencias a CFBundleWhatever. En el caso de este editor, estaba intentando utilizar un archivo [email protected] inexistente.

Greg Haygood
fuente
0

Mis dos centavos:

Descargue la última versión del cargador de aplicaciones. Acabo de actualizar y ahora recibo un mensaje de error diferente.

Ross
fuente
0

Acabo de pasar por esta molestia (nuevamente) pero esta vez encontré que mi perfil de distribución tenía un estado de "No válido". Si cree que todo lo demás está bien, vuelva a verificar el estado en el portal y renueve / vuelva a descargar todo lo que no esté en estado Activo.

Woodmantech
fuente
0

Recibí un binario no válido después de cargar una aplicación, sin seguimiento por correo electrónico de por qué falló. Intenté hacer un par de cosas a la vez, y no estoy seguro de cuál de las siguientes realmente lo solucionó:

  1. Macbook Pro reiniciado
  2. Moví el código fuente de mi proyecto de una unidad NTFS a una unidad HFS + y lo volví a compilar.
Andrew Garrison
fuente
0

Tuve un problema con esto y con el SDK de 4.3 GM. Una de nuestras aplicaciones no superaría la carga recibida. Resultó ser un problema de perfil de aprovisionamiento. Regeneré el perfil de la tienda de aplicaciones y funcionó bien.

logancautrell
fuente
0

Mi solución implicó la creación de una nueva ID de aplicación. No estoy seguro exactamente de por qué eso lo solucionó, pero sospecho que pueden haber sido identificadores de paquete no coincidentes: la creación de la nueva ID de aplicación me obligó a asegurarme de que mi aplicación e iTunes esperaban lo mismo.

Praveen
fuente
0

Otra solución:

Para mí, simplemente configurar los certificados de 'Liberación' en 'firma de código' lo solucionó. Inicialmente se establecieron en 'No firmar código'.

RSH1
fuente
0

Para mí, el problema se resolvió volviendo a guardar una imagen PNG con la opción no entrelazada. En versiones anteriores se permitían los png entrelazados, pero sepa que estas imágenes pueden causar el binario no válido.

Mi mensaje de Apple: Archivo de icono dañado: el archivo de icono [email protected] parece estar dañado. Su icono no debe ser un archivo PNG entrelazado.

Puedes ver si el PNG está entrelazado usando el comando "archivo" en la terminal: Eva-Madrazos-MacBook-Pro-2: GQ 7 integracion ads Eva $ file * .png Default.png: Datos de imagen PNG, 320 x 480, RGB de 8 bits / color, no entrelazado

Buena suerte eva

Eva Madrazo
fuente
0

Quiero señalar la posibilidad de enviar un correo electrónico a Apple y pedirles que revisen sus registros. Hice precisamente eso, después de haber probado muchas cosas primero. Fue necesario recordarles después de casi cuatro semanas, pero finalmente respondieron y señalaron el lugar exacto del problema.

El problema en mi caso fue que ya había probado otros íconos de aplicaciones y aún quedaba una referencia a la imagen anterior en 'CFBundleIcons'. Usé la funcionalidad de arrastrar y soltar para configurar el ícono, pero no noté que el contenido anterior no se borró completamente antes de agregar la nueva referencia.

Para ver la referencia defectuosa fue necesario expandir las flechas para ver todos y cada uno de los subelementos en el archivo plist. Un consejo es hacer clic derecho en el archivo y seleccionar la opción para ver el contenido sin procesar. De esa forma no necesitarás expandir nada.

Vanja
fuente
0

Probé todas las demás soluciones propuestas, pero nada ayudó.

Terminé creando un nuevo proyecto de Xcode y copié todo mi código y recursos en él. Eso funcionó y mi aplicación se colocó en la cola de revisión.

También puedo recomendar notas técnicas de Apples sobre firma de código para depuración / verificación.

Eloff
fuente
0

uuid no está permitido. Lo arreglé eliminando todo [[UIDevice currentDevice] uniqueIdentifier];

TK189
fuente