Gatekeeper rechaza la aplicación firmada válidamente

3

Estoy intentando publicar una aplicación firmada, pero al descargarla a través de Internet, el controlador de acceso se queja:

Además, la página de ayuda dice que la aplicación ha sido manipulada:

Lo que en realidad no es cierto, aquí está mi procedimiento de firma / empaquetado:

codesign --deep --force --verify -s "Developer ID Application: Nanolive SA (GMLD8K8WH3)" Steve/Steve.app
hdiutil create -volname Steve -srcfolder Steve -ov -format UDZO Steve.dmg
codesign -s "Developer ID Application: Nanolive SA (GMLD8K8WH3)" Steve.dmg

Todo el procedimiento funciona sin problemas, y como puede ver, no cambio el paquete entre la firma y la creación del dmg.

Revisé todo este documento y creo que todo es correcto: enlace

Además, revisé todo en la sección Checking Gatekeeper Conformance :

Comprobando el dmg:

$ spctl -a -t open --context context:primary-signature -v Steve.dmg
Steve.dmg: accepted
source=Developer ID

Utilizando codesign:

$ codesign --verify --deep --strict --verbose=2 Steve.app
--prepared:/Volumes/Steve/Steve.app/Contents/MacOS/ffmpeg
--validated:/Volumes/Steve/Steve.app/Contents/MacOS/ffmpeg

<snip a lot of validated libs>

--prepared:/Volumes/Steve/Steve.app/Contents/Frameworks/libvtkRenderingAnnotation-7.1.1.dylib
--validated:/Volumes/Steve/Steve.app/Contents/Frameworks/libvtkRenderingAnnotation-7.1.1.dylib
Steve.app: valid on disk
Steve.app: satisfies its Designated Requirement

utilizando la herramienta check-signature :

$ /Volumes/Signature\ Check/check-signature Steve.app
(c) 2014 Apple Inc.  All rights reserved.
YES
$ /Volumes/Signature\ Check/check-signature Steve.app/Contents/Frameworks/*
(c) 2014 Apple Inc.  All rights reserved.
Steve.app/Contents/Frameworks/QtConcurrent.framework: YES

<snip a lot of YES>

Steve.app/Contents/Frameworks/qwt: YES

Y por último usando spctl :

spctl -a -t exec -vv Steve.app
Steve.app: accepted
source=Developer ID
origin=Developer ID Application: Nanolive SA (GMLD8K8WH3)

La línea de comandos me dice que todo es 100% correcto, pero aún no puedo iniciar la aplicación desde la interfaz de usuario porque me falta algo, en algún lugar, que la línea de comandos no me dice.

Tenga en cuenta que cuando omito la cuarentena mediante la línea de comandos, la aplicación se inicia correctamente, lo que implica que no me falta ninguna biblioteca, por lo que sé.

El servidor de compilación ejecuta OSX High Sierra 10.13.6

¡Gracias por su tiempo y ayuda!

    
pregunta Paul Habfast 09.10.2018 - 14:29

1 respuesta

3

Un problema rpath

Pude resolver el problema gracias a alguna ayuda externa.

Al abrir la aplicación de la Consola, estaba viendo este mensaje, que viene de XProtectService, que aparentemente es la referencia real en términos de GateKeeper

default    11:00:31.445713 +0200    XprotectService    File /Volumes/Steve 2/Steve.app/Contents/MacOS/Steve failed on rPathCmd /Users/example/tmp/buildSteve/QtConcurrent.framework/Versions/5/QtConcurrent

Lo que significa que el problema fue en realidad algo malo rpath . El rpath se usa para encontrar y cargar los marcos necesarios para una aplicación.

Escribí un secuencia de comandos de python para corregir el rpath , y ahora funciona.

La secuencia de comandos cambia rpath del ejecutable utilizando install_name_tool de Apple. Esto no es algo que el usuario deba hacer y es algo que el desarrollador de una aplicación debe corregir antes de la implementación.

    
respondido por el Paul Habfast 22.10.2018 - 13:11

Lea otras preguntas en las etiquetas