¿Cómo decide la utilidad de firma de códigos de Apple con qué algoritmo (s) SHA firmar una biblioteca compartida?

Primero, un poco de historia: estoy investigando por qué la aplicación MacOS / X de mi compañía (que según todas las cuentas parece estar firmada correctamente; funciona bien en MacOS / X 10.11.xy 10.12.x; Gatekeeper está bien con eso en todos Las versiones de MacOS; "spctl --assess" y "codesign -vvvv" dicen que cumple con su requisito en todas las versiones del sistema operativo), sin embargo, no se ejecutará en OS / X 10.10.x - en 10.10.x cuando intento iniciar , recibo un Informe de bloqueo donde dyld se queja de que algunas de las bibliotecas no están firmadas correctamente:

Dyld Error Message:
  Library not loaded:     @executable_path/../Frameworks/libcrypto.1.0.0.dylib
  Referenced from: /Applications/MyApplication v123/MyApplication.app/Contents/MacOS/MyApplication
  Reason: no suitable image found.  Did find:
  /Applications/MyApplication v123/MyApplication.app/Contents/MacOS/../Frameworks/libcrypto.1.0.0.dylib: code signature invalid for '/Applications/MyApplication v123/MyApplication.app/Contents/MacOS/../Frameworks/libcrypto.1.0.0.dylib'

Mientras investigaba ese problema, noté que las bibliotecas en .app / Contents / Framework, todas firmadas con el mismo comando de código, a través del script de compilación / paquete en nuestra máquina de compilación OS / X que ejecuta OS / X 10.12 - - tienen diferentes tipos de hashes calculados para ellos.

Es decir, si miro cómo se firmó uno de los archivos .dylib que no son Qt, veo que solo tiene un hash sha256 grabado:

sierrabuild-polaris:MyApp v123 autobuild$ codesign -vvvd ./MyApp.app/Contents/Frameworks/libsndfile.1.dylib 
Executable=/Applications/MyApp v123/MyApp.app/Contents/Frameworks/libsndfile.1.dylib
Identifier=libsndfile.1
Format=Mach-O thin (x86_64)
CodeDirectory v=20200 size=4140 flags=0x0(none) hashes=125+2 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha256=b4256e9bf0fac567bb8ac86f56964c066b93d069
Hash choices=sha256     <----------------------------- ONLY 256!?
CDHash=b4256e9bf0fac567bb8ac86f56964c066b93d069
Signature size=8846
Authority=Developer ID Application: MyCompany
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Jan 24, 2017, 1:39:58 AM
Info.plist=not bound
TeamIdentifier=5XD27G7646
Sealed Resources=none
Internal requirements count=1 size=172

... pero si miro cómo se firmó cualquiera de los marcos Qt cautivos, OTOH, veo que incluye los hashes sha1 y sha256:

sierrabuild-polaris:MyApp v123 autob,uild$ codesign -vvvd ./MyApp.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore
Executable=/Applications/MyApp v123/MyApp.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore
Identifier=org.qt-project.QtCore
Format=bundle with Mach-O thin (x86_64)
CodeDirectory v=20200 size=42549 flags=0x0(none) hashes=1324+3 location=embedded
Hash type=sha256 size=32
CandidateCDHash sha1=09b5854f83091228f1baaad1455e7a30d6500c95
CandidateCDHash sha256=6dfdc74da06618e1b406a6e5fd0794fe43701def
Hash choices=sha1,sha256    <------------- BOTH sha1 and sha256, yay!
CDHash=6dfdc74da06618e1b406a6e5fd0794fe43701def
Signature size=8896
Authority=Developer ID Application: MyCompany
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Jan 24, 2017, 1:39:57 AM
Info.plist entries=8
TeamIdentifier=5XD27G7646
Sealed Resources version=2 rules=13 files=1
Internal requirements count=1 size=184

Dado que el error de dyld al intentar ejecutar mi aplicación con Yosemite siempre se refiere a una de las bibliotecas que solo tiene un hash sha256, mi teoría de trabajo es que el dyld de OS / X 10.10.x es lo suficientemente antiguo como para no saber nada sobre SHA- 256 hashes, y es por eso que se produce un error cuando intenta cargar una biblioteca compartida cautiva que está firmada solo con un hash SHA-256.

Mi pregunta (suponiendo que no esté ladrando por completo el árbol equivocado aquí) es: ¿cómo decide el codeign cuándo estampar un archivo solo con hash sha256, en lugar de agregar un hash sha1 y sha256? ¿Y cómo puedo forzar que codeign siempre incluya ambos hash, para que mi aplicación pueda ejecutarse nuevamente bajo 10.10.x (como solía hacerlo antes de actualizar nuestra máquina de compilación a OSX / Sierra)?

Para el registro, así es como estoy invocando codeign en mi script de compilación: los argumentos de invocación son exactamente los mismos para todas las bibliotecas (tanto las bibliotecas de marco Qt que terminan con sha1, sha256 como las bibliotecas no Qt que terminan con solo sha256), por ejemplo:

codesign -f -v -s "Developer ID Application:  MyCompanyName" "./Frameworks/libcrypto.1.0.0.dylib"
codesign -f -v -s "Developer ID Application:  MyCompanyName" "./Frameworks/QtCore.framework/Versions/5/QtCore"

Respuestas a la pregunta(2)

Su respuesta a la pregunta