Ich versuche, ein App-Bundle zu signieren, das die Java Runtime Environment 8 (JRE) enthält.
Von der Befehlszeile aus führe ich diesen Befehl aus:
codesign -s "Developer ID Application: My Company" /Development/MyApp.app
Ich bekomme diese Ausgabe:
MyApp.app: code object is not signed at all
In subcomponent: /Development/MyApp.app/Contents/PlugIns/jre8/Contents/Home/jre/COPYRIGHT
Das Ergebnis ist, dass das App-Bundle nicht wie erwartet signiert wird.
Wie behebe ich das?
Codesignierung
Das benutzerfreundliche Handbuch zum Code-Signieren besagt, dass Sie zuerst die Unterkomponente signieren und es dann erneut mit Ihrer App selbst versuchen sollten:
codesign sagt, dass mein Code nicht signiert ist, wenn ich versuche, ihn zu signieren.
Stellen Sie sicher, dass der gesamte verschachtelte Code bereits signiert und seine Signatur gültig ist. Xcode übernimmt dies für Sie, wenn Sie es Ihre Codesignatur-Aufgaben erledigen lassen.
Es heißt weiter, dass Xcode die gesamte Signierung übernimmt, was hilfreich sein kann oder auch nicht, da Sie sich bereits dafür entscheiden, Dinge von der Befehlszeile aus zu signieren.
--tief
Um den gesamten verschachtelten Code auf einmal zu signieren, fügen Sie das --deep
Argument hinzu codesign
:
codesign --deep -s "Developer ID Application: My Company" /Development/MyApp.app
Shell-Skript
Eine andere Möglichkeit, dasselbe zu tun, besteht darin, ein Shell-Skript zu erstellen, das den Signaturstatus des verschachtelten Codes überprüft und signiert, falls er fehlt. Auf diese Weise erhalten Sie möglicherweise mehr Kontrolle darüber, was Sie innerhalb des Pakets signieren.
Beispiel:
Ein aufgerufenes Bash-Skript sign-unsigned.sh
, das einen Eintrag im Bündel überprüft und signiert, falls er noch nicht signiert ist, könnte folgendermaßen ausgeführt werden:
#!/bin/bash
if codesign --verify $1 ; then
exit;
else
codesign --sign "$2" $1;
fi
Geben Sie das sign-unsigned.sh
ein /Development
und tun Sie dies auf der Befehlszeile:
cd /Development/MyApp.app/
find . -exec ../sign-unsigned.sh {} "Developer ID Application: My Company" \;
codesign --sign "Developer ID Application: My Company" ../MyApp.app
codesign
für mich tun könnte, wenn ich einen Bundle-Ordner angebe ...codesign
. Das nächste Mal lese ich Manpages "tiefer". Ich habe allerdings etwas über Shell-Scripting gelernt. :-D
Fahrrad
Joachim Bratteli