El codiseño de la API de Dropbox falla en Xcode 4.6.3: "el objeto de código no está firmado en absoluto"
macos code-signing (6)
Tengo una aplicación OS X que se distribuye a través de la App Store de Mac y recientemente se actualizó a Xcode 4.6.3.
Cuando ejecuto mi compilación normal ahora, recibo:
Command /usr/bin/codesign failed with exit code 1:
/Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app: code object is not signed at all
In subcomponent: /Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app/Contents/Frameworks/DropboxOSX.framework
Command /usr/bin/codesign failed with exit code 1
Parece que no puedo discernir ningún otro cambio en mi proyecto, por lo que no puedo decir si se trata de un problema relacionado con la actualización 4.6.3 o algo más.
Intenté reiniciar Xcode, ejecutar una compilación limpia y limpiar la carpeta de compilación.
Como se destaca en otras respuestas, hay un cambio en la forma en que funciona la firma del código. Si ha instalado alguno de los Xcode 5 DP, entonces las nuevas herramientas se usarán incluso si está utilizando Xcode 4.6.X.
Todo lo que necesita hacer en esta etapa (en Xcode 4.6.X) es tomar la bandera --deep indicada arriba y agregarla a las banderas de firma de código (Destino, Configuraciones de compilación) ver imagen a continuación.
Creo que puedo haber descubierto esto. He estado ejecutando Xcode 4.6.3 en OS X Mavericks, con la impresión de que las herramientas específicas de compilación se incluyeron en la aplicación Xcode.
Pero, parece que el codesign
está en /usr/bin
. Ya sea que lo instale uno de los instaladores de Xcode o que venga con una instalación de sistema vanilla, no estoy seguro. Pero al leer la página man
para codesign
, encontré esta ingeniosa opción:
--deep When signing a bundle, specifies that nested code content such as helpers, frameworks, and plug-ins, should be recursively signed
in turn. Beware that all signing options you specify will apply, in turn, to such nested content.
When verifying a bundle, specifies that any nested code content will be recursively verified as to its full content. By default,
verification of nested content is limited to a shallow investigation that may not detect changes to the nested code.
When displaying a signature, specifies that a list of directly nested code should be written to the display output. This lists only
code directly nested within the subject; anything nested indirectly will require recursive application of the codesign command.
Y luego encontré esta publicación ( https://alpha.app.net/isaiah/post/6774960 ) de hace dos semanas (~ junio de 2013), que menciona (aunque de segunda mano):
@isaiah, le pregunté a un tipo en los laboratorios sobre eso. Dijo que el codesign ahora requiere que los marcos incrustados se firmen por separado antes de firmar el paquete de la aplicación como un todo.
Manualmente vuelve a ejecutar el comando codesign
que Xcode normalmente ejecuta, mientras que agrega el indicador --deep
al final, firma la aplicación correctamente.
Todavía no estoy seguro de qué ramificaciones tiene este manual, o si puedo ajustar la construcción de Xcode para agregar el flag --deep
automáticamente, pero este parece ser el problema subyacente. ( codesign
ya no firma profundamente su paquete de aplicaciones).
Esto podría ayudar a alguien:
Finalmente descubrí la solución por ensayo y error. En mi caso, tenía un nombre de carpeta que coincidía con la variable "Nombre del producto" en la configuración de compilación. ¡Esto también coincidió con el nombre completo del proyecto! Así que simplemente cambié un campo. Cambié la "Configuración de compilación" -> "Nombre del producto". El valor de MySpecialApp se cambió a My-SpecialApp. ¡Eso fue simplemente! Luego, inicié sesión nuevamente en el portal para desarrolladores de Apple y creé un nuevo ID de aplicación y perfiles de aprovisionamiento móvil para desarrollo y distribución, y el resto es historia. Mis lanzamientos ahora funcionan cuando se implementan a través de la distribución Ad Hoc. Una nota final sobre esto. Esto definitivamente es un error que Apple debe alertar al usuario de que ha hecho algo mal y permitir algún tipo de acción correctiva automatizada. - Ver más en: http://www.chrisdanielson.com/2012/08/29/codesign-ipa-and-the-code-object-is-not-signed-at-all-problem/#sthash.F0nF3BbC.dpuf
Para mí fue un Framework PaddleMAs corrupto que: 1. Eliminé de mi archivo Cocoapods 2. Instalé Ran pod install
3. Reinicié mi Xcode
y resolvió el problema. Por algún motivo, un marco dañado evitará que se firme. Desafortunadamente, XCode no muestra este error de manera muy clara y le ofrece una buena sugerencia de solución. Han planteado un error con Apple para solucionarlo.
Para mí, este problema fue causado después de arrastrar una carpeta llamada "recursos" en mi proyecto. Después de cambiar su nombre a cualquier otra cosa (como "recursos", por ejemplo), el error desapareció.
Tuve el mismo problema, pero la respuesta fue simple: la identidad de firma de código en mi aplicación estaba configurada en "-", así que simplemente configurándola en "No codificar señal" me solucionó.
"-" parece ser la configuración predeterminada cuando lleva a cabo un conjunto de acciones, aunque no puedo decirle cuáles son.