Wie signieren Sie Framework-Bundles für den Mac App Store?
Nach einer letzten Vorlage habe ich bekommen die folgende Fehlermeldung:
Ungültige Signatur - das verschachtelte app-bundle (FooBar.app/Contents/Frameworks/GData.Rahmen) ist nicht signiert, die Signatur ist ungültig, oder es ist nicht signiert mit einer Apple-Vorlage Zertifikat. Siehe das Code Signing-und Anwendungs-Sandboxing-Handbuch für weitere Informationen.
Ungültige Signatur - das verschachtelte app-bundle (FooBar.app/Contents/Frameworks/Knurren.Rahmen) ist nicht signiert, die Signatur ist ungültig, oder es ist nicht signiert mit einer Apple-Vorlage Zertifikat. Siehe das Code Signing-und Anwendungs-Sandboxing-Handbuch für weitere Informationen.
Ungültige Signatur - das verschachtelte app-bundle libcurl (FooBar.app/Contents/Frameworks/libcurl.Rahmen) ist nicht signiert, die Signatur ist ungültig, oder es ist nicht signiert mit einer Apple-Vorlage Zertifikat. Siehe das Code Signing-und Anwendungs-Sandboxing-Handbuch für weitere Informationen.
Also unterschrieb ich alle framework-bundles pro Technote 2206:
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:
Unterzeichnung Frameworks
Sehen, wie die Rahmenbedingungen sind, bündelt es scheint logisch zu dem Schluss, dass Sie können melden Sie einen Rahmen direkt. Dies ist jedoch nicht der Fall. Um Probleme zu vermeiden, wenn die Unterzeichnung der frameworks stellen Sie sicher, dass Sie Schild von einer bestimmten version, im Gegensatz zu den ganzen Rahmen:
# Dies ist der falsche Weg:
codesign -s-meine-Signatur-Identität ../FooBarBaz.Rahmen
# Dies ist der richtige Weg:
codesign -s-meine-Signatur-Identität ../FooBarBaz.framework/versions/A
Und wenn ich versuche, die Resultate zu überprüfen, es sieht gut aus für mich:
% 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
For fun, ich habe versucht, die Unterzeichnung des framework-bundle direkt und es wurde immer noch abgelehnt. Aber genau das ist es, was die Dokumentation sagt nicht zu tun.
Vermutungen, warum das ungültig? Ich bin mit dem gleichen cert, die ich verwenden, um den code signieren meiner app-eine, die hat in der Vergangenheit gearbeitet.
Meine einzige Vermutung wäre, etwas zu tun mit den bestehenden plists (muss ich über die IDS im Rahmen der Info.plists?) oder Anwartschaften-irgendwelche Vorschläge?
InformationsquelleAutor der Frage csexton | 2011-10-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf baptr Antwort habe, entwickelte ich dieses shell-script-codesigns alle meine Rahmen und andere binäre Ressourcen - /aux-ausführbare Dateien (derzeit unterstützte Typen: dylib -, bundle -, und login items):
Scripts
Unterverzeichnis in meinem Projekt ist root.codesign-frameworks.sh
../codesign-frameworks.sh
(oder was auch immer Sie genannt Ihr Skript oben) in das Skript-editor-Textfeld. Verwenden./Scripts/codesign-frameworks.sh
wenn Sie speichern Sie das Skript in einem Unterverzeichnis.Sollten Sie immer noch eine "Identität: mehrdeutig (entspricht: ..." Fehler, bitte Kommentar unten. Dies sollte nicht mehr passieren.
Aktualisiert 2012-11-14: Hinzufügen von Unterstützung für die frameworks mit Sonderzeichen in Ihren Namen (ohne Anführungszeichen) "codesign-frameworks.sh".
Aktualisiert 2013-01-30: Hinzufügen von Unterstützung für spezielle Zeichen in alle Wege (dazu gehören Anführungszeichen) "codesign-frameworks.sh".
Aktualisiert 2013-10-29: Hinzufügen von experimentellen dylib Unterstützung.
Aktualisiert 2013-11-28: Hinzufügen von Berechtigungen-Unterstützung. Verbesserung der experimentellen dylib Unterstützung.
Aktualisiert 2014-06-13: Befestigung Mitgestaltung Probleme mit frameworks mit (verschachtelten) frameworks. Dies wurde durch hinzufügen
-depth
optionfind
die Ursachenfind
zu tun, eine Tiefe-ersten traversal. Dies wurde notwendig, weil der das Problem hier beschrieben. Kurz: ein mit bundle kann nur unterzeichnet werden, wenn die verschachtelten bundles sind bereits unterzeichnet.Aktualisiert 2014-06-28: Hinzufügen von experimentellen bundle support.
Aktualisiert 2014-08-22: Verbesserung der code und das vermeiden von Ausfällen wiederherstellen IFS.
Aktualisiert 2014-09-26: Hinzufügen von Unterstützung für login-Elemente.
Aktualisiert 2014-10-26: zu Zitieren-Verzeichnis überprüft. Dies behebt die "Linie 31/42: zu viele Argumente" - Fehler und die daraus resultierende "code-Objekt ist nicht signiert" Fehler Pfade, einschließlich Sonderzeichen.
Aktualisiert 2014-11-07: Auflösen der zweideutigen Identität-Fehler (wie "Mac-Developer: zweideutig ...") bei Verwendung der automatischen identity resolution in Xcode. Sie müssen nicht explizit gesetzt, wird die Identität mehr und kann nur "Mac Developer"!
Aktualisiert 2015-08-07: Verbesserung der Semantik.
Verbesserungen willkommen!
InformationsquelleAutor der Antwort JanX2
Dein Kommentar zeigt, das Sie unterzeichnet die Objekte innerhalb der bundle-version Verzeichnis. Die Technote zeigt Unterschreiben das Verzeichnis selbst.
Den folgenden Begegnungen die Technote besser:
InformationsquelleAutor der Antwort baptr
Dies ist, wie ich es behoben;
Nachdem das build-Archiv und reichen Sie die app erneut...
InformationsquelleAutor der Antwort emreoktem
Eine Sache, die ich don ' T siehe erwähnt hier ist, dass Sie brauchen, um Ihre Info.plist in /Ressourcen innerhalb der versionierten framework-Verzeichnis. Andernfalls bekommen Sie die "bundle-format unerkannt unwirksam oder ungeeignet ist" Fehlermeldung, wenn Sie versuchen, melden Sie versionierten Verzeichnis.
Habe ich eine ausführlichere Antwort hier: Wie Codesign Knurren.Rahmen für die Sandbox-App für den Mac
InformationsquelleAutor der Antwort Ross Bencina