Después de un envío reciente, he recibido el siguiente error:
Firma no válida: el paquete de aplicaciones anidado (FooBar.app/Contents/Frameworks/GData.framework) no está firmado, la firma no es válida o no está firmada con un certificado de envío de Apple. Consulte la Guía de creación de código y espacio aislado de aplicaciones para obtener más información.
Firma no válida: el paquete de aplicaciones anidado (FooBar.app/Contents/Frameworks/Growl.framework) no está firmado, la firma no es válida o no está firmada con un certificado de envío de Apple. Consulte la Guía de creación de código y espacio aislado de aplicaciones para obtener más información.
Firma no válida: el paquete de aplicaciones anidado libcurl (FooBar.app/Contents/Frameworks/libcurl.framework) no está firmado, la firma no es válida o no está firmada con un certificado de envío de Apple. Consulte la Guía de firma de código y espacio aislado de aplicaciones para obtener más información.
Así que firmé todos los paquetes de marcos según Technote 2206 :
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libcurl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libssh2.1.dylib
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./Growl.framework/Versions/A/Growl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./GData.framework/Versions/A/GData
Nota técnica 2206 dice:
Marcos de firma
Dado que los marcos son paquetes, parece lógico concluir que puede firmar un marco directamente. Sin embargo, éste no es el caso. Para evitar problemas al firmar marcos, asegúrese de firmar una versión específica en lugar de todo el marco:
# Esta es la forma incorrecta:
codeign -s mi-firma-identidad ../FooBarBaz.framework
# Esta es la manera correcta:
codeign -s mi-firma-identidad ../FooBarBaz.framework/Versions/A
Y cuando trato de verificar los resultados, me parece bien:
% codesign -vvv FooBar.app/Contents/Frameworks/libcurl.framework
FooBar.app/Contents/Frameworks/libcurl.framework: valid on disk
FooBar.app/Contents/Frameworks/libcurl.framework: satisfies its Designated Requirement
% codesign -vvv FooBar.app/Contents/Frameworks/Growl.framework
FooBar.app/Contents/Frameworks/Growl.framework: valid on disk
FooBar.app/Contents/Frameworks/Growl.framework: satisfies its Designated Requirement
Por diversión, intenté firmar el paquete de marco directamente y aún así fue rechazado. Pero eso es exactamente lo que la documentación dice que no debe hacer.
¿Alguna suposición de por qué eso se consideraría inválido? Estoy usando el mismo certificado que uso para firmar el código de mi aplicación, el que ha funcionado en el pasado.
Mi única suposición sería algo que ver con los plists existentes (¿necesito poseer los identificadores en los Info.plists del marco?) O derechos, ¿alguna sugerencia?