Gatekeeper rifiuta un'applicazione firmata validamente

3

Sto provando a pubblicare un'applicazione firmata, ma quando lo scarico tramite internet, il gatekeeper si lamenta:

Inoltre, la pagina di aiuto dice che l'app è stata manomessa:

Che in realtà non è vero, ecco la mia procedura di firma / imballaggio:

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

L'intera procedura funziona senza problemi e, come puoi vedere, non cambio il pacchetto tra la firma e la creazione del dmg.

Ho esaminato l'intero documento e penso che tutto sia corretto: link

Inoltre, ho esaminato tutto nella sezione Checking Gatekeeper Conformance :

Controllo di dmg:

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

Uso del 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

utilizzando lo strumento 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

E infine utilizzando spctl :

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

La riga di comando mi dice che tutto è corretto al 100%, ma non riesco ancora a lanciare l'app dall'interfaccia utente perché mi manca qualcosa, da qualche parte, che la riga di comando non mi dirà.

Tieni presente che quando ignoro la quarantena utilizzando la riga di comando, l'app si avvia correttamente, il che implica che non ho alcuna libreria mancante per quanto ne so.

Il build server esegue OSX High Sierra 10.13.6

Grazie per il tuo tempo e il tuo aiuto!

    
posta Paul Habfast 09.10.2018 - 14:29
fonte

1 risposta

3

Un rpath Problema

Sono stato in grado di risolvere il problema grazie a qualche aiuto esterno.

Quando apri l'applicazione Console, vedevo questo messaggio, che proviene da XProtectService, che a quanto pare è il vero riferimento in termini di 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

Il che significa che il problema era in realtà un po 'di rpath pessimo. Il rpath viene utilizzato per trovare e caricare i framework necessari a un'applicazione.

Ho scritto uno script python per correggere ricorsivamente il rpath , e ora funziona.

Lo script cambia rpath dell'eseguibile utilizzando install_name_tool di Apple. Questo non è qualcosa che un utente dovrebbe mai avere bisogno di fare ed è esclusivamente qualcosa che lo sviluppatore di un'applicazione deve risolvere prima della distribuzione.

    
risposta data 22.10.2018 - 13:11
fonte

Leggi altre domande sui tag