webentwicklung-frage-antwort-db.com.de

Das Codesign der Dropbox-API schlägt in Xcode 4.6.3 fehl: "Codeobjekt ist überhaupt nicht signiert"

Ich habe eine OS X-App, die über den Mac App Store vertrieben und kürzlich auf Xcode 4.6.3 aktualisiert wurde.

Wenn ich jetzt meinen regulären Build starte, erhalte ich:

Command /usr/bin/codesign failed with exit code 1:

/Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app: code object is not signed at all
In subcomponent: /Users/Craig/Library/Developer/Xcode/DerivedData/Mac-dxcgahgplwpbjedqnembegifbowj/Build/Products/Debug/MyApp.app/Contents/Frameworks/DropboxOSX.framework
Command /usr/bin/codesign failed with exit code 1

Ich kann anscheinend keine anderen Änderungen in meinem Projekt erkennen, daher kann ich nicht feststellen, ob es sich um ein Problem im Zusammenhang mit dem 4.6.3-Update handelt oder um etwas anderes.

Ich habe versucht, Xcode neu zu starten, einen sauberen Build auszuführen und den Build-Ordner zu bereinigen.

75
Craig Otis

Ich glaube, ich habe das herausgefunden. Ich habe Xcode 4.6.3 unter OS X Mavericks ausgeführt, wobei der Eindruck entstand, dass alle build-spezifischen Tools in der Xcode-Anwendung enthalten waren.

Aber es scheint, dass codesign in /usr/bin Ist. Ich bin mir nicht sicher, ob es von einem der Xcode-Installer bereitgestellt wird oder ob es mit einer Vanilla-Systeminstallation geliefert wird. Aber als ich die man Seite für codesign durchlas, fand ich diese raffinierte Option:

--deep  When signing a bundle, specifies that nested code content such as helpers, frameworks, and plug-ins, should be recursively signed
             in turn. Beware that all signing options you specify will apply, in turn, to such nested content.
             When verifying a bundle, specifies that any nested code content will be recursively verified as to its full content. By default,
             verification of nested content is limited to a shallow investigation that may not detect changes to the nested code.
             When displaying a signature, specifies that a list of directly nested code should be written to the display output. This lists only
             code directly nested within the subject; anything nested indirectly will require recursive application of the codesign command.

Und dann fand ich diesen Beitrag ( https://alpha.app.net/isaiah/post/677496 ) von vor zwei Wochen (~ Juni 2013), der (wenn auch aus zweiter Hand) erwähnt:

@isaiah Ich habe einen Typen in den Labors danach gefragt. Er sagte, dass Codesign jetzt erfordert, dass eingebettete Frameworks separat signiert werden, bevor das App-Bundle als Ganzes mit Code signiert wird.

Führen Sie den Befehl codesign, den Xcode normalerweise ausführt, manuell erneut aus, und fügen Sie am Ende das Flag --deep Hinzu, um die Anwendung ordnungsgemäß zu signieren.

Ich bin mir noch nicht sicher, welche Konsequenzen diese manuelle Signatur hat oder ob ich den Xcode-Build optimieren kann, um das --deep - Flag automatisch hinzuzufügen, aber dies scheint das zugrunde liegende Problem zu sein. (codesign signiert Ihr App-Bundle nicht mehr automatisch tief.)

140
Craig Otis

Wie in anderen Antworten hervorgehoben, ändert sich die Funktionsweise der Codesignatur. Wenn Sie einen der Xcode 5-DPs installiert haben, werden die neuen Tools auch dann verwendet, wenn Sie Xcode 4.6.X verwenden.

Alles, was Sie in dieser Phase (in Xcode 4.6.X) tun müssen, ist, das oben vorgeschlagene --deep-Flag zu verwenden und es in Ihre Codesignatur-Flags (Ziel, Build-Einstellungen) einzufügen (siehe Abbildung unten).

Specifying Deep Signing of Embedded Frameworks

67
rougeExciter

Für mich wurde dieses Problem verursacht, nachdem ich einen Ordner mit dem Namen "resources" in mein Projekt gezogen habe. Nachdem der Name in etwas anderes geändert wurde (z. B. "resourcessss"), ist der Fehler verschwunden.

12
andrei

Ich hatte das gleiche Problem, aber die Antwort war einfach: Die Code-Signatur-Identität in meiner App wurde auf "-" gesetzt, so dass ich durch einfaches Setzen auf "Don't Code Sign" (Kein Code-Signieren) behoben wurde.

"-" scheint die Standardeinstellung zu sein, wenn Sie eine Reihe von Aktionen ausführen, obwohl ich Ihnen nicht sagen kann, was das ist.

4
Maury Markowitz

Das könnte jemandem helfen:

Ich habe schließlich die Lösung durch Ausprobieren herausgefunden. In meinem Fall hatte ich einen Ordnernamen, der mit der Variablen "Produktname" in den Build-Einstellungen übereinstimmte. Dies passte auch zum gesamten Projektnamen! Also habe ich einfach ein Feld gewechselt. Ich habe die "Build-Einstellungen" -> "Produktname" geändert. Der Wert von MySpecialApp wurde in My-SpecialApp geändert. Das war es einfach! Ich habe mich dann wieder im Apple Entwicklerportal angemeldet und eine neue App-ID sowie neue Mobile-Provisioning-Profile für die Entwicklung und Verteilung erstellt. Der Rest ist Geschichte. Meine Releases funktionieren jetzt, wenn sie über die Ad-Hoc-Verteilung bereitgestellt werden. Eine abschließende Anmerkung dazu. Dies ist definitiv ein Fehler, der Apple soll entweder den Benutzer darauf aufmerksam machen, dass er etwas falsch gemacht hat, und eine Art automatisierte Korrekturmaßnahme ermöglichen. - Weitere Informationen finden Sie unter: http://www.chrisdanielson.com/2012/08/29/codesign-ipa-and-the-code-object-is-not-signed-at-all-problem/#sthash.F0nF3BbC.dpuf

2
Thomas Ayoub

Für mich war es ein beschädigtes Framework PaddleMA, das: 1. Ich habe es aus meiner Cocoapods-Datei entfernt. 2. Ran pod install 3. Meinen Xcode neu gestartet

und es löste das Problem. Aus irgendeinem Grund verhindert ein beschädigtes Framework, dass es signiert wird. Leider zeigt XCode diesen Fehler nicht wirklich deutlich an und gibt Ihnen einen guten Lösungsvorschlag. Habe einen Fehler mit Apple zu beheben.

0
UKDataGeek