Je suis complètement intrigué par le système de signature Apple. Ça me rend fou.Gatekeeper rejette mon lot d'applications
J'ai une application Qt (ne passant pas par l'écosystème XCode) que je suis en train de signer manuellement sur macOS 10.12.
Après la signature, je cours codesign --verify --deep --strict verbose = 2 PATHTOAPP tel que recommandé ici: https://developer.apple.com/library/content/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG211
Et je reçois:
valid on disk satisfies its Designated Requirement
Quel est le prévu, résultat valide.
Quand je codesign -dv verbose = 4 PATHTOAPP je reçois:
Authority=Developer ID Application: MYAPPLEID Authority=Developer ID
Certification Authority Authority=Apple Root CA
Sealed Resources version=2
Quand je lance contre l'outil check-signature fourni par Apple, je reçois un OUI qui signifie qu'il est correctement signé.
Mais quand je le lance contre spctl -a -t exec -vv PATHTOAPP je reçois un:
rejected (embedded framework contains modified or invalid version)
Et à la fin, Gatekeeper rejette mon application
Malheureusement, l'utilitaire spctl ne le fait pas donnez-moi une idée de ce qui ne va pas et où regarder. Je ne comprends pas, puisque le codeign avec les drapeaux les plus profonds et les plus stricts dit que c'est ok.
Une idée sur la façon dont je peux obtenir plus d'informations?
EDIT1: J'ai couru spctl --assess --raw --verbose PATHTOAPP et je reçois ceci:
<key>assessment:authority</key>
<dict>
<key>assessment:authority:flags</key>
<integer>0</integer>
<key>assessment:authority:source</key>
<string>obsolete resource envelope</string>
<key>assessment:authority:weak</key>
<true/>
</dict>
<key>assessment:cserror</key>
<integer>-67009</integer>
<key>assessment:remote</key>
<true/>
<key>assessment:verdict</key>
<false/>
Maintenant, je ne sais pas quoi croire, est-il « cadre intégré modifié contiennent les ou une version invalide "ou est-ce" enveloppe de ressources obsolète "(et pourquoi)?
Quand je vérifie les codes d'erreur ici: https://github.com/CamJN/Security/blob/77b26b3e434caec74403da43bcfb02532a25d7ff/libsecurity_codesigning/lib/CSCommon.h
Je vois:
errSecCSWeakResourceRules = -67013, /* resource envelope is obsolete */
errSecCSBadFrameworkVersion = -67009, /* embedded framework contains modified or invalid version */
EDIT2: Il est vraiment le contenu de mon dossier cadres qui est à l'origine du problème. Quand je supprime tout ce qu'il y a dedans avant de le signer, il passe la validation de spctl.
Le problème est, si je viens de laisser un seul, cadre pur tel que QtCore (de Qt 5.7.0) J'obtient l'erreur immédiatement spctl:
rejected (embedded framework contains modified or invalid version)
Si vous utilisez 'macdeployqt', vous pouvez utiliser l'argument' -codesign' et le faire signer pour toi. – TheDarkKnight