Nach einer kürzlich eingereichten Meldung habe ich folgenden Fehler erhalten:
Ungültige Signatur - Das verschachtelte App-Bundle (FooBar.app/Contents/Frameworks/GData.framework) ist nicht signiert, die Signatur ist ungültig oder es ist nicht mit einem Apple-Übermittlungszertifikat signiert. Weitere Informationen finden Sie im Code Signing and Application Sandboxing Guide.
Ungültige Signatur - Das verschachtelte App-Bundle (FooBar.app/Contents/Frameworks/Growl.framework) ist nicht signiert, die Signatur ist ungültig oder es ist nicht mit einem Apple-Übermittlungszertifikat signiert. Weitere Informationen finden Sie im Code Signing and Application Sandboxing Guide.
Ungültige Signatur - Das verschachtelte App-Bundle libcurl (FooBar.app/Contents/Frameworks/libcurl.framework) ist nicht signiert, die Signatur ist ungültig oder es ist nicht mit einem Apple-Übermittlungszertifikat signiert. Weitere Informationen finden Sie im Code Signing and Application Sandboxing Guide.
Also habe ich alle Framework-Bundles gemäß Technote 2206 signiert :
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libcurl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./libcurl.framework/Versions/A/libssh2.1.dylib
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./Growl.framework/Versions/A/Growl
codesign -f -v -s "3rd Party Mac Developer Application: Name" ./GData.framework/Versions/A/GData
Technote 2206 sagt:
Signing Frameworks
Da Frameworks Bundles sind, erscheint es logisch zu folgern, dass Sie ein Framework direkt signieren können. Dies ist jedoch nicht der Fall. Um Probleme beim Signieren von Frameworks zu vermeiden, stellen Sie sicher, dass Sie eine bestimmte Version im Gegensatz zum gesamten Framework signieren:
# Das ist der falsche Weg:
Codesign -s meine-Signatur-Identität ../FooBarBaz.framework
# Das ist der richtige Weg:
Codesign -s meine-Signatur-Identität ../FooBarBaz.framework/Versions/A
Und wenn ich versuche, die Ergebnisse zu überprüfen, sieht es für mich gut aus:
% codesign -vvv FooBar.app/Contents/Frameworks/libcurl.framework
FooBar.app/Contents/Frameworks/libcurl.framework: valid on disk
FooBar.app/Contents/Frameworks/libcurl.framework: satisfies its Designated Requirement
% codesign -vvv FooBar.app/Contents/Frameworks/Growl.framework
FooBar.app/Contents/Frameworks/Growl.framework: valid on disk
FooBar.app/Contents/Frameworks/Growl.framework: satisfies its Designated Requirement
Zum Spaß habe ich versucht, das Framework-Bundle direkt zu signieren, und es wurde immer noch abgelehnt. Aber genau das soll die Dokumentation nicht tun.
Irgendwelche Vermutungen, warum das als ungültig angesehen wird? Ich verwende dasselbe Zertifikat, mit dem ich meine App mit einem Code signiere - das, das in der Vergangenheit funktioniert hat.
Meine einzige Vermutung wäre etwas mit den vorhandenen Plists (muss ich die Bezeichner in den Info.plists des Frameworks besitzen?) Oder Berechtigungen zu tun - irgendwelche Vorschläge?
Antworten:
Basierend auf der Antwort von baptr habe ich dieses Shell-Skript entwickelt, das alle meine Frameworks und anderen binären Ressourcen / ausführbaren Zusatzdateien (derzeit unterstützte Typen: Dylib-, Bundle- und Login-Elemente) codiert:
Scripts
Unterverzeichnis im Stammverzeichnis meines Projekts.codesign-frameworks.sh
../codesign-frameworks.sh
(oder wie auch immer Sie Ihr Skript oben genannt haben) in das Textfeld des Skripteditors ein. Verwenden./Scripts/codesign-frameworks.sh
Sie diese wenn Sie das Skript in einem Unterverzeichnis speichern.Sollten Sie weiterhin den Fehler " Identität : mehrdeutig (Übereinstimmungen: ...") erhalten, kommentieren Sie dies bitte unten. Dies sollte nicht mehr passieren.
Aktualisiert am 14.11.2012: Hinzufügen von Unterstützung für Frameworks mit Sonderzeichen im Namen (dies schließt keine einfachen Anführungszeichen ein) zu „Codesign-frameworks.sh“.
Aktualisiert am 30.01.2013: Unterstützung für Sonderzeichen in allen Pfaden (dies sollte einfache Anführungszeichen enthalten) zu „Codesign-frameworks.sh“ hinzugefügt.
Aktualisiert am 29.10.2013: Hinzufügen einer experimentellen Dylib-Unterstützung.
Aktualisiert 28.11.2013: Unterstützung für Berechtigungen hinzufügen. Verbesserung der experimentellen Dylib-Unterstützung.
Aktualisiert am 13.06.2014: Behebung von Codesignierungsproblemen mit Frameworks, die (verschachtelte) Frameworks enthalten. Dies wurde durch Hinzufügen einer
-depth
Option zu erreichtfind
, wodurch einefind
Tiefenüberquerung durchgeführt wird. Dies ist aufgrund des hier beschriebenen Problems notwendig geworden . Kurz gesagt: Ein enthaltendes Bundle kann nur signiert werden, wenn seine verschachtelten Bundles bereits signiert sind.Aktualisiert am 28.06.2014: Hinzufügen von experimenteller Bundle-Unterstützung.
Aktualisiert am 22.08.2014: Verbesserung des Codes und Verhinderung eines Fehlers bei der Wiederherstellung von IFS.
Aktualisiert am 26.09.2014: Unterstützung für Anmeldeelemente hinzugefügt.
Aktualisiert 26.10.2014: Verzeichnisprüfungen zitieren. Dies behebt den Fehler "Zeile 31/42: Zu viele Argumente" und den resultierenden Fehler "Codeobjekt ist überhaupt nicht signiert" für Pfade mit Sonderzeichen.
Aktualisiert am 07.11.2014: Behebung des mehrdeutigen Identitätsfehlers (wie „Mac Developer: mehrdeutig…“) bei Verwendung der automatischen Identitätsauflösung in Xcode. Sie müssen die Identität nicht mehr explizit festlegen und können einfach "Mac Developer" verwenden!
Aktualisiert am 07.08.2015: Verbesserung der Semantik.
Verbesserungen willkommen!
quelle
Ihr Kommentar zeigt, dass Sie die Objekte im Versionsverzeichnis des Bundles signiert haben. Der Technote zeigt an, das Verzeichnis selbst zu signieren.
Folgendes passt besser zum Technote:
quelle
So habe ich es behoben;
Nach dem Build-Archiv und senden Sie die App erneut ...
quelle
Eine Sache, die ich hier nicht erwähnt sehe, ist, dass Sie Ihre Info.plist in / Resources im versionierten Framework-Verzeichnis haben müssen. Andernfalls wird der Fehler "Bundle-Format nicht erkannt, ungültig oder ungeeignet" angezeigt, wenn Sie versuchen, das versionierte Verzeichnis zu signieren.
Ich habe hier eine ausführlichere Antwort gegeben: So codieren Sie Growl.framework für die Sandboxed Mac App
quelle